// 黒鍵のエチュード  Etuden Op.10-5
///////////////////////////////////////////////////////////////////////////////////////
// 各種設定らしきもの
Int MSGS=0
Int TWM2=0
Int TIMIDITY=0
Int BRIGHT=0
Int LOOP=2

Int KEY=0
Int TEMPORATIO=100
Int TEMPODIFF=0
// Base Tempo=116
Int IGNORETEMPO=0
Int TINY=0
Int GAKUHU=0
//Int DEBUG=1
//Mute(1,2,3)
// ↑上2行のコメント外すと、メトロノームだけが鳴るなの。どうやって使うかは秘密なの。ぐすぐす;;
////////////////////////////////////////////////////////////////////////////////////////////////

拍子 2,4

IF(KEY %12 = 1 || KEY % 12 = 6 || KEY % 12 = -11 || KEY % 12 = -6) {
	曲名{"白鍵のエチュード Etuden Op.10-5"}
} ELSE {
	曲名{"黒鍵のエチュード Etuden Op.10-5"}
}
作者{"Fryderyk Franciszek Chopin MML by ななこっち★"}

IF(MSGS=1 || TWM2=1) {
	ResetGS
}
#METORONOMEMML={M8m8m8m8}

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

}

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)
	// 1
	TmpChangeR(116,0)
	[6 r2]

// loop start
	#tempoloop={
		TmpChangeR(110,!2)
		TmpChangeR(92,!2)
		TmpChangeR(110,0)
		TmpChangeR(119,!4)
		r4
		[4 r2]
		TmpChangeR(112,!1)
		TmpChangeR(105,!2)

		// 2
		TmpChangeR(100,0)
		TmpChangeR(110,!2)
		TmpChangeR(105,!2)
		TmpChangeR(120,0)
		TmpChangeR(123,!2)
		TmpChangeR(117,!2)
		TmpChangeR(100,0)
		TmpChangeR(105,!4)
		TmpChangeR(110,!4)
		TmpChangeR(105,!2)

		TmpChangeR(100,0)
		TmpChangeR(107,!2^2)
		TmpChangeR(115,!2^2^2^2)
		TmpChangeR(123,!2^2^8)
		TmpChangeR(95,!4.^2)

		[
			TmpChangeR(116,0)
			TmpChangeR(113,!2)
			TmpChangeR(100,!2)
			TmpChangeR(116,0)
			[2 r2]
		]

		TmpChangeR(105,0)
		TmpChangeR(108,!1)
		TmpChangeR(105,!1)

		TmpChangeR(108,0)
		TmpChangeR(113,!2)
		TmpChangeR(108,!2)
		TmpChangeR(90,!2)
		TmpChangeR(70,!2)

		// 3
		TmpChangeR(105,0)
		TmpChangeR(116,!4)
		r4
		[5 r2]
	}
// loop end
	LoopPlay(#tempoloop,0)

	TmpChangeR(112,!2^2)
	TmpChangeR(118,!2^2)
	[4 r2]
	TmpChangeR(110,!2)
	TmpChangeR(85,!2)
	TmpChangeR(35,0)
	r24
	TmpChangeR(80,0)
	r12
	TmpChangeR(100,!4.)
	TmpChangeR(90,0)
	r2
	TmpChangeR(116,0)
	[5 r2]
	TmpChangeR(125,!2^2^2)
	[3 r2]
	TmpChangeR(127,!2)

	TmpChangeR(110,0)
	TmpChangeR(127,!2^2)
	TmpChangeR(110,!2^2)
	TmpChangeR(80,0)
	r12
	TmpChangeR(60,0)
	r12
	TmpChangeR(80,0)
	TmpChangeR(90,!4.)
	TmpChangeR(67,!12)

// pedal part
#p1={
	[
		[1 r2]
		[1 #PEDALON r8. #PEDALOFF r16r4]
		[4 #PEDALON r8. #PEDALOFF r16]
		[1 r2]
		[1 #PEDALON r8. #PEDALOFF r16r4]
		[2 #PEDALON r2 #PEDALOFF]
	]
}

	//
#p2={
	[4 #PEDALON r8. #PEDALOFF r16]
	[4 #PEDALON r8. #PEDALOFF r16]
	[4 #PEDALON r8. #PEDALOFF r16]
//	[1 #PEDALON r4 #PEDALOFF r4]
//	[1 r2]
	[1 #PEDALON r2 r2 #PEDALOFF]
	[2 #PEDALON r4 #PEDALOFF #PEDALON r8 #PEDALOFF #PEDALON r8 #PEDALOFF]
	[2 #PEDALON r2 #PEDALOFF]
	[2 #PEDALON r4 #PEDALOFF r4]
	[2 #PEDALON r4 #PEDALOFF]
	[1 #PEDALON r2 #PEDALOFF]
	[2 #PEDALON r2 r2 #PEDALOFF]

	[2 #PEDALON r2 r4 #PEDALOFF #PEDALON r4 #PEDALOFF]
	[2 #PEDALON r2 r4 #PEDALOFF #PEDALON r8. #PEDALOFF #PEDALON r16 #PEDALOFF]

	[4 #PEDALON r8 #PEDALOFF]
	[1 #PEDALON r4 #PEDALOFF]
	[2 #PEDALON r8 #PEDALOFF]
	[1 #PEDALON r4. #PEDALOFF]
	[1 #PEDALON r8 #PEDALOFF]
	[1 #PEDALON r4. #PEDALOFF r8]
}
	//
#p3={
	[
		[1 r2]
		[1 #PEDALON r8. #PEDALOFF r16r4]
		[4 #PEDALON r8. #PEDALOFF r16]
	]
	[8 #PEDALON r8. #PEDALOFF r16]
	[2 #PEDALON r2 #PEDALOFF]
	[1 #PEDALON r2 r2 #PEDALOFF]
	[1 #PEDALON r2 #PEDALOFF]
	[2 #PEDALON r4 #PEDALOFF]

	[4 #PEDALON r8 #PEDALOFF r8]
	r4
	[3 #PEDALON r8 #PEDALOFF r8]
	[8 #PEDALON r8 #PEDALOFF r8]

	[2 #PEDALON r4 #PEDALOFF r8 #PEDALON r8 #PEDALOFF]
	[1 #PEDALON r4 #PEDALOFF r8]
	[5 #PEDALON r24 #PEDALOFF r24r24]
	r8
	[15 #PEDALON r8 #PEDALOFF]
	#PEDALON r2 #PEDALOFF
	#PEDALON r1 #PEDALOFF

}


#m1={
	l24

	[
		RMDV(95,100)
		[RMD(g-b-d-g-e-g- d-g-<b->d-<g-b-)]
		RMD(d->d-<a->d-<a->a-<a->a-e-a-e->e-<)
		RMD(e->e-<a->e-<a->a-<a->a-d-a-d->d-<)
		[RMD(g-b-d-g-e-g- d-g-<b->d-<g-b-)]
		:
		RMD(e->e-<a->e-<a->a-e-a-e->e-<a->a-<)
		[6 RMDV(-5) RMD(b->b-<) ]>
	]
	RMD(e->e-<a->e-<a->a- e-a-e->e-<a->e-<)
	RMD(e->e-<a->e-<d->d- <a->d-<a->a-d->d-<)
}

#m2={
	l24
	[
		RMD(a-b-a-e->e-<e- d-e-d-<a->a-<a-)
		RMD(a-b-a-e->e-<e- d-e-d-<a-8^24)
		:
		>RMD(e-a-b-a-e- d-a->d-e-d-<b-)
		RMD(a->e-a-b-a-e- d-a->d-e-d-<b-)
		RMDV(-3)
	]
	>RMD(a-g-a-g-a- >g-<a-g-a-g-a-)
	<RMD(a->a-g-a-g-a->g-<a-g-a-g-a-)
	[RMD(<b->b-g-b-g-b->g-<b-g-b-g-b-)]
	RMD(g-b-g- >b-<b-g- >a-<b-g- >g-<b-g-)
	RMD(>d-<b-g- >b-<b-g- >a-<b-g- >g-<b-g-)

	[RMD(d->d-<b->d-d->d- <b->d-<d-d-<b->d-<)]
	RMD(d->d-<b->d-d->d- <a->d-<d-d-<a->d-<)
	RMD(d->d-<g->d-<d-d-<g->d-<d-d-<g->d-<)

	RMD(e-g->d- e-<g->d- e-g-d- e-g->d-<)
	RMD(e-g->d- e-<g->d- e-g-d- e->d-<g-)
	RMD(e-g->e- d-<g-e-> d-<g-e- d-g-e-)
	RMD(d-<g->e- d-<g-e-> d-<g-e- d-g-e-)

	RMD(<a->e-g- a-e-g- a->e-<g- a->e-g-)
	RMD(<a->e-g- a-e-g- a->e-<g- a->g-e-)
	RMD(a-g->e-< a-g-e- a-g-e- <a->g-e-<)
	RMD(a-g->e-< a-g-e- a-g-e- <a->g-e-<)

	[RMD(d->d-<a-> d-<a->a- d-a-<a- >d-<a->d-<)]
	RMD(d->d-<a-> d-d->d- <a->d-<d- d-<a->d-<)
	RMD(a->a-d- a-a->a- d-a-<a- a-d-a-)

	[RMD(d-e-d- >e-d->e- d-e-d- <d-e-d-<)]>
	[4 RMD(>d-e-d-< d-e-d-)]
}

#m3={
	[RMD(g-b-d-g-e-g- d-g-<b->d-<g-b-)]
	RMD(d->d-<a->d-<a->a-<a->a-e-a-e->e-<)
	RMD(e->e-<a->e-<a->a-<a->a-d-a-d->d-<)
	[RMD(g-b-d-g-e-g- d-g-<b->d-<g-b-)]
	[RMD(e->e-<a->e-<a->a-<) [3 RMD(b->b-<)]>]<

	[
		RMD(b->b-e- b-<a->a- <a->a-d- a-<g->g-<)
		RMD(d->d-<a- >d-<a->a- <g->g-d- g-d->d-<<)
	]

	[4 RMD(b->b-e- b-<a->a-<)]>
	[RMD(d-b-<a- >a-d-b- <a->a-d- b-<a->a-)]

	RMD(>e-d-<b- a-g-e- d-<b-a- g-e-d-)
	RMD(<a-4 b-8.a-16)

	RMD(g-8r8 >> a-b-a-d->d-<d-)
	RMD(d-e-d- <g->g-<g- a-b-a- d-8^)
	RMD(g-a- b-a-g- d-a->d- e-d-<a-)
	RMD(g->d-g- a-g-e- d-a->d- e-d-<a-)

	RMD(g-a-g- d->d-<d- d-e-d- <a->a-<a-)
	RMD(a-b-a- g->g-<g- d-4^)
	RMD(g-a- b-a-g- d-a->d- e-d-<a-)
	RMD(g->d-g- a-g-e- <a->d-a- b-a-d-)
	RMDV(-15)
	[3 RMD(b-d-a- <b->a-d- g-<b->e- <a->d-<d-)]
	[RMD(b-g->e- <d->d-<a-)]

	Sub{
		Q(50)RMD(b-8)
		RMDV(15)
		Q(95)>RMD(d-8g-8b-8>d-8g-8b-8>d-8)
		[4 RMD(g-8b-8)]
	}
	<<<
	r8 RMD(b-a-g- >e-d-<b-> g-e-d-)
	RMD(b-a-g- >e-d-<b-> g-e-d- b-a-g->)
	[4 RMD(e-d-<b-> g-e-d-)]

	RCD(<b->g-) <r v118 RCD(g->g-<)
	RCD(e->e-<) RCD(d->d-<) RCD(<b->b-) RCD(<a->a-) RCD(<g->g-) RCD(<e->e-) RCD(<d->d-) < RCD(<b->b-) RCD(<a->a-)
	l8 RCD(<g-8>g-8)r8
	>
	v123
	l4 RCD(b-4>d-4g-4b-4<)
	<
	RMDV(125,127)
	<RMD(g-2)
	v0g-2
}

#bdg={RCD(b->d-g-<)}
#ceg={RCD(>c-e-g-<)}
#adf={RCD(a->d-f<)}
#ace={RCD(a->c-e-<)}
#acd={RCD(a->c-d-<)}
#fd={RCD(f>d<)}
#af={RCD(a->f<)}
#ga={RCD(>g-a-<)}
#fb={RCD(>fb-<)}
#fa={RCD(>fa-<)}
#gb={RCD(>g-b-<)}
#df={RCD(>d-f<)}
#aeg={RCD(a->e-g-<)}
//#adfm={RCD(a->d-f-<)}
#acg={RCD(a->cg-<)}
#bdg={RCD(b->d-g-<)}
#bg={RCD(b->g-<)}
#bdf={RCD(b->d-f<)}
#bdfm={RCD(b->d-f-<)}
#gdfm={RCD(g>d-f-<)}
#ameg={RCD(a>e-g-<)}
#adg={RCD(a->d-g-<)}
#acga={RCD(a->cg-a-<)}
#ge={RCD(g>e<)}
#cdf={RCD(>c-d-f<)}
#ae={RCD(a->e-<)}
#fbd={RCD(fb->d<)}

#chord1={
	l8
	[
		[
			#bdg #ceg #bdg r
			r #ceg #bdg r
			:
			r #adf #ace r
			r #ace #acd r
		]
		l4
		r8 #ae r8
		:
		l8 #fd >#fd <r4
	]
	r8 l8 #af r4

}

#chord2={
	l8
	#ga #ga #fb #fa
	#gb #ga #df r
	r #aeg #adf r
	r #acg r #adf

	r #ga #fb #fa
	#gb #ga #df r

	v100
	[r #aeg rr]
	r #bdg rr
	[3 r #bg rr]
	r #bdf rr
	r #bdfm rr
	r #gdfm r #adf
	r #ameg rr

	v110
	r2
	r4 l8.#adg l16 #adg
	l2 #adg
	r2
	r2
	r4 l8.#acga l16 #acga
	l2 #acga
	r2

	v110
	[
		r4 l2 #af
		l8. #ge l16 #af
	]
	Q(90)
	Sub {
		RMDV(115,124)
		r8 l8 >RMD(f g- g a-4 g g- f)
		RMDV(119,126)
		r RMD(a-b->c-4<b-8a-8)<
	}
	v90
	r8 l8 RCD(a->d-<) RCD(a>d-<) RCD(b->d-<)
	l4 RCD(>c-d-<) l8 RCD(b->d-<) RCD(a>d-<)
	RCD(a->d-) rrr<
	r4r8r8
	Q(55)
}

#subchord2={
	l8
	>c<a->d-<a->
	c<a->d-<a->
	r2
	r2
	r<a->d-<a->
	c<a->d-<a->
	[24 r2]
	<
	rr l4 #cdf
	l2 #cdf
}

#chord3={
	l8
	[
		#bdg #ceg #bdg r
		r #ceg #bdg r
		:
		r #adf #ace r
		r #ace #acd r
	]
	[r #ae #fbd r]

#cdfa={RCD(>c-d-fa-<)}
#bdgb={RCD(b->d-g-b-<)}
#cea={RCD(>c-e-a-<)}
#bdg={RCD(b->d-g-<)}
#aea={RCD(a->e-a-<)}
#aega={RCD(a->e-g-a-<)}
#adga={RCD(a->d-g-a-<)}
#gad={RCD(>g-a->d-<<)}
#dadg={RCD(d-a->d-g-<)}
#dac={RCD(d-a->c-<)}

	//--
	[
		r #cea r #bdg
		r #cdfa r #bdgb
	]
	l4 r8 #aea r8
	l4 r8 #aega r8
	r4 #adga
	#gad r4
	Sub{r32 #dadg } r2
	l2 #dac

#bg={RCD(b->g-<)}
#ca={RCD(>c-a-<)}
#af={RCD(a->f<)}
#fce={RCD(f>c-e-<)}
#dd={RCD(d->d-<)}
#gbe={RCD(g-b->e-<)}
#acf={RCD(a->c-f<)}
#mdad={RCD(<d-a->d-)}
#mgbg={RCD(<g-b->g-)}
#gdb={RCD(g->d-b-<)}
#db={RCD(>d-b-<)}
#cf={RCD(>c-f<)}
#bg={RCD(b->g-<)}
	//--
	l8
	[#bg d- #ca #af]
	#bg r #fce #dd
	#gbe #dd #fce #dd

	[#bg d- #ca #af]
	#bg >d-< #fce #dd
	#gbe #dd #fce #dd

	l4 #db r8 l8 #acf
	l4 #bg r8 l8 #cf
	l4 #bg r4
	r2
	//--
	r4.
	l24
	<
	RMDV(95,102)
	RMD(g->d-b-<)
	RMD(g->d-b-<)
	RMD(b->g->d-<<)
	RMD(>d-b->g-<)
	RMD(g->d-b-<)
	RMD(b->g->d-<<)
	RMD(>d-b->g-<)
	[3
		RMD(g->d-b-<)
		RMD(d-b->g-<)
	]
	l24
	RMDV(100,110)
	RMD(g-r g- e-d-<b- a-g-e- d-<b-a-)
	RMD(g-8) r8 l4 #gdb
}

#bass1={
	l8
	[
		RMD(g-g-g-r)
		RCD(<g->g-)rrr
		RCD(<d->d-)rr<RMD(a-)>
		RMD(d-4.)r

		RMD(g-g-g-r)
		RCD(<g->g-)rrr
		:
		RMD(c-rrc-)
		RMD(<b->b-r4)
	]
	RMD(crr<a->)
	RMD(d-rrr)
}

#bass2={
	r2
	r2
	RMD(crrd-)<
	RMD(a-rd-r)
	RMD(a-)rrr
	rrrr>

	RMD(c)rr<RMD(c)>
	RMDV(110,120)
	RMD(c)rr RCD(<c>c)
	RCD(<d->d-)r RCD(<c>c) RCD(<d->d-)
	RMDV(112,120)
	RCD(<d>d)r RCD(<c#>c#) RCD(<d>d)
	RCD(<e->e-) rr RCD(<e->e-)
	RCD(<e>e)rr RCD(<e>e)
	RMDV(115,120)
	RCD(<f>f)r RCD(<e>e) RCD(<f>f)
	RCD(<g->g-)r RCD(<f>f) RCD(<g->g-)
	RCD(<g>g) r RCD(<a->a-) r
	RCD(<a>a)rr < RCD(<a>a)

	[
		l2 RCD(<a-2>a-2)
		r2
		r2
		r2
	]
	RMDV(110,115)
	l8
	RMD(d-)rrr
	r2>
	RMD(d-)rrr
	r2
	RMD(d-)rrr
	r2
	rRMD(d-)rr
	r2
}

#bass3={
	l8
	RMD(g-g-g-r)
	RCD(<g->g-)rrr
	RCD(<d->d-)rr<RMD(a-)>
	RMD(d-4.)r

	RMD(g-g-g-r)
	RCD(<g->g-) rrr
	[RMD(c-)rr<RMD(b-)>]

	RMDV(80,95)
	[
		RMD(c-rd-r)
		RMD(c-r<b-r>)
	]
	RMDV(85,100)
	RMD(c-rrc-)
	RMD(crrc)
	RMD(d-4)r4
	r2<
	RMD(d-2)
	r2
	>
	[
		[RMD(g-2)]
		[RMD(g-8r8 d-8r8)]
	]
	l8
	RMDV(85,100)
	RMD(g-4rd-)
	RMD(g-4r)
	RMDV(-3)
	RMD(<d-)
	RMD(g-4rd-)
	[RCD(<g->g-) RMD(d-)]
	RCD(<g->g-) rrr
	RMDV(3)
	[3 r2]
	l24
	RMDV(100,110)
	rr> RMD(g- e-d-<b- a-g-e- d-<b-a-)

	l8
	RMDV(110,120)
	RCD(g->g-)> r4.
	RMDV(127,127)
	RCD(<<g-2>g-2>)

}

TR(1)
	o7
	#V_PIANO
	Q(70)v110
	RMDINIT(270,856,95,100)
	#tr1={
		RMDV(95,100)
		Sub{#p1}
		#m1
		Sub{#p2}
		#m2
	}
	LoopPlay(#tr1,0)

	RMDV(95,100)
	Sub{#p3}
	#m3

TR(2)
	o4
	#V_PIANO
	#tr2={
		Q(55)v90
		Sub{#p1}
		#chord1
		Sub{#p2}
		Sub{#subchord2}
		Q(40)
		#chord2
	}
	LoopPlay(#tr2,0)
	Q(55)
	Sub{#p3}
	#chord3

TR(3)
	o4
	#V_PIANO
	Q(95)v115
	RMDINIT(270,856,100,110)
	#tr3={
		Sub{#p1}
		#bass1
		Sub{#p2}
		#bass2
	}
	LoopPlay(#tr3,0)
	Sub{#p3}
	#bass3