//-----------------------------------------------
// Deep in memory
// (C)Yax
//-----------------------------------------------

TrackName     = {"Deep in memory"}
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)
}

//------------------------------------------------
// 全体の調整
//------------------------------------------------
TR(1)  V(115) REV(30) CHO(0)
TR(2)  V(112) REV(30) CHO(0)
TR(3)  V(110) REV(40) CHO(30)
TR(4)  V(110) REV(35) CHO(20)
TR(5)  V(110) REV(60) CHO(10)


//------------------------------------------------
// テンポ
//------------------------------------------------
INT T  = 115
INT T2 = 80
INT T3 = 105
INT T4 = 100
Tempo=(T)


//------------------------------------------------
// キー
//------------------------------------------------
INT KEY=2
Key(KEY)


//------------------------------------------------
// MML
//------------------------------------------------

//------------------------------------
// Track 1 : 
//------------------------------------
TR(1) CH(1) P(55)
@1 v95

 o4 l8 q85

 [2
  y64,1; dgb->d fecd <b->c<g2. y64,0;
  y64,1; cfb->c fecd <b->c<a2. y64,0;
  y64,1; <b->egb- >fecd <b->c<g2.  y64,0;
  y64,1; cfa>c fecd < y64,0; y64,1; d+f+a>d+ f+d+cd< y64,0;
 ]
 r-1 DANDO(T,T2,!2.,!8) r2.. Tempo(30)r Tempo(T3)

 >
 [2
  y64,1; rrr 'g4.d4.'dg 'a4.d4.''g4.'d4 y64,0;
  y64,1; 'c4.<a4.>' 'f4.c4.' 'c<a>'f 'a4.f4.' 'g4.' 'f4' y64,0;
  y64,1; rrr 'g4.d4.'db- '>c4.<a4.' 'b-4.' >c4< y64,0;
  y64,1; 'a4.f4.' 'f4.c4.' 'af'b- '>c4.<a4.' 'b-4.' 'a4' y64,0;

  y64,1; 'g4.e4.'e4.'b-g'>c< 'b-4.g4.''a4.e4.''g4e4'   y64,0; 
  y64,1; 'a4.f4.''>c4<a4' >c<b->c< 'a4f4.' 'g4.e4.' 'f4d4' y64,0;
  y64,1;  'g4.d4.'d efg>d< 'b-4.g4.''a4.f4.' 'b-4g4' y64,0;
  y64,1; '>c2<a2'a>cec y64,0; y63,1; 'd4.<a4.''a^2f+^2' y64,0;

  y64,1; 'b-2g2' b-agf y64,0; y64,1; 'e4c4'c4'b-4e4'g4 y64,0;
  y64,1; 'a4.f4.'c '>c4<a4'b-4 y64,0; y64,1; 'af'fab- '>c<a'b-af y64,0;
  y64,1; 'g4.e4.'c 'b-4g4'g4 y64,0; y64,1; 'b-g'gb->e 'ge'e<b-g y64,0;
  y64,1; 'af'cfa  DANDO(T3,T2,!2^8,!16) 'ae'fa>c< y64,0; r-96 ARP(3,!1^96,{fa>d<})
 :
  Tempo(T4)
  y64,1; '>d4.<b-4.'f b->d< y64,0;
  y64,1; '>c4.<a4.'fa>c< y64,0;
  y64,1; 'b-g'dg b->c<b- y64,0;
  y64,1; 'af'cf a>c<a y64,0;
  y64,1; '>d4.<b-4.'f b->d< y64,0;
  y64,1; '>c4.<a4.'a>fc< y64,0;
  DANDO(T4,T2,!1,!8)
  y64,1; '>ec<'g>c ege< y64,0;
  y64,1; ARP(4,!2.,{a>df<}) y64,0;
  r-4. Tempo(50) r4.
  Tempo(T3)
 ]

  Tempo(T3)
  v(MML(v)-10)
  y64,1; 'd4.f4.b-4.>e4.'d g4f4< y64,0;
  y64,1; 'e2g2b-2>e2' d2< y64,0;
  y64,1; 'f4.a4.>c4.<'f 'e4g4b-4'eg y64,0;
  y64,1; 'd2f2a2'dfa>c< y64,0;
  y64,1; 'f4.g4.b-4.>d4.<' g4f4d y64,0;
  y64,1; 'g4.>c4.e4.<'g '>c4<g4'e4 y64,0;
  y64,1; 'a4.>c+4.e4.<'>c+<a >'g4e4' c+<  y64,0;
  y64,1; 'f2a2>d2<' a2 y64,0;
  y64,1; 'b-4.f4.d4.'d f'b-4f4'f y64,0;
  'a2f2c2' 'g2e2c2'
  DANDO(T3,T4,!2..,!8)
  'f1c1<a1'
  Tempo(T2)
  ARP(4,!1,{fa>ce-})<
  r-4 Tempo(T) r4
  v(MML(v)+10)

 [2
  y64,1; dgb->d fecd <b->c<g2. y64,0;
  y64,1; cfb->c fecd <b->c<a2. y64,0;
  y64,1; <b->egb- >fecd <b->c<g2.  y64,0;
  y64,1; cfa>c fecd < y64,0; y64,1; d+f+a>d+ f+d+cd< y64,0;
 ]
 r-1 DANDO(T,T2,!2.,!8) r2.. Tempo(30)r Tempo(T3)

 v(MML(v)-5)
 Tempo(40) r16 Tempo(T2) ARP(!32,!1^2...,{dgb->e<})




//------------------------------------
// Track 2 : 
//------------------------------------
TR(2) CH(2) P(60)
@1 v90

 o3 l8 q90

 [2
  'g1^1b-1^1'
  'f1^1c1^1'
  'e1^1a+1^1'
  'f1a1' 'f+1c1'
 ]

 [2
  y64,1; gb->da4g<b-4 gb->da4gd4< y64,0;
  y64,1; fa>cf4c<a4 fa>cf4dc4< y64,0;
  y64,1; gb->da4g<b-4 gb->da4gd4< y64,0;
  y64,1; fa>cf4c<a4 fa>cf4dc4< y64,0;

  y64,1; gb->ce4<b->c4< egb->c4<g>e4< y64,0;
  y64,1; fa>cf4c<a4 fa>cf4cf4< y64,0;
  y64,1; gb->da4g<b-4 gb->da4gd4< y64,0;
  y64,1; fa>cf4c<a4 y64,0; y64,1; f+a>df+4dc4< y64,0;

  y64,1; gb->dg4d<b-4 y64,0; y64,1;egb->e4<b-g4 y64,0;
  y64,1; fa>cf4c<a4 y64,0; y64,1; fa>df4d<a4 y64,0;
  y64,1; gb->dg4d<b-4 y64,0; y64,1;egb->e4<b-g4 y64,0;
  y64,1; fa>cd< a>cef< y64,0; y64,1; >d2<a2 y64,0;
 :
  [2
   y64,1; g4. b-4. y64,0;
   y64,1; a4. f4. y64,0;
   :
   y64,1; g4. d4. y64,0;
   y64,1; f4. a4. y64,0;
  ]
  y64,1; g4. e4. y64,0;
  f2.
 ]

 >
 v(MML(v)-20)
 'f1b-1'
 'e1g1'
 'a2f2' 'g2e2'
 'f2d2' 'f2a2'
 'f1b-1'
 'g1>c1<'
 'a1>c+1<'
 y64,1; 'a2d2' <a2 y64,0;
 y64,1; 'g4.b-4.' '>d4.<'g4 y64,0;
 a4.c g4.c
 fcfa>c<afc
 a2.rf
 v(MML(v)+10)

 [2
  'g1^1b-1^1'
  'f1^1c1^1'
  'e1^1a+1^1'
  'f1a1' 'f+1c1'
 ]

 v(MML(v)-15)
 r32<'g1^2....>e1^2....'

 r1


//------------------------------------
// Track 3 : 
//------------------------------------
TR(3) CH(3) P(84)
@53 v50
M.onNoteWave(5,30,!1)

 o5 l8 q95
 [8 r1]

 'g1d1' 'b-1g1'
 'a1f1' 'f1c1'
 'g1e1' 'g1b-1'
 'a1f1' 'f+1d+1'

 [2
  EP.onTime(40,100,!1) 'f1d1'
  EP.onTime(40,100,!1) 'd1<b-1>'
  EP.onTime(40,100,!1) 'e1c1'
  EP.onTime(40,100,!1) 'c1<a1>'
  EP.onTime(40,100,!1) 'd1<b-1>'
  EP.onTime(40,100,!1) 'e1c1'
  EP.onTime(40,100,!1) 'f1d1'
  EP.onTime(40,100,!1) 'c1<a1>'

  EP.onTime(40,100,!1) 'e1c1'
  EP.onTime(40,100,!1) 'g1e1'
  EP.onTime(40,100,!1) 'f1c1'
  EP.onTime(40,100,!1) 'c1<a1>'
  EP.onTime(40,100,!1) 'd1<b-1>'
  EP.onTime(40,100,!1) 'e1c1'
  EP.onTime(40,100,!1) 'f1c1'
  EP.onTime(40,100,!1) 'f+1d1'

  EP.onTime(40,100,!1) 'g1d1'
  EP.onTime(40,100,!1) 'e1c1'
  EP.onTime(40,100,!1) 'f1c1'
  EP.onTime(40,100,!1) 'c1<a1>'
  EP.onTime(40,100,!1) 'e1<b-1>'
  EP.onTime(40,100,!1) 'g1e1'
  EP.onTime(40,100,!1) e1 r-1 c2< g2>
  EP.onTime(60,100,!1) 'd2<a2>'r2
 :
  [8 r2.]
 ]

 q90
 e2.d4
 g1
 f2 e2
 d1
 e2.d4
 g1
 e2 c+2
 d1
 f1
 e2c2
 f1
 EP.onTime(100,30,!1) 'a2.c2.'r4

 q95
 EP(127)
 [2
  'g1d1' 'b-1g1'
  'a1f1' 'f1c1'
  'g1e1' 'g1b-1'
  'a1f1' 'f+1d+1'
 ]



//------------------------------------
// Track 4 : 
//------------------------------------
TR(4) CH(4) P(74)
@45 v85
M.onNoteWave(0,30,!1)

 o6 l8 q99

  g2.d4 b-1
  a2.g4 f1
  e2.c4 g2b-2
  a2.f4 f+1

  g2.d4 b-1    r-1^1 d1 g1
  a2.g4 f1     r-1^1 f1 c1
  e2.c4 g2b-2  r-1^1 c1 e1
  a2.f4 f+1    r-1^1 f1 c1

  [2
   d1 d4.e4.f4
   c2.<b-4 a1
   b-2.>c4 d4.c4.<b-4
   a2.g4 f1

   g2.a4 b-2 g2
   a2.b-4 >c4.<b-4.a4
   b-2.>c4 d2c4<b-4
   a2>c2< b-2 a2

   g4.a4.b-4 >c2<b-2
   a4.b-4.>d4 c2<a2
   b-4.a4.g4 b-2>d2
   c2..<b-16>c16 d2r2
  :
   v(MML(v)-20)
   q40 r'fd''fd' q90 'f4.d4.'
   q40 r'ec''ec' q90 'e4.c4.'
   q40 r'd<b->''d<b->' q90 'd4.<b-4.>'
   q40 r'c<a>''c<a>'  q90　'c4.<a4.>'
   q40 r'fd''fd' q90 'f4.d4.'
   q40 r'ec''ec' q90 'e4.c4.'
   q40 r'ge''ge' q90 'g4.e4.'.
   'f2d2'r4
   v(MML(v)+20)
  ]

  v(MML(v)-12)
  <b-1> r-1 e2d2
  <g1>  r-1 c2<a2>
  <a1>  r-1 c2e2
  <f1>  r-1 d2<a2>

  <b-1> r-1 e2f2
   c1   r-1 g2e2
  <g1>  r-1 c+2e2
  <a1>  r-1 f1

  <b-1> r-1 f1
  <g1>  r-1 g2e2
  <a1>  r-1 f1
  <f2.rr>  r-1 c2.rr
  v(MML(v)+12)

  g2.d4 b-1
  a2.g4 f1
  e2.c4 g2b-2
  a2.f4 f+1

  g2.d4 b-1    r-1^1 d1 g1
  a2.g4 f1     r-1^1 f1 c1
  e2.c4 g2b-2  r-1^1 c1 e1
  a2.f4 f+1    r-1^1 f1 c1

  EP.onTime(115,0,!1^1)
  r16 'd1^1<b-1^1e1^1'


//------------------------------------
// Track 5 : 
//------------------------------------
TR(5) CH(5) P(96)
@73 v68
M.onNoteWave(10,50,!2.)

 o7 l8 q90

 [8 r1]
 [8 r1]

 [2
  [8 r1]
  [8 r1]
  [8 r1]
 :
  rde16f16 agf
  e4c <a4.>
  rdg16a16 b->c<b-
  a4.f4.
  rde16f16 agf
  e4c <a4b-16b16>
  cde16f16 gfe
  d2^8r
 ]
 <
 rrd4e4f4 g4.e2r
 rrc4<a4>e4 d2.rr
 rrd4e4f4 g4.a4.f4
 e2.c+4  f2.rr
 rra2gf g4.ab-4ag
 f1
 r1


