TrackName ={"コードアルペシエイター ver.1.01"}; 
	Copyright ={"庚申works"};

	/*
		※※ Sqr_engine.hを読み込ませてください。

		初投稿です、手製のシーケンスエンジンで一曲仕上げました。
		アルゴリズムの見直しなどブラッシュアップしている最中でもあり、処理速度が鈍いです。
		このため、コンパイルに若干時間がかかります。、

		エレクトロニカエンジンを目指してましたが、汎用性を持たせたので、
		別のジャンルでも使用できる気はします。

		※※ 表示 - 下側タブの表示をすると、機能コードの流れが見えます。
		※※ このスクリプトは構造化エディタ対応です。
		※※ Drum'nBassドラムの付録つきです、//リズムアルペジエイター//以下のコメントを解除のこと。
		

	*/

	//初期化------------//

	Include(Sqr_engine.h);	//シーケンスエンジン読込み


		Include(stdmsg.h);			//ミディ音源リセットのおまじない
		Time( 0: 1: 0);
		System.MeasureShift(1);	TrackSync;	//Midi互換性のため

		ResetXG();ResetGS();ResetGM();		//音源リセット命令
 
// Track =-1 

//エンジン名(小節数,1/4小節数,コード型,キーシフト,モジュラー型[省略可],転調キー[省略可])

//Sqrptn(1,0,10,KeyC,TypeA,0)	//

//ファンクションモジュールコール

	Int TypeChk =0;	Int TypeA =1;

//ファンクションキー・転調コール

	Int KeyCs= -11;	Int KeyDf= KeyCs;
	Int KeyD = -10;
	Int KeyDs= -9;	Int KeyEf= KeyDs;
	Int KeyE = -8;
	Int KeyF = -7;
	Int KeyFs= -6;	Int KeyGf= KeyFs;
	Int KeyG =-5;
	Int KeyGs=-4;	Int KeyAf= KeyGs;
	Int KeyA =-3;
	Int KeyAs=-2;	Int KeyBf= KeyAs;
	Int KeyB =-1;
	Int KeyC = 0;

 
//コードアルペジエイター// 

	//グローバル
	Tempo=147;
	Int Keyin_set = KeyA;		//機能コード出力

	//ローカル
	Int TM_set=Time(1:1:0);
	Array Ptn_load;
	Array Ptn_num;

	Int Part_ADD =0;		//演奏時間出力
	Int Parthalf_ADD =0;


FOR(Int Trk_select=1; Trk_select<= 6; Trk_select++){ //トラックセレクト

	SWITCH(Trk_select){
	CASE(1){	Track =1;	Channel =1;	@5;	Time=TM_set;}	//Sqr		//ランダム
	CASE(2){	Track =2;	Channel =2;	@90;	Time=TM_set;}	//Pad
	CASE(3){	Track =3;	Channel =3;	@90;	Time=TM_set;}	//Pad		//drop2,3

	CASE(4){	Track =4;	Channel =4;	@5;	Time=TM_set;}	//Prs		//フレーズ
	CASE(5){	Track =5;	Channel =5;	@5;	Time=TM_set+Dlyptn(666);}	//Prs ディレイタイム 666ms
	CASE(6){	Track =6;	Channel =6;	@5;	Time=TM_set+Dlyptn(396);}	//Prs
	}

//  ↓------↓
	FOR(Int IA =0; IA <=8; IA++){		//コード呼び出し


	SWITCH(IA){
	CASE(0){	Keyin_set = KeyA;
	Ptn_load = (	24);
	}
	CASE(1){	Keyin_set = KeyA;
	Ptn_load = (	0, 1, 2, 3, 	4, 5, 6, 7,
			0, 1, 2, 9, 	10, 6, 7, 8);
	}
	CASE(2){	Keyin_set = KeyA;
	Ptn_load = (	32, 1, 2, 3, 	4, 5, 6, 7, 	8);
	}
	CASE(3){	Keyin_set = KeyA;
	Ptn_load = (	23,17,18,19,20,21,22,	31);	//
	}

	CASE(4){	Keyin_set = KeyC;
	Ptn_load = (	16,25,26,27,	34,28,30,10);
	}

	CASE(5){	Keyin_set = KeyC;
	Ptn_load = (	11,12,13,14,	15);		//
	}

	CASE(6){	Keyin_set = KeyC;
	Ptn_load = (	16,25,26,27,	25,28,29,10);
	}

	CASE(7){	Keyin_set = KeyA;
	Ptn_load = (	17,18,19,20,21,	11,12,25,30,	15);	//
	}

	CASE(8){	Keyin_set = KeyA;
	Ptn_load = (	0, 1, 2, 9, 	10, 6, 7, 8,
			32, 1, 2, 3, 	4, 5, 6, 7, 	8,
			33);
	}
	} //SWITCH

	Ptn_load = (Ptn_load, -1);
	FOR(Int HA =0; Ptn_load(HA)!=-1 ; HA++){		//コード指定

	SWITCH(Ptn_load(HA) ){
	CASE(0){	Ptn_num =(2,0,20,KeyA,TypeChk,0)}	//Am
	CASE(1){	Ptn_num =(2,0,720,KeyA,TypeChk,0)}	//Am/G
	CASE(2){	Ptn_num =(2,0,50,KeyFs,TypeChk,0)}	//F#φ
	CASE(3){	Ptn_num =(2,0,17,KeyF,TypeChk,0)}	//FM7

	CASE(4){	Ptn_num =(2,0,27,KeyD,TypeChk,0)}	//Dm7
	CASE(5){	Ptn_num =(2,0,10,KeyG,TypeChk,0)}	//G
	CASE(6){	Ptn_num =(2,0,50,KeyB,TypeChk,0)}	//Bm7b5

	CASE(7){	Ptn_num =(2,0,47,KeyE,TypeChk,0)}	//E7sus4
	CASE(8){	Ptn_num =(2,0,70,KeyE,TypeChk,0)}	//E7

	CASE(9){	Ptn_num =(2,0,26,KeyF,TypeChk,0)}	//Fm6
	CASE(10){	Ptn_num =(2,0,60,KeyB,TypeChk,0)}	//Bdim

	CASE(11){	Ptn_num =(1,0,16,KeyC,TypeChk,0)}	//C6
	CASE(12){	Ptn_num =(1,0,27,KeyA,TypeChk,0)}	//Am7
	CASE(13){	Ptn_num =(1,0,17,KeyAf,TypeChk,0)}	//AbM7
	CASE(14){	Ptn_num =(1,0,47,KeyG,TypeChk,0)}	//G7sus4
	CASE(15){	Ptn_num =(2,0,70,KeyG,TypeChk,0)}	//G7

	CASE(16){	Ptn_num =(2,0,27,KeyC,TypeChk,0)}	//Cm7
	CASE(17){	Ptn_num =(2,0,142,KeyE+12,TypeChk,0)}	//Esus2/B [05712]+12-1 //Bsus4
	CASE(18){	Ptn_num =(1,0,47,KeyE,TypeChk,0)}	//E7sus4
	CASE(19){	Ptn_num =(1,0,27,KeyF,TypeChk,0)}	//Fm7
	CASE(20){	Ptn_num =(1,0,32,KeyG,TypeChk,0)}	//G9th omit3
	CASE(21){	Ptn_num =(1,0,29,KeyA,TypeChk,0)}	//Am add9

	CASE(22){	Ptn_num =(2,0,17,KeyA,TypeChk,0)}	//AM7
	CASE(23){	Ptn_num =(2,0,17,KeyC,TypeChk,0)}	//CM7
	CASE(24){	Ptn_num =(4,0,17,KeyA,TypeChk,0)}	//AM7

	CASE(25){	Ptn_num =(2,0,17,KeyGs,TypeChk,0)}	//G#M7
	CASE(26){	Ptn_num =(2,0,10,KeyAs,TypeChk,0)}	//A#
	CASE(27){	Ptn_num =(2,0,17,KeyDs,TypeChk,0)}	//D#M7
	CASE(28){	Ptn_num =(2,0,50,KeyD,TypeChk,0)}	//Dm7b5
	CASE(29){	Ptn_num =(2,0,73,KeyG,TypeChk,0)}	//G7b9
	CASE(30){	Ptn_num =(2,0,47,KeyG,TypeChk,0)}	//G7sus4
	CASE(31){	Ptn_num =(2,0,40,KeyAs,TypeChk,0)}	//A#sus4
	CASE(32){	Ptn_num =(2,0,27,KeyA,TypeChk,0)}	//Am7
	CASE(33){	Ptn_num =(4,0,12,KeyA,TypeChk,0)}	//AM9
	CASE(34){	Ptn_num =(2,0,16,KeyGs,TypeChk,0)}	//G#M6
	} //SWITCH

//  ↑------↑

	SWITCH(Trk_select){		//演奏エンジン呼び出し
	CASE(1){
			//演奏時間加算
			Part_ADD =Part_ADD+Ptn_num(0);
			Parthalf_ADD =Parthalf_ADD+Ptn_num(1);

			Sqrptn(Ptn_num);
	}
	CASE(2){
			Lyric =Lyricptn(Ptn_num);
			Padptn(Ptn_num);
	}
	CASE(3){	Ptn_num(4)= Ptn_num(4)+101;	Padptn(Ptn_num);}

	CASE(4){	Prsptn(Ptn_num);}
	CASE(5){
		IF(IA==3|IA==5|IA==7){	Prsptn(Ptn_num);}
		ELSE{		Rptn(Ptn_num);}
	}
	CASE(6){
		IF(IA==0|IA==8){	Prsptn(Ptn_num);}
		ELSE{		Rptn(Ptn_num);}
	}
	} //SWITCH

		} //FOR HA
	} //FOR IA
} //FOR


	Str Min_out= (Part_ADD*4+Parthalf_ADD)/Tempo;		//Str型出力
	Str Sec_out= (Part_ADD*4+Parthalf_ADD)%Tempo*60/Tempo;

	Str P_ADD_str = Part_ADD+Parthalf_ADD/4;
	Str Pf_ADD_str= Parthalf_ADD%4;

	Print({"演奏時間: "}+Min_out+{"分 "}+Sec_out+{"秒  "}+P_ADD_str+{","}+Pf_ADD_str+{"小節"});

	 
/* 
	//基本指定//

	Ptn_load = (0, 1, 2, 3);
	Ptn_load = (Ptn_load, -1);
	FOR(Int HA =0; Ptn_load(HA)!=-1 ; HA++){

	SWITCH(HA){
	CASE(0){	Ptn_num =(1,2,99,KeyC,TypeA,0)}
	CASE(1){	Ptn_num =(1,0,98,KeyC,TypeA,0)}
	CASE(2){	Ptn_num =(0,2,92,KeyC,TypeA,0)}
	CASE(3){	Ptn_num =(1,0,99,KeyC,TypeA,0)}
	}
*/
  
//リズムアルペジエイター// 
/*
	Array Rym_load;
	Array Rym_num;
	Int Chd_num= 0;

FOR(Int Rym_select=1; Rym_select<= 5; Rym_select++){	//リズムセレクト

//IF(Rym_select==2){Rym_select = 3;}	//skip

	SWITCH(Rym_select){
	CASE(1){	Track =12;	Channel =10;	Time=TM_set;		Chd_num= -100;}	//BD
	CASE(2){	Track =13;	Channel =10;	Time=TM_set;		Chd_num= -200;}	//HH
	CASE(3){	Track =14;	Channel =10;	Time=TM_set;		Chd_num= -300;}	//Sn
	CASE(4){	Track =15;	Channel =10;	Time=TM_set;		Chd_num= -400;}	//Cym
	CASE(5){	Track =16;	Channel =10;	Time=TM_set+Dlyptn(3);	Chd_num= -100;}	//BD
	}

		Rym_load = (	21, 22, 23, 24,	21, 22, 23, 24,	21, 22, 23, 24,	21, 22, 23, 24,	21, 22, 23, 24);

	Rym_load = (Rym_load, -1);
	FOR(Int HB =0; Rym_load(HB)!=-1 ; HB++){

		Rym_num =(1,0,-Rym_load(HB)+Chd_num);	//モジュール変更/ 1小節

		Apgptn(Rym_num);

		//Print(Rym_num);

		} //FOR
	} //FOR
} //FOR
*/