// メタイベント
Copyright = {"かまきりざーど"}
TrackName = {"エンディング from MONSTEEJ"}
MetaText  = {"for Sakura BBS"}

// 基本的な設定
   Tempo = 120;
TimeBase = 480;

// MIDIリセットに必要なブランクタイムを計算する
Int   BlankMs = 50;
Int BlankTick = (BlankMs * TimeBase) / (60000 / Tempo);
Int         L = 3;

// ------------------------------------------------------------
// spark.K's template for Sakura MML (2014/06/16)
// ------------------------------------------------------------

// 便利な関数群
Function MT(From, To, Str S) { For(; From <= To; From++) { TR(From) S } }
Function TRCH(Ch) { TR(Ch) CH(Ch) }
Function DRTR(Tr) { TR(Tr) CH(10) }
Function ET(Str S, Array Trs) { For(Int I = 0; I < SizeOf(Trs); I++) { TR(Trs(I)) S } }

// 初期化
System.MeasureShift(1)
System.TimeSignature(4, 4)
TR(00) Time(0:1:0) ResetGS; MT(01, 16, { ArgOrder(lvqto); Time(0:1:BlankTick) })

// トラック設定
TRCH(01) y0(001) r%1; y32(000) r%1;   @(038) r%1;
          P(064) r%1;   V(100) r%1;  EP(127) r%1;
                      REV(020) r%1; CHO(000) r%1; // bass

TRCH(02) y0(000) r%1; y32(000) r%1;   @(013) r%1;
          P(048) r%1;   V(100) r%1;  EP(127) r%1;
                      REV(030) r%1; CHO(000) r%1; // marimba

TRCH(03) y0(000) r%1; y32(000) r%1;   @(013) r%1;
          P(096) r%1;   V(100) r%1;  EP(127) r%1;
                      REV(030) r%1; CHO(000) r%1; // marimba-delay

TRCH(04) y0(000) r%1; y32(000) r%1;   @(049) r%1;
          P(096) r%1;   V(100) r%1;  EP(127) r%1;
                      REV(040) r%1; CHO(000) r%1; // melo

TRCH(05) y0(000) r%1; y32(000) r%1;   @(011) r%1;
          P(096) r%1;   V(100) r%1;  EP(127) r%1;
                      REV(040) r%1; CHO(000) r%1; // sub-melo

// ここからデータを書く
TR(01) v100 q80 // y111,0
[(L) // L-S
[2
o3 l8 c^^c^^"gc d^^"a^^d"a | c^^"g^^e^ d^^"a^^f^
o3 l8 c^^"g^^ee- d^^"a^^d^ | c^^"g^^c^ d^^"a^^"gf
o3 l8 [4 [4 e-"e- ]:[4 e"e ] ] [2 e"e ] [2 a:"a ] "g
]
] // L-E

TR(02) v100 q99
TR(03) v080 q99 r16

MT(2, 3, {
  // A
	[(L) // L-S
	[2
    l8 o5
  	[2 cegb`cbge dfa`c`e`caf ]
  	[2 ceg>ce<g>ce< : dfa>ce<a>ce< ] dfa>e<df>ec<
  	[4 [2 b-e-`dg ] : [2 be`dg ] ] `dabe ae`c+e //`db`c+e
	]
	] // L-E
})

TR(04) v100 q80
#EPON = { EP.W(110, 63, !1) } #EPOF = { EP(127) }
Str S = {
o6 l8 c^<bg ^"bcd edea ^^ga | `c^bg ^efg fefa ^gab
o6 l8 c^<bg ^"bcd edea ^gab | `cb`cg ^agf e^f^ e^d^
o5 l1 #EPON [4 '"b-e-g' : 'deg' ] l2 'deg' 'c+eg' #EPOF
}
[(L) // L-S
// A
TrackKey = 0; S;
// B
TrackKey = 12; S;
] // L-E

Function ONCE (Flag, Array A) { Str S; Result = on; S = A(Flag == on); S }
Int i = 0;
TR(05) v100 q80
// A & B
[(L) // L-S
ONCE(i < (L - 1), {
  Int Temp = NowTrack;
	Int NowTime = Time;
	MT(1, 5, { Time(NowTime) V.T(MML(y7), 0, !1*8) })
	Track(Temp) Time(NowTime)
})
[2
[7 r1 ] o6 l4 efed
o6 l8 [4 ce-gc ^e-gc :degd ^egd ] e"a"be ^dc+"b
]
i++;] // L-E