TrackName = {"Rainbow Star!"};
Copyright = {"AMIO"};

/*
	今から何かが始まる……という雰囲気のロック風ループBGM。
	レースゲームか何かのメニュー画面っぽい。
*/



Int Repeat = 2;
// 繰り返し回数を設定できます







//-----------------------------variables---------------------------------

Int In = 1;//イントロからメロディースタートまでの時間
Int Ltime = 24;//１ループの時間
Int Out = Ltime*Repeat+In+1;//フェードアウト開始時間
Int Fade = 8;//フェードアウトにかかる時間
Int Tmp = 192;//テンポ
Int Sig = 4;

Int Ptime = (In+Ltime*Repeat+Fade)*Sig*60/Tmp;

//---------------------------functions---------------------------------

Function Repstr(Str MML,Int Tim,Int Rep,Int Beg=0)//MML繰り返し処理関数
{
	Int I;
	
	For(I=0;I<Rep-Beg;I++){
		Time((I+Beg)*Tim+In+1:1:0) MML;
	}
}

Function PrintPlayTime(Int Tim)
{
	Int Minute = Tim/60;
	Int Second = Tim%60;
	If(Tim<60){ Print({"演奏時間："}+Second+{"秒"}); }
	Else{Print({"演奏時間："}+Minute+{"分"}+Second+{"秒"}); }
}

Function FadeoutVol(Int Mes,Int Prev)// Prev:pre-volume フェードアウト前のメインボリューム
{
	Str I = {!1};
	While(Mes>1){I = I+{^1}; Mes--;}
	Str CMD = {V.onTime(Prev,0,LEN)};
	CMD.s({LEN},I);
	CMD;
}

Function FadeoutAll(Int Mes,Array X)
{
	Int T = Time;
	For(Int J=1;J<=16;J++){
		TR(J); CH(J); Time(T); FadeoutVol(Mes,X(J-1));
	}
}

//------------------------------system setting---------------------------------

SoundType=1;TimeBase(96);System.MeasureShift(1);Include(guitar.h);Include(gs.h);
Time(0:1:0) Tempo(Tmp);TimeSignature(Sig,4);PrintPlayTime(Ptime);
ResetGM; r2 ResetGS; r2 TrackSync;

//----------------------------------strings-----------------------------------

Str TR1In = {};
Str TR1 = {[16r1]
		[6r1]
		l8 v110 ['"f+f+'][3r'"f+f+'] ['"bb'][3r'"bb']};
Str TR1Out = {};

Str TR2In = {};
Str TR2 = {};
Str TR2Out = {};

Str TR3In = {};
Str TR3 = {l8 o5 v110 q100 t_.Random(1); v_.Random(4);
		[15'"be'4^8'"bd'2^8]'"be'4r2^4
		'eg'1,100'f+a'1,100'a-b'1^2,100'f+a'2,100
		'eg'1,100'f+a'1,100
		[4'a`c`e'][r'a`c`e'] [4'b`e-`f+'][r'b`e-`f+']};
Str TR3Out = {l8 o5 [8'"be'4^8'"bd'2^8]};

Str TR4In = {};
Str TR4 = {};
Str TR4Out = {};

Str TR5In = {};
Str TR5 = {};
Str TR5Out = {};

#T = t.N(0,2,4);

Str TR6In = {};
Str TR6 = {l8 o5 t_.Random(1); v_.Random(4);
		[15#T'"bea-'4r#T'"bdf+'2r]#T'"bea-'4r2^4
		#T'ceg'1,100#T'df+a'1,100#T'ea-b'1^2,100#T'df+a'2,100
		#T'ceg'1,100#T'df+a'1,100
		[Gbm7b5(2,8);Gbm7b5(-2,8);]r8Gbm7b5(2,4);Gbm7b5(-2,8);
		[B(2,8);B(-2,8);]r8B(2,4);B(-2,8);};
Str TR6Out = {l8 o5 [8#T'"bea-'4r#T'"bdf+'2r]};

Str TR7In = {};
Str TR7 = { l16 q96 t_.Random(1); v_.Random(4);
		[15r1] r2 o6 v100 d^^e^^f+^
		v105 g^^e^^g^e4c4 v95 "a4^8"a-4^8"a4
		Slur(0)
		v95 "b&c&"b&c&"b&c&"b&c&"b&c&"b&c&"b&c&"b&c&"b4 M(0) v100 r4e4f+4,90
		v105 g^^e^^g^e4c4 "a4^8 v110 e4^8a4
		v115 M(60) '`c``c,,80'2^8,90 M(0) Slur(1) a8&b8&`c8
		v110 babf+e-"be-"a"f+8e-8f+8b8};
Str TR7Out = {};

Str TR8In = {};
Str TR8 = {l8 o3
		q75 [16e4^8:"b2^8]r2^8
		q90 c1d1e1^2d2c1d1
		q80 "f+4^8"f+4^8"f+4"b4^8"b4^8"b4};
Str TR8Out = {q75 [8e4^8"b2^8]};

Str TR9In = {};
Str TR9 = {};
Str TR9Out = {};

Str TR10In = {l8 t_.Random(1); v_.Random(4);
		  Sub{v.N(100,85,0,100,0,100,85,0)n35n35rn35rn35n35r}
		  Sub{v.N(105,95,0,105,0,100,105)n49n49rn49rn49n49r}v.N(100,90,100)n38n38rn38rv.N(100,85,100)[3n38,16,50]r16v100n38};
Str TR10 = {[7Sub{v.N(100,0,0,100,0,100,0,85)n35rrn35rn35rn35}Sub{v.N(100,80)[8n46]}v100[rrn38r]]
		Sub{v.N(100,0,0,100,0,100,0,85)n35rrn35rn35rn35}Sub{v.N(100,80)[6n46]}v100rrn38rrv.N(100,85,100)[3n38,16,50]r16v100n38
		Sub{v100n52}
		Sub{v.N(100,0,0,100,0,100,0,85)n35rrn35rn35rn35}Sub{v.N(100,80)r[7n46]}v100[rrn38r]
		[6Sub{v.N(100,0,0,100,0,100,0,85)n35rrn35rn35rn35}Sub{v.N(100,80)[8n46]}v100[rrn38r]]
		v100'n35n36n38n49'rrr [3't.N(0,0,2)n35n36n38n40'16:r]r16
		t0
		Sub{n49}
		Sub{v100n35rrn35rrn35r}Sub{v100n36rrn36rrn36r}Sub{v100rrrn42rrrr}v100[rr'n38n65']rr
		[3Sub{v100n35rrn35rrn35r}Sub{v100n36rrn36rrn36r}Sub{v100n42rrn42rrrr}v100[rr'n38n65']rr]
		Sub{v100n35rrn35rrn35r}Sub{v100n36rrn36rrn36r}Sub{v70n46rrn46rrrr}v100[rr'n38n65']rr
		Sub{v100n35rrn35rrn35r}Sub{v100n36rrn36rrn36r}Sub{v80n46rrn46rrrr}v100[rr'n38n65']rr
		Sub{v100[4n35][rn35]}Sub{v100[4n36][rn36]}Sub{v100n49rrn49rrrr}v100[4'n38n65'][r'n38n65']
		Sub{v100[4n35][rn35]}Sub{v100[4n36][rn36]}Sub{v110n49rrn49rrrr}v100[4'n38n65']rv.N(100,85,100)[3n38,16,50]r16v100n38};
Str TR10Out = {[7Sub{v.N(100,0,0,100,0,100,0,85)n35rrn35rn35rn35}Sub{v.N(100,80)[8n46]}v100[rrn38r]]
		Sub{v.N(100,0,0,100,0,100,0,85)n35rrn35rn35rn35}Sub{v.N(100,80)[6n46]}v100rrn38rrv.N(100,90,100)[3n38,16,50]r16v100n38};

Str TR11In = {};
Str TR11 = {l8 o6 P.N(32,64,96,112,120,104,72,40) v.N(80,90,100,80,90,100,80,90) [15ea-bdf+b"bf+]};
Str TR11Out = {l8 o6 P.N(32,64,96,112,120,104,72,40) v.N(80,90,100,80,90,100,80,90) [8ea-bdf+b"bf+]};

Str TR12In = {};
Str TR12 = {q100 o4
		EP(127) [3P.T((24,104,!1^1),(104,24,!1^1))'ea-'1^1^1^1]
		P.T((24,104,!1^1),(104,24,!1^1)) 'ea-'1^1^1 P(64) EP.T(127,0,!1)'ea-'1
		EP(127) e1f+1a-1^2f+2e1f+1'a`c`e'1'b`e-`f+'1};
Str TR12Out = {EP(127) P.T((24,104,!1^1^1^1),(104,24,!1^1^1^1))['ea-'1^1^1^1]};

Str TR13In = {};
Str TR13 = {q100 o4
		EP(127) [3e1^1^1^1]e1^1^1 EP.T(127,0,!1)e1
		EP(127) [6r1]e1f+1};
Str TR13Out = {[e1^1^1^1]};

Str TR14In = {};
Str TR14 = {};
Str TR14Out = {};

Str TR15In = {};
Str TR15 = {};
Str TR15Out = {};

Str TR16In = {};
Str TR16 = {};
Str TR16Out = {};

//-----------------------------------Tracks--------------------------------------

/* Track      001,002,003,004,005,006,007,008,009,010,011,012,013,014,015,016 */
Array Vols = (100,100,100,100,100,090,100,100,100,100,090,075,100,100,100,100);//各トラックのメインボリューム
FOR(Int A=1;A<=16;A++){CH(A); V(Vols(A-1));}

#Scr = {Time(1:1:0) #?1In; Repstr(#?1,Ltime,Repeat); Time(Out:1:0) #?1Out;}

TR(1)  CH(1)  Voice(56) M(0) REV(0) CHO(0) P(24) #Scr(TR1)
TR(2)  CH(2)  Voice(56) M(0) REV(0) CHO(0) P(104) #Scr(TR1)
TR(3)  CH(3)  Voice(1) M(0) REV(0) CHO(0) P(88) #Scr(TR3)
TR(4)  CH(4)  Voice(1) M(0) REV(0) CHO(0) P(64) #Scr(TR4)
TR(5)  CH(5)  Voice(1) M(0) REV(0) CHO(0) P(64) #Scr(TR5)
TR(6)  CH(6)  Voice(30) M(0) REV(20) CHO(0) P(52) #Scr(TR6)
TR(7)  CH(7)  Voice(31) M(0) REV(10) CHO(0) P(102) #Scr(TR7)
TR(8)  CH(8)  Voice(34) M(0) REV(0) CHO(0) P(40) #Scr(TR8)
TR(9)  CH(9)  Voice(1) M(0) REV(0) CHO(0) P(64) #Scr(TR9)
TR(10) CH(10) Voice(1) REV(10) CHO(0) P(54) #Scr(TR10)
TR(11) CH(11) Voice(12) M(0) REV(0) CHO(0) P(64) #Scr(TR11)
TR(12) CH(12) Voice(53) M(0) REV(10) CHO(0) P(64) #Scr(TR12)
TR(13) CH(13) Voice(49) M(5) REV(10) CHO(0) P(64) #Scr(TR13)
TR(14) CH(14) Voice(1) M(0) REV(0) CHO(0) P(64) #Scr(TR14)
TR(15) CH(15) Voice(1) M(0) REV(0) CHO(0) P(64) #Scr(TR15)
TR(16) CH(16) Voice(1) M(0) REV(0) CHO(0) P(64) #Scr(TR16)

//-------------------------------others----------------------------------

Time(Out:1:0) FadeoutAll(Fade,Vols);
