		//初期化------------// 
	TrackName ={"トーンクラスター ver.0.03"};
	Copyright ={"庚申works"};

/*
	この曲は擬似トーンクラスターを使用する現代音楽に近いものです。

	8小節の基本パターンで動いており、
	Track1からTrack2へ入れ換える際、TR1終わりの時間から、4小節
	時間をもどしTR2の始めとします。

	決まりごととして、Track2の音は'e g b'から始まるどれかの音
	をランダムに半音上下し、発声するようにします。
	(厳密にはTrack1から)
	この時、オクターブ上げるかしないかランダム判断します。

	その後、トラック同士のボリュームをクロスフェードします。


	TR3へきたらTR1へもどり、これを繰り返します。
	必ず半音でぶつかる不協和音ため、独特の緊張感が出ます。

	TR1 8小節    TR1 8小節
	    TR2 8小節    ...
	        TR3 8小節    ...

	図式化するとこんな感じです。だからなんだと言えばそれまでですが。



	与太話

	これまで先行指定の仕方が良くわからなかったのですが、
	じょんさんのmax_msp_01 の解析ではたと気づきました。

	//	Time();
	//	Sub{l4 V = 100; rrrr V = 0; rrrr V.T(100,0,!1+1);}
	//	MML...

	4小節パターンとするとトラックヴェロシティがミソですね。。
	もっともこの方法を使いきる自信はありません、MML恐るべし、。

	もうひとつ、Print();があるとTW-music2は通りません、
	前回の問題はこれで解決。エラー出力のみとするべきか・・。


*/

	//	※※ このスクリプトは構造化エディタ対応です。//


	Include(stdmsg.h);			//ミディ音源リセットのおまじない
		//System.MeasureShift(1);
		Time( 0: 1: 0);
		ResetXG();ResetGS();ResetGM();	//音源リセット命令


	 
	TimeBase=120; 
	Tempo=86;

Int Num=0;
Int ADD=0;
Int Select =0;

Int Set_time1 =0;	Int Set_time2 =0;	Int Set_time3 =0;
Int ADD_oct1=0;		Int ADD_oct2=0;		Int ADD_oct3=0;

Str Str_out;
Str Str_btm_out;

Int Set_note1 =52;		Int St_1 =0;
Int Set_note2 =Set_note1+3;	Int St_2 =0;
Int Set_note3 =Set_note1+7;	Int St_3 =0;


FOR(Int I=0;I< 16;I++){

ADD=RandomSelect(-1,1);		//半音上下


IF(0< I%3){Select=Random(3)}ELSE{Select=Random(2)+1}	// ボトム変更回数制限

SWITCH(Select){
CASE(0){
	IF(ADD_oct1==12){ADD_oct1=-12}ELSE{ADD_oct1=RandomSelect(0,12)}		//ヲクターブ変更

	St_1 =Set_note1+ADD;
	IF(St_2==St_1| St_3==St_1){St_1=St_1-ADD-ADD;}		//同音チェック

	Set_note1 =St_1+ADD_oct1;
}
CASE(1){
	IF(ADD_oct2==12){ADD_oct2=-12}ELSE{ADD_oct2=RandomSelect(0,12)}

	St_2 =Set_note2+ADD;
	IF(St_1==St_2| St_3==St_2){St_2=St_2-ADD-ADD;}

	Set_note2 =St_2+ADD_oct2;
}
CASE(2){
	IF(ADD_oct3==12){ADD_oct3=-12}ELSE{ADD_oct3=RandomSelect(0,12)}

	 St_3 =Set_note3+ADD;
	IF(St_1== St_3|St_2== St_3){ St_3= St_3-ADD-ADD;}

	Set_note3 = St_3+ADD_oct3;
}
} //SW

Num =I%3+1;

Str_out ={
	TR=}+(Num)+{@5o5l16q100;

	Time= Set_time}+(Num)+{;
	V.T((0,100,!1+1+1+1),(100,0,!1+1+1+1));
	IF(0< I%2==0){P.T((0,127,!1+1),(127,0,!1+1),(0,127,!1+1),(127,0,!1+1))}
	IF(0< I%2==1){P.T((127,0,!1+1),(0,127,!1+1),(127,0,!1+1),(0,127,!1+1))}
	[8 [16 'n(}+Set_note1+{)n(}+Set_note2+{)n(}+Set_note3+{)']]
	} //

IF(Num==3){Num=0}

Str_out =Str_out+{	Set_time}+(Num+1)+{=Time -TimeBase*4 *4}	// 時間読み出し

Str_out;	//出力

} //FOR



	 
/* 元の曲の骨格はこんな感じです。 

Int Set_time1 =0;
Int Set_time2 =0;
Int Set_time3 =0;
	 
TR=1@5o5l16q100 

Time=Set_time1;
V.T(100,0,!1+1+1+1);

Sub{[4 [16 e]]}
Sub{[4 [16 g]]}
　　[4 [16 b]]

Set_time2=Time- TimeBase*4 *4;

 
TR=2@5o5l16q100 

Time=Set_time2;
V.T(0,100,!1+1+1+1,100,0,!1+1+1+1);

Sub{[8 [16 e]]}
Sub{[8 [16 g]]}
　　[8 [16 `c]]

Set_time3=Time- TimeBase*4 *4;
 
TR=3@5o5l16q100 

Time=Set_time3;
V.T(0,100,!1+1+1+1,100,0,!1+1+1+1);

Sub{[8 [16 e]]}
Sub{[8 [16 a]]}
　　[8 [16 `c]]

Set_time1=Time- TimeBase*4 *4;
 
TR=1@5o5l16q100 

Time=Set_time1;
V.T(0,100,!1+1+1+1,100,0,!1+1+1+1);

Sub{[8 [16 e]]}
Sub{[8 [16 g]]}
　　[8 [16 `b]]

Set_time2=Time- TimeBase*4 *4;
 
TR=2@5o5l16q100 

Time=Set_time2;
V.T(0,100,!1+1+1+1,100,0,!1+1+1+1);

Sub{[8 [16 e]]}
Sub{[8 [16 `g]]}
　　[8 [16 `c]]

Set_time3=Time- TimeBase*4 *4;
 
TR=3@5o5l16q100 

Time=Set_time3;
V.T(0,100,!1+1+1+1,100,0,!1+1+1+1);

Sub{[8 [16 `e]]}
Sub{[8 [16 a]]}
　　[8 [16 `c]]

Set_time1=Time- TimeBase*4 *4;
*/
    
