TrackName = {"喜びの歌が聞こえる"};
Copyright = {"S.Zayo"};

/*
制作環境：
timidity++
SGM-V2.01.sf2

上記の環境で録音したもの↓
http://www.youtube.com/watch?v=I_UCzkPYIz0
*/



Int Repeat = 2;
// 繰り返し回数を設定できます







//-----------------------------variables---------------------------------

Int In = 2;//イントロからメロディースタートまでの時間
Int Ltime = 57;//１ループの時間
Int Out = Ltime*Repeat+In+1;//フェードアウト開始時間
Int Fade = 8;//フェードアウトにかかる時間
Int Tmp = 90;//テンポ
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---------------------------------

TimeBase(96);System.MeasureShift(1);
Time(0:1:0) Tempo(Tmp);TimeSignature(Sig,4);TrackSync;PrintPlayTime(Ptime);

//----------------------------------strings-----------------------------------

Str MelIn = { r1 l12 [9r] dga };
Str Mel = { [[b2^6r b`c`d]b3ra g4f+6e b2^6r b`c`d `c2^6r `cga : b6rbab d6rc+c+d e2rrf+g6a baba4 r4dga]b6rb`c`d b6rb`c+`d `c+2^6rbag a2r4 dgb
			[ [[`d2^6r`d`e`f+]`d3r`c b4a6g `d2^6r `c`c`d : `e2^6r `e`f+`g `d6r`d6`c b6rb`c+`d `c+2^6r`cag a2r4dgb] EP(90) `c4^6r`d4^6rb4^6r`c+4 EP(127) rga b3r`c a6gf+6g : g2r4ega
			b2^6rbga b-2^6rbag a2^6rab`c b3ra g6rgb`d `d1^2^6r`db`c `d1^2r4dgb]g1r2^4dga};
Str MelOut = {[b2^6r b`c`d]b3ra g4f+6e b2^6r b`c`d `c2^6r `cga b6rbab d6rc+c+d e2rrf+g6a baba4 r4dga};

Str BasIn = { l12 [4"g]rr [4"b]rr [6c][6d] };
Str Bas = { [[12"g][12"b][12"e][12"b][12c][5g]f+[6e][12"a][12d]]
			[ [[12"g][12"b][12"e][12"b]:[12c][5g]f+[6e][12"a][12d]] [6c][6d][6"b][6c+][6"a][6d]:[5"g]"f+[6"e]
			[24c][12"b][6e][6c+][24"a][19d][5r] ][6"g][6"b][6c]drrrrr };
Str BasOut = {[12"g][12"b][12"e][12"b][12c][5g]f+[6e][12"a][12d]};

Str BccIn = { l12 g4^6r f+4"b6d12 [4e12]f+12g12 a4^6r };
Str Bcc = { [55r1] l12 g4^6r f+4"b6d12 [4e12]f+12g12 arrrrrr };
Str BccOut = {};

Str DrmIn = { l12 [ Sub{[4n35]rr}n42rr'n38n39'rr][Sub{[6'n35n38n39']}[n44n42n42]] };
Str Drm = { EP(110) [8 Sub{[12n35]}Sub{[4n44n42n42]}[rrr'n38n39'rr] ][7 Sub{[12'n35n37']}Sub{[4n44n42n42]}[rrr'n38n39'rr] ]Sub{[12'n35n37']}Sub{[n44n42n42][3n46r]}rrr'n38n39'rr['n38n39'r]['n38n39']
			[EP(110) [ [7 Sub{[12n35]}Sub{[4n44n42n42]}[rrr'n38n39'rr] ] : Sub{[12n35]}Sub{[n44n42n42][3n46r]}rrr'n38n39'rr['n38n39'r]['n38n39'] ] : Sub{[6n35]}Sub{[n44n42n42]}rrr'n38n39'rr EP(127) Sub{[6n35]}Sub{[3n46r]}['n38n39'r]['n38n39']
			EP(110) [7 Sub{[12'n35n37']}Sub{[4n44n42n42]}[rrr'n38n39'rr] ] Sub{[7'n35n37']rrrrr}Sub{[n44n42n42]n44rrrrr}rrr'n38n39'rr'n38n39'rrrrr]
			Sub{[19n35]rrrrr}Sub{[6n44n42n42]n44}[3rrr'n38n39'rr]'n38n39'rr[3'n38n39'] };
Str DrmOut = {EP(110) [8 Sub{[12n35]}Sub{[4n44n42n42]}[rrr'n38n39'rr] ]};

Str ExtIn = { };
Str Ext = { [ l12 rrrrrgg^^rrr rrrrrf+f+^^rrr rrff^^rrrf^f rrrrrf+f+^^rrr rrrrrgg^^rrr rrrggf+e^^rrr : rree^^^rrrrr rrrrrf+f+^^rrr]rraa^^^rrrrr rrf+f+^^rrrf+f+f+
			[ [l12 rrrrrgg^^rrr rrrrrf+f+^^rrr rrff^^rrrf^f rrrrrf+f+^^rrr : rrrrrgg^^rrr rrrggf+e^^rrr rraa^^^rrrrr rrf+f+^f+f+^^rrr][r1]rree^^ rrf+f+^^ rrgg^^ rrrrrr :
			l12 [rrrrrgg^^rrr] rrrrrf+f+^^rrr rree^^ rrgg^^ rrrrraa^^rrr rraa^aa^^rrr [3rrf+f+^^] r2 ] };
Str ExtOut = {l12 rrrrrgg^^rrr rrrrrf+f+^^rrr rrff^^rrrf^f rrrrrf+f+^^rrr rrrrrgg^^rrr rrrggf+e^^rrr rree^^^rrrrr rrrrrf+f+^^rrr};

Str Ext2In = {};
Str Ext2 = { q95 [8r1] l12 rrrg^^f+^^rrr rrrf+^^f+^^rrr rrff^^rrrf^f rrrf+^^f+^^rrr rrrrrgg^^rrr rrrg^f+e^^rrr rrra^^rrrrrr rrrf+^^f+^^f+^^ 
			[[rrrg^^f+^^rrr rrrf+^f+f+^^rrr rrff^^rrrf^f rrrf+^^f+^^rrr : rrrrrgg^^rrr rrrg^f+e^^rrr rrra^^rrrrrr rrrf+^^f+^^rrr][4r1]:
			rrrg^^g^^rrr rrrg^gg^^rrr rrrf+^^f+^^rrr rrre^^g^^rrr rrra^^a^^rrr rrra^aa^^rrr q100 g2f+2e2 q95 drrrrr] };
Str Ext2Out = {};

Str Ext3In = {};
Str Ext3 = { [16r1] [[11r1] l12 [9r]ccd e4g6b a6gf+6e d4r"b"bg3rr [10r1]] };
Str Ext3Out = {};

//-----------------------------------Tracks--------------------------------------

/* Track      001,002,003,004,005,006,007,008,009,010,011,012,013,014,015,016 */
Array Vols = (110,070,050,040,070,042,090,072,100,110,120,080,120,080,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(92) M(0) REV(0) CHO(0) P(64) o4 #Scr(Mel)
TR(2)  CH(2)  Voice(92) M(0) REV(0) CHO(0) P(64) o5 #Scr(Mel)
TR(3)  CH(3)  Voice(22) M(10) REV(20) CHO(90) P(80) o5 #Scr(Ext)
TR(4)  CH(4)  Voice(22) M(10) REV(20) CHO(90) P(86) o5 t6 #Scr(Ext)
TR(5)  CH(5)  Voice(49) M(10) REV(80) CHO(90) P(48) o5 #Scr(Ext2)
TR(6)  CH(6)  Voice(49) M(10) REV(80) CHO(90) P(42) o6 t6 #Scr(Ext2)
TR(7)  CH(7)  Voice(103) M(40) REV(80) CHO(127) P(72) q102 o6 #Scr(Ext3) 
TR(8)  CH(8)  Voice(103) M(40) REV(80) CHO(127) P(72) q102 o7 #Scr(Ext3)
TR(9)  CH(9)  Voice(34) M(0) REV(20) CHO(0) P(64) o3 #Scr(Bas)
TR(10) CH(10) REV(40) CHO(0) P(64) #Scr(Drm)
TR(11) CH(11) Voice(94) M(20) REV(80) CHO(40) P(64) o5 q102 #Scr(Bcc)
TR(12) CH(12) Voice(94) M(20) REV(80) CHO(40) P(64) o6 q102 t6 #Scr(Bcc)
TR(13) CH(13) Voice(96) M(20) REV(80) CHO(40) P(64) o5 q102 #Scr(Bcc)
TR(14) CH(14) Voice(96) M(20) REV(80) CHO(40) P(64) o6 q102 t6 #Scr(Bcc)
TR(15) CH(15) Voice(1) M(0) REV(0) CHO(0) P(64) o5
TR(16) CH(16) Voice(1) M(0) REV(0) CHO(0) P(64) o5

//-------------------------------others----------------------------------

Time(Out:1:0) FadeoutAll(Fade,Vols);
