// 革命
// Etuden Op.10-5
/////////////////////////////////////////////////////////////////////////////////////////
// 各種設定らしきもの
Int MSGS=0
Int TWM2=0
Int TIMIDITY=0
Int BRIGHT=0
Int LOOP=2
Int LONGPEDAL=1

Int KEY=0
Int TEMPORATIO=120
Int TEMPODIFF=0
// Base Tempo=120 （楽譜は160）
Int IGNORETEMPO=0
Int TINY=0
Int GAKUHU=0
//Int DEBUG=1
//Mute(1,2,3)
// ↑上2行のコメント外すと、メトロノームだけが鳴るなの。どうやって使うかは秘密なの。ぐすぐす；；
////////////////////////////////////////////////////////////////////////////////////////////////

拍子 4,4
Tempo 160

曲名{"革命 Etuden Op.10-12"}

作者{"Fryderyk Franciszek Chopin MML by ななこっち★"}

IF(MSGS=1 || TWM2=1) {
	ResetGS
}
#METORONOMEMML={M4m4m4m4}

IF(TINY=1 || GAKUHU=1 || TWM2=1) {
	Expression.Frequency(2);
	Modulation.Frequency(8);
	System.TimeBase=96
} ELSE {
	Expression.Frequency(1);
	Modulation.Frequency(1);
	System.TimeBase=3072
}

#PEDALON={Sub {r64y64,127}}
#PEDALOFF={r-36 y64,0 r36}

///////////////////////////////////////////////////////////////////////////////
// title:        "rchord.h" ver 1.01
// description:  和音を下からランダムなタイミングで演奏するインクルードファイル(2015/05/24)
// keywords:     SAKURA Function     by ななこっち★ @nanakochi123456
// HP:           http://nano.daiba.cx/
///////////////////////////////////////////////////////////////////////////////
// rchord.h 和音をランダムなタイミングで演奏する
///////////////////////////////////////////////////////////////////////////////
// Function RCDINIT(min, value)
// 乱数値の最小値、最大値を設定する。両方0にすると、同一タイミングで演奏します。
//
// Function RCD(mml)
// ランダムに演奏したい和音のMMLを入力する
///////////////////////////////////////////////////////////////////////////////
// Example
// Include(rchord.h)
// RCDINIT(53,513)
// l4 RCD(ceg)
// l8 RCD(<b>fg)
// l8 RCD(ceg)
///////////////////////////////////////////////////////////////////////////////
// テストする場合、コメントアウトを消して下さい。
//Int TEST=1
///////////////////////////////////////////////////////////////////////////////

Int RCD_MIN=192
Int RCD_MAX=768

Function RCDINIT(Int MIN, Int MAX) {
	RCD_MIN=MIN
	RCD_MAX=MAX
}

Function RCD(Str MML) {
	Str BUF=""
	Str FIRST=""
	Str ML=""
	Str M
	Str R
	Str FM
	Int C=0

	BUF=""
	R=""
	For(Int i=1; MID(MML, i, 1)!=""; i++) {
		M=MID(MML, i, 1)
		IF(DEBUG=1||TEST=1) {
			Print("Count "+ C + " Str="+M)
		}
		IF(M="a"||M="b"||M="c"||M="d"||M="e"||M="f"||M="g") {
		C++
	  	IF(C<2) {
			FIRST=ML
			ML=FM+M
			FM=""
		} ELSE {
				BUF=BUF+"Sub" + CHR(123)+R+ML+CHR(125)
				IF(RCD_MAX>0) {
					R=R+"r"+Random(RCD_MIN, RCD_MAX)
				}
				ML=M
		}
		} ELSE {
		IF(C>0) {
				ML=ML+M
		} ELSE {
			FM=FM+M
		}
		}
	}
	BUF=BUF+"Sub"+CHR(123)+R+ML+CHR(125)+FIRST+"r"
	IF(DEBUG=1 || TEST=1) {
		Print(BUF)
	}
	BUF
}

IF(TEST=1) {
	TR(1)
		Tempo 50
		l4
		RCDINIT(32,40)
		l4 RCD(ceg)
		l8 RCD(<b>fg)
		l8 RCD(ceg)

		RCDINIT(96,425)
		l4 RCD(ceg)
		l8 RCD(<b>fg)
		l8 RCD(ceg)

		RCDINIT(193,765)
		l4 RCD(ceg)
		l8 RCD(<b>fg)
		l8 RCD(ceg)

		RCDINIT(0,0)
		l4 RCD(ceg)
		l8 RCD(<b>fg)
		l8 RCD(ceg)
}

///////////////////////////////////////////////////////////////////////////////
// title:        "rmelody.h" ver 0.25
// description:  単音をランダムな音量とタイミングで演奏するインクルードファイル(2015/05/25)
// keywords:     SAKURA Function     by ななこっち★ @nanakochi123456
// HP:           http://nano.daiba.cx/
///////////////////////////////////////////////////////////////////////////////
// rmelody.h メロディー等をランダムなタイミングで演奏する
///////////////////////////////////////////////////////////////////////////////
// Function RMDINIT(rmin, rmax, vmin, vmax)
// 休符乱数値の最小値、最大値、最小、最大音量設定する。両方0にすると、同一タイミングで演奏します。
// 
// Function RMDR(rmin, rmax)
// 休符乱数値の最小値、最大値の設定のみする
//
// Function RNDV(rmin, rmax)
// 音量乱数値の最小値、最大値の設定のみする。
// 同一の値を設定を両方に行うと、固定音量となる。
// rmaxを省略すると、rmin、rmax共に加算、または減算を行なう
//
// rmin, rmaxは与える休符値、vmin, vmaxは与える音量値
// Function RMD(mml)
// ランダムに演奏したいメロディーのMMLを入力する
///////////////////////////////////////////////////////////////////////////////
// Example
// Include(rchord.h)
// RMDINIT(53,513,90,110)
// l4 RMD(ceg)
// RMDV(5)
// l8 RMD(<b>fg)
// RMDV(-5)
// l8 RMD(ceg)
///////////////////////////////////////////////////////////////////////////////
// テストする場合、コメントアウトを消してください。
//Int TEST=1
///////////////////////////////////////////////////////////////////////////////

Int RMD_RMIN=192
Int RMD_RMAX=768
Int RMD_VMIN=95
Int RMD_VMAX=100
Int RMD_CRESC=0

Function RMDINIT(Int RMIN, Int RMAX, Int VMIN, Int VMAX) {
	RMD_RMIN=RMIN
	RMD_RMAX=RMAX
	RMD_VMIN=VMIN
	RMD_VMAX=VMAX
	RMD_CRESC=0
}

Function RMDCresc(Str STEP) {
	RMD_CRESC=STEP
}

Function RMDR(Int RMIN, Int RMAX) {
	RMD_RMIN=RMIN
	RMD_RMAX=RMAX
}

Function RMDV(Int VMIN, Int VMAX) {
	IF(VMAX=0) {
		Int TMPMIN=RMD_VMIN
		Int TMPMAX=RMD_VMAX
		TMPMIN=TMPMIN+VMIN
		TMPMAX=TMPMAX+VMIN
		IF(TMPMIN < 0) {
			TMPMIN=0
		}
		IF(TMPMIN > 127) {
			TMPMAX=127
		}
		IF(TMPMAX < 0) {
			TMPMAX=0
		}
		IF(TMPMAX > 127) {
			TMPMAX=127
		}
		RMD_VMIN=TMPMIN
		RMD_VMAX=TMPMAX
	} ELSE {
		RMD_VMIN=VMIN
		RMD_VMAX=VMAX
	}
}

Function RMD(Str MML) {
	Str BUF=""
	Str FIRST=""
	Str ML=""
	Str M
	Str R
	Str VL
	Str RRMML
	Str RMML
	Str FM=""
	Int C=0
	Str LenStr
	Int TOKEN=0
	Int TO=0
	BUF=""
	R=""
	For(Int i=1; MID(MML, i, 1)!=""; i++) {
		M=MID(MML, i, 1)
//		Print("Start Str="+M)
		IF((ASC(M)>=48 && ASC(M)<=57) || M="r"||M="."||M="^") {
			IF(TO>=1) {
				LenStr=LenStr+M
//Print("LenADD:"+LenStr)
			}
			ML=ML+M
		} ELSE {
			IF((ASC(M)>=97 && ASC(M)<=103)) {
//Print("Note:"+M)
				TOKEN++
				TO=1
				FM=RRMML+VL+ML+RMML
				IF(TOKEN>1) {
					C++
					IF(FM!="") {
						BUF=BUF+"Sub{"+FM+"}r"+LenStr
					}
//					TO=0
					TOKEN=0
				} ELSE {
					BUF=BUF+ML
				}
				LenStr=""
				ML=M
				IF(RMD_RMAX>0) {
					R=Random(RMD_RMIN, RMD_RMAX)
					IF(Random(0,10)<5) {
						RRMML="r-"+R
						RMML="r"+R
					} ELSE {
						RRMML="r"+R
						RMML="r-"+R
					}
				}
				VL="v"+Random(RMD_VMIN, RMD_VMAX)
				RMDV(RMD_CRESC,0)
			} ELSE {
//Print("Other:"+M)
				ML=ML+M
				IF(TO=1) {
					TO=2
				}
				IF((ASC(M)>=97 && ASC(M)<=103) || M="r" || (ASC(M)>=48 && ASC(M)<=57) || M="." ||M="^"|| M="-"||M="#") {
				} ELSE {
					TO=0
				}
			}
		}
		IF(DEBUG=1||TEST=1) {
			Print("Token "+ TOKEN + " Count "+ C + " Str="+M+" ML="+ML+" Len="+LenStr+" TO="+TO+" BUF="+BUF)
		}
	}
	FM=RRMML+VL+ML+RMML
	IF(FM!="") {
		BUF=BUF+"Sub{"+FM+"}r"+LenStr
	}

	IF(DEBUG=1 || TEST=1) {
		Print(BUF)
	}
	BUF
}

IF(TEST=1) {
	#basemml={
		l8
		[4 RMD(cdefgfed)  RMDV(-5)]
		RMDV(15)
		RMD(c4g4f4d4)
	}
	TR(1)
		Tempo 120
		o6

		// 下手過ぎあひゃひゃ
		RMDINIT(32,40,70,110)
		#basemml

		// まぁまぁ
		RMDINIT(96,425,70,110)
		#basemml

		// 上手
		RMDINIT(193,765,100,110)
		#basemml

		// DTM
		RMDINIT(0,0,110,110)
		#basemml

	TR(2)
		Tempo 120
		o4

		// 下手過ぎあひゃひゃ
		RMDINIT(32,40,70,110)
		#basemml

		// まぁまぁ
		RMDINIT(96,425,70,110)
		#basemml

		// 上手
		RMDINIT(193,765,100,110)
		#basemml

		// DTM
		RMDINIT(0,0,110,110)
		#basemml

	TR(10)
		$M{n(MetronomeBell),}
		$m{n(MetronomeClick),}
		[40
			Rythm{M4m4m4m4}
		]

}

///////////////////////////////////////////////////////////////////////////////
// title:        "tempo.h" ver 1.1
// description:  TempoChange非互換高機能テンポチェンジ機能インクルードファイル(2015/05/28)
// keywords:     SAKURA Function     by ななこっち★ @nanakochi123456
// HP:           http://nano.daiba.cx/
///////////////////////////////////////////////////////////////////////////////
// tempo.h デバッグ機能付きテンポチェンジ
// （サクラに TempoChange がありますが、その高機能版です）
//
// Include前に、以下の変数を定義して下さい。
//
// ・Int DEBUG=0 // 1 でメトロノームがなります、2 でテンポチェンジ時にうるさい雑音が鳴ります
// 　（メトロノームは10000小節で終了します、4/4 を前提に作成されています。）
//
// ・Int TEMPORATIO
// 　ベーステンポの割合を％で設定します。（100がデフォルト。）
//
// ・Int TEMPODIFF
// 　ベーステンポを設定して、外部よりテンポを制御したい場合、TEMPODIFF に 整数値 (-〜+)を設定します。
//
// ・Int IGNORETEMPO
// 　IGNORETEMPO=1 にすると、テンポチェンジを無効にします。
//
// #METORONOMEMML
// 　メトロノームのリズムMMLを設定できます。3拍子にする時等使用します。
// 　(M=表拍、m=裏拍)
//
//  ※テンポチェンジは、専用のトラックを作成することをお勧めします。
///////////////////////////////////////////////////////////////////////////////
// Function TmpChange(tempo, len)
// テンポをチェンジします。
// 前のテンポは自動的に読み込まれます
// 即時チェンジする場合には、lenを 0 にします。
// それ以外は、!2 !4. 等を指定します。
//
// Function TmpChangeR(tempo, len)
// テンポをチェンジして、len分の休符を置きます。
///////////////////////////////////////////////////////////////////////////////
// テストするときは、以下のコメントを全て外してください。
//Int TEST=1
//Int DEBUG
//Int TEMPORATIO=100
//Int IGNORETEMPO=0
//Int TEMPODIFF=0
///////////////////////////////////////////////////////////////////////////////

//#METORONOMEMML={M4m4m4}

IF(#METORONOMEMML="") {
	#METORONOMEMML={M4m4m4m4}
}

IF(TEST=1) {
	DEBUG=2
	Tempo 200
}

IF(DEBUG>=1) {
	IF(DEBUG=2) {
		#DEBUGMML1={Sub{@1v90V(127)'v90o5do6fo7a#o8d'}}
		#DEBUGMML2={Sub{@1v90V(127)'v90o5co6eo7g#o8c'}}
		#DEBUGMML3={Sub{@1v127V(127)'v127o4cdefgabo6cdefgab'}}
	}
	TR(10)
		$M{n(MetronomeBell),}
		$m{n(MetronomeClick),}
		[10000
			Rythm{#METORONOMEMML}
		]
}
Function TmpChangeR(tempo, len) {
	TmpChange(tempo, len)
	r%(len)
}

Function TmpChange(tempo, len) {
	IF(len=0) {
		IF(DEBUG=2) {
			#DEBUGMML1
		}
	} ELSE {
		IF(DEBUG=2) {
			#DEBUGMML2
		}
	}

	IF(len=0) {
		IF(!(IGNORETEMPO<>1)) {
			IF(TEMPORATIO=0) {
				Tempo=tempo+TEMPODIFF
			} ELSE {
				Tempo=(tempo*TEMPORATIO)/100+TEMPODIFF
			}
		}
	} ELSE {
		IF(!(IGNORETEMPO<>1)) {
			Int TT1=Tempo
			Int TT2
			IF(TEMPORATIO=0) {
				TT2=tempo+TEMPODIFF
			} ELSE {
				TT2=(tempo*TEMPORATIO)/100+TEMPODIFF
			}
			Int TTDIFF=(TT2 - TT1)
			Int TTSTEP=TTDIFF
			IF(TTSTEP < 0) {
				TTSTEP=-TTDIFF
			}
			Int TTR=len / TTSTEP
			For(Int I=1; I < TTSTEP; I++) {
				Sub {
					r%(I*TTR)
					IF(TTDIFF < 0) {
						TT1 = TT1 - 1;
					} ELSE {
						TT1 = TT1 + 1;
					}
					Tempo = TT1;
				}
			}
			Sub{
				r%(len)
				IF(TEMPORATIO=0) {
					Tempo=tempo+TEMPODIFF
				} ELSE {
					Tempo=tempo*TEMPORATIO/100+TEMPODIFF
				}
			}
		}
	}
}

IF(TEST=1) {
	TR(1)
		TmpChange(100,0)
		o5l8cdefgfed
		TmpChange(120,!2)
		o5l8cdefgfed
		TmpChange(160,!2)
		o5l8cdefgfed
		TmpChange(80,!2)
		o5l8cdefgfed
		TmpChange(50,!2)
		o5l8cdefgfed
		TmpChange(160,!4)
		o5l8cdefgfed
		TmpChange(50,!2)
		o5l8cdefgfedc1
}

///////////////////////////////////////////////////////////////////////////////
// title:        "loop.h" ver 1.0
// description:  Loopインクルードファイル(2015/06/02)
// keywords:     SAKURA Function     by ななこっち★ @nanakochi123456
// HP:           http://nano.daiba.cx/
///////////////////////////////////////////////////////////////////////////////
// loop.h 可変回数のループ
///////////////////////////////////////////////////////////////////////////////
// Function LoopPlay
// LoopPlay(mml string value[, loop count offset]) max 5 parms.
//
// Example
// Int LOOP=4
// Include(loop.h)
// #mml={
//    cde
// }
// LoopPlay(#mml)
// LoopPlay(#mml,0)
///////////////////////////////////////////////////////////////////////////////
// テストする時は、以下のコメントを外してください。
//Int TEST=1
//Int LOOP=5
///////////////////////////////////////////////////////////////////////////////

Function LoopPlay(Str Mml, Int count) {
	Str _MML
	For (Int i = 1; i <= LOOP + count; i++) {
		_MML=_MML + Mml
	}
	_MML
}

IF(TEST=1) {
	曲名{"かえるの歌(test)"}
	作者{"ドイツ民謡"}
	#mmla={
		l4
		cdef
		edc4.r8
	}
	#mmlb={
		l4
		efga
		gfe4.r8
	}

	#mmlc={
		crcr
		crcr
		l8ccddeeff
		l4
		edc2
	}
	
	TR(1)
		o5
		@(Clarinet)
		q95
		#mmla
		LoopPlay(#mmlb,3)
		#mmlc

	TR(2)
		o6
		@(Violin)
		q95
		[2 r1]
		#mmla
		LoopPlay(#mmlb,2)
		#mmlc

	TR(3)
		o4
		q95
		@(FrenchHorn)
		[4 r1]
		#mmla
		LoopPlay(#mmlb,1)
		#mmlc

	TR(4)
		o3
		q95
		@(Contrabass)
		[6 r1]
		#mmla
		LoopPlay(#mmlb,0)
		#mmlc

	TR(5)
		o3
		q95
		@(Timpani)
		[8 r1]
		#mmla
		LoopPlay(#mmlb,-1)
		#mmlc

}

#LN={RMDCresc(0)}
#LFF={v127 RMDV(120,127) #LN}
#LF={v120 RMDV(95,110) #LN}
#LMF={v105 RMDV(85,95) #LN}
#LMP={v95 RMDV(75,85) #LN}
#LP={v80 RMDV(65,75) #LN}
#LPP={v70 RMDV(50,60) #LN}
#L5={RMDV(-20)}
#LC={RMDCresc(1)}
#LC2={RMDCresc(2)}
#LD={RMDCresc(-1)}
#LD2={RMDCresc(-2)}

IF(GAKUHU=1) {
	RCDINIT(0,0)
} ELSE {
	RCDINIT(370,856)
}

Key(KEY)
Int QTemp
Function QSet(value) {
	QTemp=value
}

Function Q(value) {
	Str MML="q"
	IF(GAKUHU=1) {
		MML=MML+"100"
	} ELSE {
		MML=MML+(value * QTemp / 100)
	}
	MML
}

#V_PIANO={
	#REV
	V(100)
	M(0)
	IF(BRIGHT=1) {
		@(BrightPiano)
	} ELSE {
		@(GrandPiano)
	}
	QSet(100)
}

// Tempo
TR(16)
	// intro
	#introtempo={
		[
			TmpChangeR(80,0)
			r8
			TmpChangeR(100,0)
			TmpChangeR(130,!4.)
			TmpChangeR(150,!2)
			TmpChangeR(130,!2)
			TmpChangeR(90,!2)
		]
		TmpChangeR(65,0)
		r8
		TmpChangeR(80,0)
		TmpChangeR(120,!4.)
		TmpChangeR(130,!2)
		TmpChangeR(120,!1)
		TmpChangeR(125,!1)
		TmpChangeR(85,!0)
		TmpChangeR(120,!2)
		TmpChangeR(95,!2)
	}
	#m1tempo={
		TmpChangeR(130,!2)
		TmpChangeR(125,!2)
		TmpChangeR(130,!2)
		TmpChangeR(125,!4)
		TmpChangeR(90,0)
		TmpChangeR(125,!4)
		//
		[3
			TmpChangeR(130,!2)
			TmpChangeR(125,!4)
			TmpChangeR(90,0)
			TmpChangeR(125,!4)
		]
		TmpChangeR(130,!2)
		TmpChangeR(125,!2)
		[
			TmpChangeR(130,!2)
			TmpChangeR(125,!4)
			TmpChangeR(90,0)
			TmpChangeR(125,!4)
		]
		TmpChangeR(130,!2)
		TmpChangeR(125,!2)
		TmpChangeR(130,!2)
		TmpChangeR(100,!2)
		[3
			TmpChangeR(130,!2)
			TmpChangeR(125,!2)
		]
		TmpChangeR(130,!2)
		TmpChangeR(125,!4)
		TmpChangeR(90,0)
		TmpChangeR(125,!4)

		TmpChangeR(130,!2)
		TmpChangeR(125,!2)

		TmpChangeR(130,!2)
		TmpChangeR(125,!4)
		TmpChangeR(90,0)
		TmpChangeR(120,!8)
		TmpChangeR(110,!8)

		TmpChangeR(100,0)
		TmpChangeR(130,!1)
		TmpChangeR(142,!2)
		TmpChangeR(100,!2)
		TmpChangeR(130,!4.)
		TmpChangeR(75,0)
		r16
		TmpChangeR(150,0)
		r16
		TmpChangeR(130,0)
		TmpChangeR(90,!2)
		TmpChangeR(120,0)
		TmpChangeR(100,!1)
	}

	#m2tempo={		[
			TmpChangeR(128,!2)
			TmpChangeR(126,!4)
			TmpChangeR(80,0)
			TmpChangeR(130,!8)
			TmpChangeR(110,!8)


			TmpChangeR(128,!2)
			TmpChangeR(126,!4)
			TmpChangeR(120,0)
			TmpChangeR(90,!8)
			TmpChangeR(110,!8)
		]
		TmpChangeR(128,!2)
		TmpChangeR(126,!4)
		TmpChangeR(80,0)
		TmpChangeR(130,!8)
		TmpChangeR(110,!8)

		TmpChangeR(130,!2)
		TmpChangeR(128,!4)
		TmpChangeR(85,0)
		TmpChangeR(134,!8)
		TmpChangeR(115,!8)

		TmpChangeR(130,!2)
		TmpChangeR(125,!2)
		TmpChangeR(120,!2)
		TmpChangeR(90,!2)

		[3
			TmpChangeR(130,!2)
			TmpChangeR(125,!2)
		]
		TmpChangeR(130,!2)
		TmpChangeR(110,!8)
		TmpChangeR(90,!4.)
	}
	#intro2tempo={
		[
			TmpChangeR(70,0)
			r8
			TmpChangeR(95,0)
			TmpChangeR(130,!4.)
			TmpChangeR(150,!2)
			TmpChangeR(130,!2)
			TmpChangeR(90,!2)
		]
		TmpChangeR(55,0)
		r8
		TmpChangeR(65,0)
		TmpChangeR(110,!4.)
		TmpChangeR(130,!2)
		TmpChangeR(120,!1)
		TmpChangeR(125,!1)
		TmpChangeR(85,!0)
		TmpChangeR(120,!2)
		TmpChangeR(90,!2)
	}

	#m3tempo={
		TmpChangeR(128,!2)
		TmpChangeR(125,!2)

		TmpChangeR(130,!2)
		TmpChangeR(125,!8)
		TmpChangeR(90,0)
		TmpChangeR(100,!4^8)

		TmpChangeR(130,!2)
		TmpChangeR(125,!4)
		TmpChangeR(90,0)
		TmpChangeR(125,!4)

		TmpChangeR(120,!2)
		TmpChangeR(80,0)
		TmpChangeR(110,!2)

		TmpChangeR(130,!2)
		TmpChangeR(125,!2)

		TmpChangeR(130,!2)
		TmpChangeR(110,!4.)
		TmpChangeR(70,!8)

		TmpChangeR(100,!8)
		TmpChangeR(115,!4.)
		TmpChangeR(90,!2)

		TmpChangeR(90,0)
		TmpChangeR(100,!4)
		TmpChangeR(95,!4)
		TmpChangeR(85,0)
		TmpChangeR(55,!4.)
		TmpChangeR(160,!8)

		TmpChangeR(100,0)
		TmpChangeR(115,!2)
		TmpChangeR(105,!2)

		TmpChangeR(130,!2)
		TmpChangeR(115,!2)

		TmpChangeR(130,!2)
		TmpChangeR(125,!2)
		//
		TmpChangeR(130,!2)
		TmpChangeR(125,!8)
		TmpChangeR(90,0)
		TmpChangeR(100,!4^8)

		TmpChangeR(130,!2)
		TmpChangeR(125,!4)
		TmpChangeR(90,0)
		TmpChangeR(125,!4)

		TmpChangeR(120,!2)
		TmpChangeR(75,0)
		TmpChangeR(70,!4.)
		TmpChangeR(120,!8)

		TmpChangeR(120,0)

		TmpChangeR(130,!2)
		TmpChangeR(125,!2)

		TmpChangeR(130,!2)
		TmpChangeR(115,!2)

		[
			TmpChangeR(130,!2)
			TmpChangeR(125,!2)
		]
		[
			TmpChangeR(130,!2)
			TmpChangeR(115,!2)
		]
		[
			TmpChangeR(125,!2)
			TmpChangeR(115,!2)
		]
		TmpChangeR(105,!1)
		TmpChangeR(90,!1)
		TmpChangeR(110,0)
		TmpChangeR(125,!1^1)
		TmpChangeR(105,!1^1)
		TmpChangeR(125,!1^1)
		TmpChangeR(105,!1)
		TmpChangeR(70,!1)
		TmpChangeR(50,0)
		r8
		TmpChangeR(123,!4)
		r2.
		TmpChangeR(100,!1)
		TmpChangeR(80,!1)
	}
	#introtempo
	#tempotr={
		#m1tempo
		#m2tempo
		#intro2tempo
	}
	LoopPlay(#tempotr,0)
	#m3tempo

// pedal
IF(LONGPEDAL=1) {
	#p1={
		[
			#PEDALON r4 #PEDALOFF r2.
			r2 #PEDALON r4 r8. #PEDALOFF #PEDALON r16 #PEDALOFF
		]
		#PEDALON r4. #PEDALOFF r8r2
		r1
		[4 r1]
	}
	#p2={
		[
			[3
				#PEDALON r2^16 #PEDALOFF r2 r-16
				[#PEDALON r8 #PEDALOFF r4.]
			]
			[4
				#PEDALON r2 #PEDALOFF
			]
			:
			#PEDALON r4 #PEDALOFF r2.
			r1
		]
		#PEDALON r2 #PEDALOFF r2
		#PEDALON r8 #PEDALOFF r8^2.
	}

	#p3={
		[4
			#PEDALON r2 #PEDALOFF r2
		]
		[3
			#PEDALON r2 #PEDALOFF r2
		]
		r1
//		#PEDALON r2^8 #PEDALOFF r4.
		#PEDALON r2. #PEDALOFF #PEDALON r4 #PEDALOFF
		#PEDALON r2.^8 #PEDALOFF r8
//		#PEDALON r2 #PEDALOFF r2
		#PEDALON r2. #PEDALOFF #PEDALON r4 #PEDALOFF
		#PEDALON r2. #PEDALOFF #PEDALON r8. #PEDALOFF r16
	}

	#p4={
		[2
			#PEDALON r4 #PEDALOFF r2.
			r2 #PEDALON r4 r8. #PEDALOFF #PEDALON r16 #PEDALOFF
		]
		#PEDALON r4. #PEDALOFF r8^r2
		[3 r1]
	}

	#p5={
		[
			[3
				#PEDALON r2^16 #PEDALOFF r2 r-16
				r2 #PEDALON r4 r8. #PEDALOFF #PEDALON r16 #PEDALOFF
			]
			:
			[4
				#PEDALON r2 #PEDALOFF
			]
			#PEDALON r4 #PEDALOFF r2.
			r1
		]
		[#PEDALON r2 #PEDALOFF]
		#PEDALON r4. #PEDALOFF r8^2
		[#PEDALON r2 #PEDALOFF]
		#PEDALON r4^16 #PEDALOFF r8.^2
		[#PEDALON r2 #PEDALOFF]
		#PEDALON r1 #PEDALOFF
		#PEDALON r2 #PEDALOFF r2
		#PEDALON r4^16 #PEDALOFF r8.^2
		[4 r1]
		#PEDALON r4 #PEDALOFF r2.
		#PEDALON r1 #PEDALOFF
		#PEDALON r4 #PEDALOFF r2.
		#PEDALON r2 #PEDALOFF [#PEDALON r4 #PEDALOFF]
		#PEDALON r4. #PEDALOFF r8^2
		r1
		[#PEDALON r2 #PEDALOFF]
	}
} ELSE {
	#p1={
		[2 r1]
		#PEDALON r4. #PEDALOFF r8r2
		r1
		#PEDALON r4. #PEDALOFF r8r2
		[4 r1]
	}
	#p2={
		[
			[3
				#PEDALON r2^16 #PEDALOFF r2 r-16
				r1
			]
			[4
				#PEDALON r2 #PEDALOFF
			]
			:
			#PEDALON r4 #PEDALOFF r2.
			r1
		]
		#PEDALON r2 #PEDALOFF r2
		#PEDALON r8 #PEDALOFF r8^2.
	}

	#p3={
		[4
			#PEDALON r4.#PEDALOFF r8^2
		]
		[3
			#PEDALON r4 #PEDALOFF r2.
		]
		r1
		#PEDALON r2^8 #PEDALOFF r4.
		#PEDALON r2.^8 #PEDALOFF r8
		#PEDALON r2 #PEDALOFF r2
		#PEDALON r2. #PEDALOFF #PEDALON r8. #PEDALOFF r16
	}

	#p4={
		[2
			#PEDALON r4. #PEDALOFF r8^r2
			r1
		]
		#PEDALON r4. #PEDALOFF r8^r2
		[3 r1]
	}

	#p5={
		[
			[3
				#PEDALON r2^16 #PEDALOFF r2 r-16
				r1
			]
			:
			[4
				#PEDALON r2 #PEDALOFF
			]
			#PEDALON r4 #PEDALOFF r2.
			r1
		]
		[#PEDALON r2 #PEDALOFF]
		#PEDALON r4. #PEDALOFF r8^2
		[#PEDALON r2 #PEDALOFF]
		#PEDALON r4^16 #PEDALOFF r8.^2
		[#PEDALON r2 #PEDALOFF]
		#PEDALON r1 #PEDALOFF
		#PEDALON r2 #PEDALOFF r2
		#PEDALON r4^16 #PEDALOFF r8.^2
		[4 r1]
		#PEDALON r4 #PEDALOFF r2.
		#PEDALON r1 #PEDALOFF
		#PEDALON r4 #PEDALOFF r2.
		#PEDALON r2 #PEDALOFF [#PEDALON r4 #PEDALOFF]
		#PEDALON r4. #PEDALOFF r8^2
		r1
		[#PEDALON r2 #PEDALOFF]
	}
}

// parts

#up1={
	#LF
	l2RCD(b>dfgb<) r2
	r2. l8.RCD(a->e-fa-<) l16 RCD(g>g<) 
	l2RCD(>dfg>d<<) r2
	r2. l8.RCD(a->e-fa-<) l16 RCD(g>g<) 
	l8 RCD(>fg>df<<) 
}

#up2={
	c8r8r2.
}

#up3={
	r2
	r8
	#LF r16l16RCD(c>c<) l8.RCD(d>d<) l16RCD(e->e-<) 
	l2RCD(e->e-<) < #LP r8.l16RCD(g>ce-g<) l8.RCD(g>ce-g<) l16RCD(g>ce-g<) 
	#LMP l2RCD(a->ce-a-<) l8 #LP RCD(g>ce-g<) >
	#LF r16l16RCD(c>c<) l8.RCD(d>d<) l16RCD(e->e-<) 
	l2RCD(e->e-<) < #LP r8.l16RCD(g>ce-g<) #LMP l8.RCD(g>ce-g<) #LMF l16RCD(g>ce-g<) 
	#LF l1RCD(a>ce-a<) 

	l8 RCD(>da>d<<) r8 l4RCD(g>dg<) r8.l16RCD(g>d-g<) l8.RCD(a->d-a-<) l16 RCD(g>d-g<) 
	l8 RCD(g>cg<) l16 RCD(>c>c<<) r16 l4 RCD(f>cf<) r8.l16RCD(f>cf<) l8.RCD(g>cg<) l16RCD(f>cf<) 
	#LMF l2.^8.RCD(e>ce<) l16RCD(e->e-<) 
	Sub{b2}l4RCD(e->e-<) #LMP RCD(d>d<) r2
}

#up4={
	r2
	r8
	#LP r16l16RCD(c>c<) #LMP l8.RCD(d>d<) #LMF l16RCD(e->e-<) 
	#LF l2RCD(e->e-<) <r8.#LP l16RCD(g>ce-g<) l8.RCD(g>ce-g<) l16RCD(g>ce-g<) 
	#LMP l2RCD(a->ce-a-<) l8 #LP RCD(g>ce-g<) >

	#LMP r16l16RCD(c>c<) #LMF l8.RCD(d>d<) #LMF l16RCD(e->e-<) 
	#LF l2RCD(e->e-<) <r8.#LP l16RCD(g>ce-g<) l8.#LMP RCD(g>ce-g<) #LMF l16RCD(g>ce-g<) 

	#LF l1RCD(a>e-fa<) 
	#LP l4.RCD(b->fb-<) l4RCD(b->fb-<) RCD(b>g-b<) RCD(b>gb<) >
	#LMP RCD(cgb->c<) RCD(c#b>c#<) #LMF l8 RCD(db>d<) RCD(e-b->e-<) RCD(eb->e<) 
	#LF l2RCD(fb->df<) l4 RCD(dfb->d<) #LMF Sub{RCD(e-fa) } RMD(>d8.c16<)
	l8 RCD(dfb-) r8r2.
}

#lo1={
	l16
	[
		#LF
		#LC
		RMD(a-g fde-d <bga-g fde-d<)
		#LD
		RMD(bga-g fde-d) [4 RMD(c<g>)]
		RMDV(20)
		:
		<RMD(b8)>>>
	]
	RMD(b8)>>
}
#co2={
	l16
	RMD(a-g fde-d) < RMDCresc(-1)[3 RMD(bga-g fde-d<)]>
	RMDCresc(1) RMD(c<b>gf) [RMD(e-d)] RMD(c<b>b-a-) [RMD(gf)]
	RMDCresc(3) RMD(e-d>e-d) RMDCresc(-1) [RMD(c<b>)]<[RMD(a-g)][RMD(fe-)]
}


#loc1={
	#LF
	RMD(c) #L5 #LC RMD(g>cde-g>cd) #LD RMD(e-dc<ge-dc<g)
}
#loc2={
	[#LF RMD(c) #L5 #LC RMD(g>cd) #LD RMD(e-dc<g)]
}
#locfp2={
	[#LF RMD(c) #L5 #LC RMD(f#>cd) #LD RMD(e-dc<f#)]
}
#locf2={
	[#LF RMD(c) #L5 #LC RMD(f>cd) #LD RMD(e-dc<f)]
}
#lobb={
	#LF RMD(<b>) #L5 #LC RMD(b>dg>) #LD RMD(d<gd<b)
	#LF RMD(<b->) #L5 #LC RMD(b->d-g>) #LD RMD(d-<gd-<b-)
	#LF RMD(<a>) #L5 #LC RMD(a>cf>) #LD RMD(c<fc<a)
	#LF RMD(<a->) #L5 #LC RMD(a->cf>) #LD RMD(c<fc<a-)

	#LC
	RMD(<g>g>c<b> d-cdc# e-ded# feg-f)
	#LD
	RMD(gf#a-g b-a-gf e-dc<b a-gfd)
}

#lobc={
	#LN
	RMD(d-b->c-<b->b-<b->c-<b- e-b->c-<b->b-<b->c-<b-)
	RMD(e-b->c<b->b-<b->c<b- fb->b-<b- g-b->b-<b-)
//	RMD(fb->dfb->dg16.f32 fd<b-g fe-c<f)
	#LC RMD(fb->dfb->dgf) #LD2 RMD(fd<b-g) #LN RMD(fe-c<f)
	RMD(<b->>d-cc- <b->cc-<b- a>c-<b-a g#b-ag#)
}

#loend={
	[#LF RMD(d-) #L5 #LC RMD(>d-g-a-) #LD RMD(b-a-g-d-<)]
	#LF RMD(d-)> #L5 #LC2 RMD(d-gb->d-) #LD RMD(c<b-a- gfed-c<b-a-g)
	[#LF RMD(c-) #L5 #LC RMD(>c-f-g-) #LD RMD(a-g-f-c-<)]
	#LF RMD(c-)> #L5 #LC2 RMD(c-fa->c-<) #LD RMD(b-a-g- fe-dc-<b-a-g-f)
	[#LMF RMD(<b->) #L5 #LC RMD(b->e-f) #LD RMD(gfe-<b-)]
	[#LMP RMD(<b>) #L5 #LC RMD(b>dg>) #LD RMD(d<gd<b)]
	#LP RMD(c) #L5 #LC RMD(g>cde-g>cd) #LD RMD(e-dc<ge-dc<g) #LN
	#LP RMD(<f>d-fg a->d-fg a-gfd- <a-fd-<a-)

	Q(40)l8 RMD(g) Q(95)>l16 RMD(ed#feg-f gf#a-g ag#b-a)
	RMD(>c-<b->c<b> d-cdc# e-ded# feg-f)
	RMD(gf#a-g b-a-gf e-dfe- gfe-d)
	RMD(c<b>dc <b-a-gf# ga-fg e-fde-)

	[
		Q(40)l8 RMD(c) Q(95)l16>> RMD(d-c <b-ga-g ecd-c <b-ga-g)
		#LPP [8 fc]
	]
	#LFF >Q(40)RMD(c8) Q(95)
}

#coend={
	#LFF
	l16
	RMD(a-g ecd-c) [3 RMD(<b-ga-g ecd-c)]
}

#loend2={
	<
	v120
	l2 [RCD(f>f<)]
	Q(60)l4 [RCD(c>c<)]
}
#lo3={
	[3
		#loc1
		:
		#loc2
	]
	#locfp2
	#lobb
	[3
		#loc1
		:
		#loc2
	]
	#locf2
	#lobc

}

#lo7={
	[
		[3
			#loc1
			:
			#loc2
		]
		#locfp2
		:
		#lobb
	]
}

//
#up5={
	#LF
	l2.RCD(b>d#g#b<) l8.RCD(d#g#b>d#<) l16 RCD(e#>e#<) 
	l2.RCD(f#a#>d#f#<) l8. RCD(f#>f#<) l16 RCD(g#>g#<) 
	l2.RCD(a>c#f#a<) l8.RCD(c#f#a>c#<) l16 RCD(d#>d#<) 
	l2.RCD(eg#>c#e<) l8.RCD(e>e<) l16 RCD(f#>f#<) 
	l2.RCD(g#>d#f#g#<) l8.RCD(g#>d#f#g#<) l16 RCD(a#>a#<) 
	l4 RCD(>c-fa->c-<<) l2 RCD(b->fa-b-<) l8.RCD(b->fa-b-<) l16 RCD(>c>c<<) >
	l4 RCD(d-gb->d-<) l4 RCD(cgb->c<) r2
	r1

	#LFF
	[
		l2 RCD(a->cfa-<) l4 RCD(f>cf<) RCD(cf>c<) 
		:
		l2 RCD(<b->fb-) l4 RCD(<a->fa-) r4
	]
	l2.RCD(cf>c<) l8.RCD(<b>fb) l16RCD(cf>c<) 
}
#up6={
	l2 RCD(dfb>d<) r2
	r2.l8.RCD(<a->e-fa-) l16RCD(<g>g) 
	l2 RCD(fg>df<) r2
	r2.l8.RCD(<a->e-fa-) l16RCD(<g>g) 
	l8 RCD(fg>dg<) 
}

#lo5={
	l8 RMD(g#8)l16 RMD(>gg# b>d#<a#b> d#g#dd# g#bgg#)
	RMD(<<d#>>>d#<e#f# a#>d#<dd# f#a#<aa#> d#f#<e#f#)
	l8 RMD(<f#8>) l16 RMD(e#f# a>c#<g#a >c#f#<b#>c# f#ae#f#)
	RMD(<c#>>c#<d#e g#>c#<<b#>c# eg#<gg# >c#e<d#e)
	RMD(<b#>>>d#<gg# ag#f#e d#c#<b#a gg#d#g#)
	RMD(d>>f<ab- >c-<b-a-g- fe-dc- <ab-fb-)
	RMD(e>>g<b>c d-c<b-a- gfeg fed-c)
	#LC
	RMD(<b>cd-c <b-a-gf ed-c<b >c<b-a-g)

	#LN
	[
		RMD(f>cfg a->cfg) #LC RMD(a->cfg) #LD RMD(a-gfc) #LN
		:
		RMD(d-fd-<a- fd-<a-f) [RMD(d-<a->d-f)]<
	]
	RMD(dfdc <a-fdc <a-fdc <a->cda-)
}

#lo6={
	l8 RCD(<g8>g8) 
}

#up11={
	r2r16
	#LF
	l16 RCD(c>c<) l8 RCD(c#>c#<) l8.RCD(d>d<) l16 RCD(e->e-<)
	l2 RCD(e->e-<) r8.l16 #LP RCD(<g>ce-g) l8.RCD(<g>ce-g) l16 RCD(<g>ce-g)
	#LMP l2 RCD(<a->ce-a-) #LP l12 RCD(<g>ce-g) #LF RCD(<b>b) RCD(c>c<) l16 RCD(d->d-<) RCD(d>d<) r16. l32 RCD(e->e-<)
	l2 RCD(e->e-<) r8.#LP l16 RCD(<g>ce-g) l8.#LMP RCD(<g>ce-g) l16 #LMF RCD(<g>ce-g)
	#LF l1 RCD(<a>ce-a)
	Sub { r-40 
		RCDINIT(35,50)
		l8 RCD(<a>da>d<) r8
	} r4
	RCDINIT(400,856)
	l4 RCD(<g>dg) l12 r [RCD(<g>d-g)] l16 RCD(<g>d-g) RCD(<a->d-a-) r RCD(<g>d-g)
	RCD(<g>g) RCD(c>c<) r8 l4 RCD(<f>cf)
		l12 r [RCD(<f>cf)]Sub{l20 RCD(<e>ce)RCD(<f>cf)RCD(<g>cg)rRCD(<f>cf)}r4
	l4 RCD(<e>ce) Sub{l2. RMD(c2.)} l2^8. RCD(<e->e-) l16 RCD(<e->e-)
	Sub{l2 RMD(<b2>)} l4 RCD(<e->e-) RCD(<d>d)r2
	r1.


	#LF
	l12 r RCD(<b>b) RCD(c>c<) l16 RCD(d->d-<) RCD(d>d<) r RCD(e->e-<)
	l2 RCD(e->e-<) r8.l16 #LP RCD(<g>ce-g) l8.RCD(<g>ce-g) l16 RCD(<g>ce-g)
	#LMP l2 RCD(<a->ce-a-) #LP l12 RCD(<g>ce-g) #LF RCD(<b>b) RCD(c>c<)
		Sub{l20 RCD(c#>c#<) RCD(d>d<) RCD(f>f<) r RCD(e->e-<)} r4
	l2 RCD(e->e-<) r8.l16 #LP RCD(<g>ce-g) l8.#LMP RCD(<g>ce-g) l16 #LMF RCD(<g>ce-g)
	l1 #LF RCD(<a>e-a)

	#LFF l2 RCD(<b->d-b-) l4 RCD(<a-b->d-a-) l8.RCD(<g-b->d-g-) l16 #LF RCD(<fb->d-f)
	#LF l2 RCD(<fb->d-f) #LMF l4 RCD(<eb->e) r4
	#LFF l2 RCD(<a->c-f-a-) l4 RCD(<g-a->c-g-) l8.RCD(<f-a->c-f-) l16 #LF RCD(<e-a->c-e-)
	#LFF l2 RCD(<e-a->c-e-) #LMF l4 RCD(<da->d) r4
	#LFF l1 RCD(<g>e-g)
	#LF Sub{l1 RMD(d1)}Sub{l2 RMD(<g2>) #LMP RMD(<g2>)} #LMF RMD(g2^4.) #LMP RMD(f8)
	#LP Sub{l1 RCD(<g>c)}l2 RMD(f2e-2)
	Sub{l1 RCD(<fa->)} l8 RMD(e-8f16e-16 d-8.e-16 f4<a-4>)
	l1^1 RCD(<e->c)
	Sub{l2. RCD(<df>)} RMD(c4.<b8>d4)r4
	r1
	Sub{<l8 RMD(c8) r8 r2. l1 RCD(fa-)>}
	RMD(c1.)#LMP RMD(d2)
	#LMF l1RCD(<eg>e)
	#LP
	Sub{l1 RCD(<ca->)}
	Sub{RMD(<g2f2>)}
	RMD(c2.)l4 #LF RCD(<b>d)
	#LFF l8 RCD(<eg>ce)
}

#upend2={
	l2
	#FF
	RCD(cfa>c<)
	RCD(cfa->c<)
	l4Q(60)
	RCD(cfg>c<)
	RCD(ceg>c<)
}

TR(1)
	#V_PIANO
	RCDINIT(400,856)
	RMDINIT(250,370,110,115)
	v110
	Q(98)
	o5
	Sub{#p1}
	#up1
	o7
	#co2

	#tr1={
		Sub{#p2}
		#up2
		o6
		#up3
		r1
		o6
		#up4
		o5
		Sub{#p3}
		#up5
		o6
		Sub{#p4}
		#up6
		o7
		#co2
	}
	LoopPlay(#tr1,0)
	Sub{#p5}
	#up2
	o6
	#up11
	o7
	#coend
	#upend2
	IF(GAKUHU=0) {r1r1 v0 c1}

TR(2)
	#V_PIANO
	RMDINIT(250,370,110,115)
	Q(95)
	o5
	Sub{#p1}
	r8
	#lo1
	o6
	#co2

	#tr2={
		Sub{#p2}
		#lo3

		Sub{#p3}
		o2
		#lo5
		#lo6
		o5
		Sub{r-8 #p4}
		#lo1
		o6
		#co2
	}
	LoopPlay(#tr2,0)
	Sub{#p5}
	#lo7
	#loend
	o6
	#coend
	#loend2
