TrackName = {"長く長く続く道"};
Copyright = {"AMIO"};

/*
	普通な感じのループBGM。
	一応自作曲なのですが、
	RPGツクール3のBGM「MO」に無意識にインスピレーションを受けているようです。
	ドラムも完全に参考にしちゃってます。
*/



Int Repeat = 2;
// 繰り返し回数を設定できます







//-----------------------------variables---------------------------------

Int In = 1;//イントロからメロディースタートまでの時間
Int Ltime = 56;//１ループの時間
Int Out = Ltime*Repeat+In+1;//フェードアウト開始時間
Int Fade = 8;//フェードアウトにかかる時間
Int Tmp = 196;//テンポ
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-----------------------------------

#v1_0 = {v.N(85,95,95)};
#v1_1 = {v.N(100,0,0,100,95,95)};
#v1_2 = {v.N(100,100,103,105,103,103)};
#v1_3 = {v100};
#v1_4 = {v.N(85,95,95)};
#v1_5 = {v.N(100,0,0,100,95,95)};
#v1_6 = {v.N(100,100,105,108,105,105)};
#v1_7 = {v110};

Str TR1In = {l12 o5 rrrrr #v1_0 "gc^^d^^};
Str TR1 = {[#v1_1 e^r2^4^12 r2-12ec^^d^^]
		#v1_2 e^^^^^e^^f^^  g^^^^^f^^e^^
		#v1_3 d^rrrrrrrrrr r1
		[7r1] rrrrr #v1_4 "gc^^d^^
		[#v1_5 e^r2^4^12 r2-12ec^^d^^]
		#v1_6 e^^^^^e^^f^^  g^^^^^f^^e^^
		#v1_7 a^,90rrrrrrrrrr r1
		[8r1]
		
		[23r1] rrrrr #v1_0 "gc^^d^^};
Str TR1Out = {[#v1_1 e^r2^4^12 r2-12ec^^d^^]
		#v1_2 e^^^^^e^^f^^  g^^^^^f^^e^^
		#v1_3 d^rrrrrrrrrr r1
		[7r1] rrrrr #v1_4 "gc^^d^^};

Str TR2In = {};
Str TR2 = {};
Str TR2Out = {};

#v3_1 = {v.N(105,100,105,100)};
#v3_2 = {v.N(85,0,0,95,0,100,0)};
#v3_3 = {v.N(100,0,105,0,110,0,100,100,95,100)};
#v3_4 = {v.N(75,85,100,0,103,0,107,0,110,0)};
#v3_5 = {v.N(105,110,100,90)};
#v3_6 = {v.N(0,80,85,90)};
#v3_7 = {v.N(90,0,0,100,95,95)};
#v3_8 = {v.N(100,0,100,0,95,0,100,0,80)};
#v3_9 = {v100};
#v3_10 = {v.N(100,0,100,0,95,0,95,0,85)};
#v3_11 = {v100};
#v3_12 = {v105};

Str TR3In = {y71(80) y74(80) l12 o5};
Str TR3 = {[7r1]r2 #v3_1 e^dc^d
		#v3_2 "g4r2^4 r2"g^r"b^r
		#v3_3 c^rd^re^r"a^^ ^^^"a4"g4"a4
		#v3_4 "f+^^^^^"a^^^^^ c^rd^re^rf^r
		#v3_5 e^^^^^^^^f^e    d1
		[15r1] #v3_6 r2-12"c"g^^"a^^
		
		#v3_7 "b-4r2^4 r2-12"b-"a4"g4
		#v3_8 "b-4r4"a4r4 "g4r4"a^r"c1^4
		[11r1]
		#v3_9 c^^^^^^^^"ar"b  c^^^^^^^^"ar"b
		#v3_10 c^r"b^r"a^r"g^r "e^^^^^^^^^^^
		#v3_11 c^^^^^^^^"ar"b  c^^^^^^^^"ar"b
		#v3_12 e-^^^re-^^rd4   r1};
Str TR3Out = {[7r1] #v3_1 r2e^dc^d
		#v3_2 "g4r2^4 r2"g^r"b^r
		#v3_3 c^rd^re^r"a^^ ^^^"a4"g4"a4
		#v3_4 "f+^^^^^"a^^^^^ c^^d^^e^^f^^
		#v3_5 e^^^^^^^^f^e    d1};

Str TR4In = {y71(80) y74(80) l12};
Str TR4 = {	o5
		[7r1]r2e^dc^d
		"g4r2^4 r2"g^r"b^r
		c^rd^re^r"a^^ ^^^"a4"g4"a4
		"f+^^^^^"a^^^^^ c^^d^^e^^f^^
		e^^^^^^^^f^e    d^^^^^^^^^^^
		[15r1] rrrrr"c"g^^"a^^
		
		"b-4r2^4 rrrrr"b-"a4"g4
		"b-4r4"a4r4 "g4r4"a^r"c^^
		^^^^^^^^^^^^
		[11r1]
		c^^^^^^^^"ar"b  c^^^^^^^^"ar"b
		c^r"b^r"a^r"g^r "e^^^^^^^^^^^
		c^^^^^^^^"ar"b  c^^^^^^^^"ar"b
		e-^^^re-^^rd4   r1};
Str TR4Out = {[7r1]r2e^dc^d
		"g4r2^4 r2"g^r"b^r
		c^rd^re^r"a^^ ^^^"a4"g4"a4
		"f+^^^^^"a^^^^^ c^^d^^e^^f^^
		e^^^^^^^^f^e    d^^^^^^^^^^^};

Str TR5In = {};
Str TR5 = {};
Str TR5Out = {};

Str TR6In = {l12};
Str TR6 = {	o7
		[16r1]
		[7r1] r2"a^r"b^r
		c^^^^^^^^,85c^^  "b^^^^^"a^^^^^
		"g^^^^c^^^"f^^ "e^^^^"f^^^"g^^
		"a^^^^"a^^^c^^ d^^c^^"b^^c^^
		c^^^^^^^^^^^,95   r1
		
		o6
		[16r1]
		c^^^^^^^^"ar"b  c^^^^^^^^"ar"b
		c^r"b^r"a^r"g^r "e^^^^^^^^^^^
		c^^^^^^^^"ar"b  c^^^^^^^^"ar"b
		e-^^^re-^^rd4   r1};
Str TR6Out = {};

Str TR7In = {l12};
Str TR7 = {	o8 VAR(16)
		[16r1]
		[7r1] r2"a^r"b^r
		c^^^^^^^^,85c^^  "b^^^^^"a^^^^^
		"g^^^^c^^^"f^^ "e^^^^"f^^^"g^^
		"a^^^^"a^^^c^^ d^^c^^"b^^c^^
		c^^^^^^^^^^^,95   r1};
Str TR7Out = {};

Str TR8In = {l12 o3};
Str TR8 = {	[[3c^rc^rc^^^^c^rc^rcc^^^^^]:d^rd^rd^^^^d^rd^rdd^^^^^
		"g^r"g^r"g^^^^"g^r"g^r"g"g^^^^^ c^rc^rc^^^^"a^r"a^r"a"a^^^^^
		d^rd^rd^^^^d^rd^rdd^^^^^ "g^r"g^r"g^^^^"g^r"g^r"g"g^^^^^]
		"f^r"f^r"f^^^^"f^r"f^r"f"f^^^^^
		"f^r"f^r"f^^^^"f+^r"f+^r"f+"f+^^^^^ "g^r"g^r"g^^^^"a^r"a^r"a"a^^^^^
		d^rd^rd^^^^"g^r"g^r"g"g^^^^^ c^rc^rc^^^^c^rc^rcc^^^^^
		
		g^rg^rg^^^^g^rg^rgg^^^^^ c^rc^rc^^^^c^rc^rcc^^^^^
		[4"f^r"f^r"f^^^^"f^r"f^r"f"f^^^^^]
		"e^r"e^r"e^^^^"e^r"e^r"e"e^^^^^ "e-^r"e-^r"e-^^^^"e-^r"e-^r"e-"e-^^^^^
		[f^rf^rf^^^^e^re^ree^^^^^ :d^rd^r"g^^^^c^rc^rcc^^^^^]
		[a-4r8]g4 r1};
Str TR8Out = {[3c^rc^rc^^^^c^rc^rcc^^^^^] d^rd^rd^^^^d^rd^rdd^^^^^
		"g^r"g^r"g^^^^"g^r"g^r"g"g^^^^^ c^rc^rc^^^^"a^r"a^r"a"a^^^^^
		d^rd^rd^^^^d^rd^rdd^^^^^ "g^r"g^r"g^^^^"g^r"g^r"g"g^^^^^};

Str TR9In = {};
Str TR9 = {};
Str TR9Out = {};

#vCH = {v.N(100,0,0,80,0,0,100,0,0,80,0,100,0,0,100,0,0,75,85,0,0,80,0,0)};
#vKICK = {v.N(100,0,0,0,0,0,100,0,0,0,0,110,0,0,110,0,0,0,100,0,0,0,0,0)};

Str TR10In = {l12};
Str TR10 = {[[4Sub{#vCH[4n42r:r]n42rrn42rrn42[n42rr]}Sub{v100[4rrrn40rr]}#vKICK[n35rrrr:r]n35rrn35rrrn35rrrrr]
		 [4Sub{v90[4rrrn69rr]}Sub{#vCH[4n42r:r]n42rrn42rrn42[n42rr]}Sub{v100[4rrrn40rr]}#vKICK[n35rrrr:r]n35rrn35rrrn35rrrrr]]
		[Sub{#vCH[4n42r:r]n42rrn42rrn42[n42rr]}Sub{v100[4rrrn40rr]}#vKICK[n35rrrr:r]n35rrn35rrrn35rrrrr]
		[9Sub{v90[4rrrn69rr]}Sub{#vCH[4n42r:r]n42rrn42rrn42[n42rr]}Sub{v100[4rrrn40rr]}#vKICK[n35rrrr:r]n35rrn35rrrn35rrrrr]
		v100[3'n35n38n49'4:r8]r1-12n40};
Str TR10Out = {[8Sub{#vCH[4n42r:r]n42rrn42rrn42[n42rr]}Sub{v100[4rrrn40rr]}#vKICK[n35rrrr:r]n35rrn35rrrn35rrrrr]};

Str TR11In = {l1^1 o4 q100};
Str TR11 = {[`cbb-f:g`c1a1dg]f1f+1g1a1d1g1`c
		gcffffee- f1e1d1c1f1e1
		[`c4r8]b4r1};
Str TR11Out = {`cbb-fg`c1a1dg};

#CRE = {EP.T(64,127,!1^1)};

Str TR12In = {l1 o5 q100};
Str TR12 = {[16r1]
		[8r1]
		#CRE ff+gadgc1^1
		[4r1]
		EP.T(32,127,!1^1^1^1) f1^1^1^1^1^1^1^1 #CRE e1^1 #CRE e-1^1
		fedc
		fe r1r1};
Str TR12Out = {};

Str TR13In = {l4 o6};
Str TR13 = {[16r1]
		[16r1]
		
		[6r1]Sub{v60t0f2e2d2fa1^1^4}v100t4`c2b2a2`c`e1^1^4
		Sub{v60t0g2f2e2fg2d1^1-4}v100t4`d2`c2b2`c`d2g1^1-4
		Sub{v60t0c+2e2g2e2}v100t4g2a2b2`d2
		[8r1]};
Str TR13Out = {};

Str TR14In = {};
Str TR14 = {};
Str TR14Out = {};

#T = {t.N(0,2,4)};
#T2 = {t.N(0,1,2)};

Str TR15In = {l4 o5};
Str TR15 = {[[4r#T'"gce'][4r#T'"g"be'][4r#T'"g"b-e']:[4r#T'dfa']
		 [4r#T'"g"bf'][r#T'ceg'][r#T'"ace'][4r#T'df+a'][4r#T'"g"bf']]
		[4r#T'"acf']
		[r#T'"acf'][r#T'"acf+'][r#T'"bdg'][r#T'cea'][r#T'dfa'][r#T'"g"bd'][4r#T'"gce']
		
		[4r#T'"b-dg'][4r#T'"c"e"b-'][8r#T'"acf'][8r#T'"ace'][4r#T'"e"gd'][4r#T'"e-"gc+']
		[r#T'"acf'][r#T'"g"be'][r#T'"f"ad'][r#T'"e"gc']
		[r#T'"acf'][r#T'"g"be'][#T2'ce-a-'r8]#T2'"bdg' r1};
Str TR15Out = {[4r#T'"gce'][4r#T'"g"be'][4r#T'"g"b-e'][4r#T'dfa']
		[4r#T'"g"bf'][r#T'ceg'][r#T'"ace'][4r#T'df+a'][4r#T'"g"bf']};

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,000,110,100,000,080,070,100,000,100,090,090,100,000,060,000);//各トラックのメインボリューム
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(21) M(0) REV(20) CHO(0) P(64) #Scr(TR1)
TR(2)  CH(2)  Voice(1) M(0) REV(0) CHO(0) P(64) #Scr(TR2)
TR(3)  CH(3)  Voice(25) M(0) REV(40) CHO(0) P(78) #Scr(TR3)
TR(4)  CH(4)  Voice(18) M(0) REV(0) CHO(0) P(78) #Scr(TR4)
TR(5)  CH(5)  Voice(1) M(0) REV(0) CHO(0) P(64) #Scr(TR5)
TR(6)  CH(6)  Voice(49) M(15) REV(10) CHO(10) P(84) #Scr(TR6)
TR(7)  CH(7)  Voice(50) M(15) REV(10) CHO(10) P(84) #Scr(TR7)
TR(8)  CH(8)  Voice(34) M(0) REV(0) CHO(0) P(32) #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(56) #Scr(TR10)
TR(11) CH(11) Voice(53) M(0) REV(40) CHO(0) P(64) #Scr(TR11)
TR(12) CH(12) Voice(49) M(5) REV(40) CHO(40) P(64) #Scr(TR12)
TR(13) CH(13) Voice(9) M(0) REV(0) CHO(0) P(104) #Scr(TR13)
TR(14) CH(14) Voice(1) M(0) REV(0) CHO(0) P(64) #Scr(TR14)
TR(15) CH(15) Voice(26) M(0) REV(0) CHO(0) P(96) #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);
