//-----------------------------------------------
// sense of selenity
// (C)Yax
//-----------------------------------------------

TrackName     = {"sense of selenity"}
Copyright     = {"Yax"}

ResetGM();
r4
TrackSync;


//------------------------------------------------
// アルペジオ関数
//  D - 1音あたりのずらし幅
//  L - 全体の長さ
//  S - 鳴らす音、{}内に音階を記述(>と<は利用可能)
//------------------------------------------------
Function ARP(Int D, Int L, Str S) {
  Int LNG = L
  Int STP = 0
  Int TEMP = 0
  Str X = ""
  Str RS = ""
  Str NS = ""
  Int J = 0
  Array NAR = ()

  For(Int I = 1; I <= 100; I++ ){
    X = MID(S,I,1)
    J = ASC(X)

    IF (X == "") {
      EXIT
    }

    IF ( J >= 97 ) {
      IF ( J <= 103 ) {
        IF ( NS != "" ) {
	    NS = Replace(NS,{@-},{-@},off)
	    NS = Replace(NS,{@+},{+@},off)
	    NS = Replace(NS,{@#},{#@},off)
	    NS = Replace(NS,{@*},{*@},off)
          NAR = (NAR,NS)
	    NS = ""
        }
	  X = X + "@"
	}
    }
    NS = NS + X
  }
  IF ( NS != "" ) {
    NS = Replace(NS,{@-},{-@},off)
    NS = Replace(NS,{@+},{+@},off)
    NS = Replace(NS,{@#},{#@},off)
    NS = Replace(NS,{@+},{*@},off)
    NAR = (NAR,NS)
    NS = ""
  }

  For(Int I=0;I<SizeOf(NAR);I++){
    TEMP = L - STP
    RS = "r%" + #STR(STP)
    NS = Replace(NAR(I), {@}, {%}+#STR(TEMP),off)
    Sub{ RS NS }
    STP = STP+D
  }
  r%(L)
}

//------------------------------------------------
// ××ダンド関数
// (B>Eでリタルダンド、B>Eでアッチェラダンド)
//  B   - 開始時のテンポ(bpm)
//  E   - 終了時のテンポ(bpm)
//  LEN - 開始から終了までの長さ
//  STP - 切り替えのステップ幅
//------------------------------------------------
Function DANDO(B, E, LEN, STP) {
  Int _STEP = 24
  Int _DIFF = 0
  Int _CNT = 0
  Int _TMP = 0
  Int _LAP = 0

  IF( STP != 0 ) {
    _STEP = STP
  }

  _CNT = LEN/_STEP
  _DIFF = (E - B)/_CNT

  _TMP = B
  Tempo = %(B)

  For(Int I = 1; I < _CNT; I++ ){
    r%(_STEP)
    _TMP = _TMP + _DIFF
    Tempo = %(_TMP)
    _LAP = _LAP + _STEP
  }

  r%(LEN-_LAP)
  Tempo = %(E)
  r-%(LEN)
}

//------------------------------------------------
// その他の関数
//------------------------------------------------

FUNCTION FADEOUT() {
  EP.onTime(127,0,!1^1^1^1)
}

FUNCTION VC(a) {
  v(MML(v)+a)
}

//------------------------------------------------
// 全体の調整
//------------------------------------------------
TR(1)  V(110) REV(50) CHO(20)
TR(2)  V(112) REV(30) CHO(0)
TR(3)  V(110) REV(35) CHO(30)
TR(4)  V(105) REV(50) CHO(20)


//------------------------------------------------
// テンポ
//------------------------------------------------
INT T = 103
Tempo=(T)

INT T1 = 77
INT T2 = 90
INT T3 = 95
INT T4 = 65


//------------------------------------------------
// キー
//------------------------------------------------
INT KEY=-1

Key(KEY)                    // 全体のキー
TR(10) TrackKey(KEY * -1)   // リズムトラックの調整用、Keyの符号を逆にしたものをセットしておく



//------------------------------------------------
// MML
//------------------------------------------------

INT LOOP = 2

//------------------------------------
// Track 1 : 
//------------------------------------
TR(1) CH(1) P(48)
@100 v80
M.onNoteWave(0,40,!2.)
Slur(3)

 o4 l8 q90

[(LOOP)
 [2
  e&b&>d&f+^2<
  d+&b&>d&f+^2<
  d&b&>d&f+^2<
  c+&a&>c+&e^2<
  c&a&>c&e^2<
  <b&>g&b&>e^2<
  <b-&>f+&a&>e^2<
  <b&>g&b&>d+^2<
 ]

 [2
  [2
   e&b&>d&f+^2<
   d+&b&>d&f+^2<
   d&b&>d&f+^2<
   c+&a&>c+&e^2<
   c&a&>c&e^2<
   <b&>g&b&>e^2<
   <b-&>f+&a&>e^2<
   <b&>g&b&>d+^2<
  ]
 :
  [2
   e4b4>f+2<
   d4a4>f+2<
   c4g4>e2<
   d4a4>d2<
  ]
 ]

 [2
  e4&g+4&b4&>e4<
  d+4&g+4&b4&>d+4<
  d4&f+4&a4&>d4<
  c+4&f4&g+4&>c+4<
  f+4&a4&>c+4&f+4<
  f4&a4&>c+4&f4<
  :
  e4&a4&>c+4&e4<
  d+4&f+4&b4&>d+4<
 ]
 e4&g+4&b4&>d+4<
 a2f+4d+4
]

  e&b&>d&f+^2<
  d+&b&>d&f+^2<
  d&b&>d&f+^2<
  c+&a&>c+&e^2<
  FADEOUT()
  c&a&>c&e^2<
  <b&>g&b&>e^2<
  <b-&>f+&a&>e^2<
  <b&>g&b&>d+^2<


//------------------------------------
// Track 2 : 
//------------------------------------
TR(2) CH(2) P(80)
@1 v100

[(LOOP)
 Tempo(T)
 o6 l8 q90
 [8 r1]

 y64,1; r4. VC(-5)a+64b16..VC(+15) '>d<b' VC(-10) bag y64,0; 
 y64,1; 'f+4.d+4.' VC(-5) a4 VC(10) b64>c16..< VC(-10)ba VC(5) y64,0; 
 y64,1; 'b4.g4.' VC(-5) g4.b4 VC(5) y64,0; 
 y64,1; 'a4.e4.' VC(-5) 'e2d2'r VC(5) y64,0; 

 y64,1; r4.'e<b>' VC(-7) f+gf+e VC(7) y64,0; 
 y64,1; 'f+4.e4.'g4. VC(-5)a4 VC(5) y64,0; 
 y64,1; a64b-16..agf+4e4r16e32f32 y64,0; 
 y64,1; VC(-4) 'f+4.d+4.' VC(9)'b4.f+4.' VC(-8) ed+< VC(3) y64,0; 

 [2
  Tempo(T)
  y64,1; 'bf+' VC(-3) >ebf+ VC(10) '>c<a' VC(-10) bag VC(3) y64,0;
  y64,1; 'af+' VC(-5) br VC(5) 'f+4.d+4.' VC(-5) f+g VC(5) y64,0;
  y64,1; 'ad' VC(-10) f+ VC(10) 'bf+' VC(-10) f+ VC(10) '>c<a' VC(-5) bag VC(5) y64,0;
  y64,1; 'ae' VC(-5) >edc < VC(5)b VC(-5) aga VC(5) y64,0;

  y64,1; 'gd' VC(-10) f+e VC(15)b VC(-15)ag f+g VC(10) y64,0;
  y64,1; 'f+<b>'VC(-10) ed VC(15)a VC(-15)gf+ef+ VC(10) y64,0;
  y64,1; 'ge' VC(-10) f+ef+ VC(10) 'af+' VC(-5)f+ VC(5)'>c<a' VC(-10) f+ VC(10) y64,0;
  y64,1; 'bf+'VC(-5)d+ VC(8)'ae'VC(-8)d+ VC(5)'ge' VC(-5)d+ VC(5)'f+4d+4' y64,0;

  y64,1; 'f+<b>' VC(-10)de VC(14)'f+4<b4>' VC(-9)gab VC(5) y64,0;
  y64,1; 'f+<a>' VC(-10) ef+ VC(10) 'bf+' VC(-5) agf+e VC(5) y64,0;
  y64,1; 'f+<b>' VC(-5) ef+g VC(5) 'f+d' VC(-5) gab VC(5) y64,0;
  y64,1; 'e2.c+2.' VC(-5)ef+ VC(5) y64,0;

  y64,1; 'bg' VC(-5) ag VC(5) '>c<a' VC(-5) ba VC(5) '>d<b'>c< y64,0;
  y64,1; 'be' VC(-5) agf+ VC(5) e VC(-5) f+ga VC(5) y64,0;
  DANDO(T,T1,!1.,!8)
  y64,1; 'f+d+' VC(-10) d+e VC(15) 'f+4<b4>' VC(-10) ef+g VC(5)   y64,0;
  y64,1;  'a2e2' VC(-5) ARP(!32,!2,{d+f+b}) VC(5) y64,0;
 :
  Tempo(T2)
  v(MML(v)-8)
  y64,1; r<'g<b>'eb rb>df+< y64,0;
  y64,1; r'ad'f+a r>f+d<a   y64,0;
  y64,1; r'gc'e>c re<g>c<   y64,0;
  y64,1; r'ad'f+>d rf+<a>d  y64,0;

  y64,1; r<'gb'g>d ref+g  < y64,0;
  y64,1; r'ad'f+>d rf+ad<   y64,0;
  y64,1; r'g>c<'eg rceg     y64,0;
  DANDO(T2,T4,!2,!8)
  y64,1; r'af+'>d<a 'f+4.<a4.>' Tempo(T1) g24a24a+24 y64,0;
  v(MML(v)+8)
 ]

 Tempo(T3)
 [2
  y64,1; r<g+b>e VC(5) 'g+e' VC(-5) e<bg+> y64,0;
  y64,1; r<d+g+b VC(5) '>d+<g+' VC(-5) b>d+g+ y64,0;
  y64,1; rVC(5) 'd<f+' VC(-5) af+ VC(5) 'af+' VC(-5) >d<af+ y64,0;
  y64,1; VC(5) '>c+<g+' VC(-5) g+fg+ >VC(5) 'fc+' VC(-5) c+<g+f> y64,0;
  y64,1; r<a>c+f+ VC(5) 'ac+' VC(-5) f+c+<a> y64,0;
  y64,1; r<fa>c+ VC(5) 'f<a>' VC(-5) c+<a>c+ y64,0;
  :
  y64,1; rVC(5) 'e<a>' VC(-5) c+<a f+a>c+f+ y64,0;
  y64,1; <VC(5) 'f+d+' VC(-5) b>d+f+ < VC(5) 'bd+'> VC(-5)d+f+b y64,0;
 ]
 DANDO(T3,T4,!1.,!8)
 y64,1; < VC(5) 'be' VC(-5) g+b>d+ VC(5) 'g+e' VC(-5) d+g+b y64,0;
 < VC(-5) ARP(!64,!1,{a>cf+a}) VC(5)
]
Tempo(T)



//------------------------------------
// Track 3 : 
//------------------------------------
TR(3) CH(3) P(60)
@49 v50
M.onNoteWave(1,50,!1)

[(LOOP)
 [8 r1]

 o5 l8 q95

 'e1g1b1'
 'd+1f+1b1'
 'd1f+1b1'
 'c+1e1a1'
 'e1a1>c1<'
 'e1g1b1'
 'e1f+1b-1'
 'd+1a1b1'

 [2
  [2
   'e1g1b1'   r-1 <<e1>>
   'd+1f+1b1' r-1 <<d+1>>
   'd1f+1b1'  r-1 <<d1>>
   'c+1e1a1'  r-1 <<c+1>>
   'e1a1>c1<' r-1 <<a1>>
   'e1g1b1'   r-1 <<g1>>
   'e1f+1b-1' r-1 <<f+1>>
   'd+1a1b1'  r-1 <<d+1>>
  ]
 :
  [2
   rrrb2^16>c32c+32
   d1
   rrrc2^16 : <b32b-32
   a1
  ]
  d32e32
  f+1<
 ]

 @46
 v(MML(v)+10)
 [2
  [3 <e>'g+e' : 'g+e']
  [3 <g+>'g+b' : 'g+b']
  [3 <f+>'af+' : 'af+']
  [3 <f+>'g+>c+<' : 'g+>c+<']
  [3 <f+>'af+' : 'af+']
  [3 <f>'af' : 'af']
 :
  [3 <e>'f+a' : 'f+a']
  [3 <d+>'f+b' : 'f+b']
 ]
 [3 <g+>'g+b' : 'g+b']
 @49
 v(MML(v)-10)
 '<a2.>c2.f+2.'r4
]


//------------------------------------
// Track 4 : 
//------------------------------------
TR(4) CH(4) P(68)
@92 v70
M.onNoteWave(5,50,!1)


[(LOOP)
 o5 l8 q90
  [2
   EP.onTime(30,127,!1) 'b1e1'
   EP.onTime(30,127,!1) 'b1f+1'
   EP.onTime(30,127,!1) 'b1d1'
   EP.onTime(30,127,!1) 'a1e1'
   EP.onTime(30,127,!1) 'a1e1'
   EP.onTime(30,127,!1) 'g1e1'
   EP.onTime(30,127,!1) 'a1f+1'
   EP.onTime(30,127,!1) 'b1d+1'
  ]

 [2
  [2
   EP.onTime(30,127,!1) 'b1e1'
   EP.onTime(30,127,!1) 'b1f+1'
   EP.onTime(30,127,!1) 'b1d1'
   EP.onTime(30,127,!1) 'a1e1'
   EP.onTime(30,127,!1) 'a1e1'
   EP.onTime(30,127,!1) 'g1e1'
   EP.onTime(30,127,!1) 'a1f+1'
   EP.onTime(30,127,!1) 'b1d+1'
  ]
 :
  EP(110)
  [2
   <b4.>f+4.d4
   <a4.>d4.f+4
   c4.e4.g4
   :
   d4.f+4.d4
  ]
  d4.f+4.r4
 ]

 q40
 v(MML(v)-10)
 [2
  r'g+4e4'r'eg+''e4g+4'r
  r'g+4d+4'r'd+g+''d+4g+4'r
  r'f+4d4'r'f+d''f+4d4'r
  r'g+4f4'r'fg+''f4g+4'r
  r'f+4a4'r'af+''a4f+4'r
  r'f4a4'r'af''a4f4'r
 :
  r'a4e4'r'ae''a4e4'r
  r'f+4b4'r'f+b''f+4b4'r
 ]
 r'g+4e4'r'g+e''g+4e4'r
 q90
 'f+2..d+2..'r
 v(MML(v)+10)
]


