TrackName ={"ポリコード ver.1.31"} 
Copyright ={"庚申works"}

/*
	※'12 3/25 夜 ver.1.31に修正しています。8小節だけ追加しました。

	※注意  演奏までのコンパイルに時間がかります、、。

	TWでもサクラ純正でもあまり差がでないように、組んでます。
	読み込んだコード順は、リリックを通してデバッグ出力しています。

	サクラで演奏する際、表示 - 下側タブの表示 を入れると、
	コード情報の流れが見えます。
	TWでも見えるのですか、構成音が表示されません。、

	リリックの出力データ例です。

	               コード機能             コード    MML構成音
	(2:1:0) Type:0 KeyIn:C/T      M_Key:0 GM7/CM7 | o4cegb`g`b``d``f#



	曲の構成です。
	コードは4つしか使ってません。いずれも分数コードです。
	アッパーストラクチャートライアドでもないし、なんて呼んだらよいのか、、
	自分でもわかりません。

	//コード        GM7/CM7                         AbM7/Cm7
	//コード機能    /T                              SDM/TM

	//              Am7/AbM7                        BbM7/Gm7
	//              T/TM                            SD/DM

	分数コード上部は、クリシェ構造らしきものになっています。基本サブドミ[SD]終止です。、
	分数コード下部は、基本的に同主調の動きで一箇所だけドミナントマイナー[DM]を使用して
	謎な雰囲気を出してます。



	各トラックの役割です。
	TR1,TR2はシーケンシャルフレーズです。アルペジエイターと思ってください。
	呼び出されたポリコードを単音で其々、ランダム出力してます。、一応音高に合わせて
	Panも目まぐるしく動きます。

	コード転回を把握しやすくするため、コードチェンジする前に、倍速処理をかけてます。
	...実はココのランダム出力が、見えない部分で一番手が掛かってたりします、余談です。、


	TR3,TR4はパッドです。TR4のみDrop2,3扱いです。Panを左右に振って広がりをつけてます。


	TR11,TR12はベース音です。三角波の低音部です。中央付近に配置しダブルトラックで鳴らし、
	厚みを持たせています。



	仕組みです。
	最初にアップしたものの修正版にあたり、今となっては殆ど別物ですので。、
	簡単な解説だけ、。
	ソースを見れば解るかもしれませんが、(3000行近くあります、、)
	コードを数字で指定すると、各トラックがコードに沿って鳴るようにしてあります。、


	17 - M7型、27 - m7型とそれぞれあらかじめ用意し、
	例えば、17 KeyC を指定すると、CM7のコードを拾って鳴ります。なので、
	GM7/CM7は、71717 KeyC と入力すると、その構成音を拾って各トラックに出力します。

	-- ポリコード上部の指定は Gは半音階で7つめなので、717 GM7と、かなり自分仕様ですね --


	Ary_ChdA=(      71717,  ,       ,       ,       81727,  ,       ,               );
	Ary_KeyA=(      KeyC,   ,       ,       ,       KeyC,   ,       ,               );
	Ary_ModA=(      0,      ,       ,       ,       ,       ,       ,               );

	//コード        GM7/CM7                         AbM7/Cm7
	//コード機能    /T                              SDM/TM

	こんな感じに4小節分指定しています。配列数は半小節単位なので8つ。、、若干見辛い
	他にいい方法がないんです。..


	ちなみに考えられるコード型はがんばって網羅しました、。
	コード型が書かれているあたりは、コード転回のコメントがあるので参考になるかも、、
	スケール型は、構成音のローテーション機能が実装がまだできていません、。
	モード(スケール、旋法)はいろいろなのがあって、多分網羅は無理な気がしてます。



	最後に、、。
	ダウンロードならびに、長文にお付き合い有難うございます。
	スクリプトを修正するのに疲れつつあるので、とりあえずアップという運びになりました。
	曲を生み出す力量まで回らなかった・・。

	構造化エディタ対応なので、どのようなプログラムになっているかはエディタを通せば
	解り易いかも知れません。



	与太話

	本当は、きちっと説明ができればよいのだけれど、かなり多くの機能が実装されてます。
	最終的には、コード入れたら勝手に演奏を目的としています、。
	ただ、現時点では使いこなしに難ありと感じております、、。

	需要があるようならば、コードチェッカーみたいな簡易版のほうが良いかも。、
*/
	 
//TrackName ={"コードコール　ver1.56"}// 
//Copyright ={"庚申works"}//

//関数・変数部---------//

/*				KeyC
	[17]	コード			CM7
	[-11]	スケール		C Ionian
	[517]	ヲンコード		CM7/F
	[-1117]	モード - Sqrptnのみ	C Ionian/M7
	[72717]	分数コード		CM7/Gm7
*/
	
Function Chdcall(	Array Ptn_type){ 

		Int Chd_type		=Ptn_type(0);		//コードタイプ
		Int Shift_key_type 	=Ptn_type(1);		//キー
		Int Module_type		=Ptn_type(2);		//発音エンジン指定読み込み
		Int Master_key_type	=Ptn_type(3);		//転調キー


//出力データ
//Function Apgptn(	Int Part,		Ptn(0)
//                 	Int Parthalf,		Ptn(1)
//                  	Int Chd_typertn,	Ptn(2)
//                   	Int Shift_keyrtn,	Ptn(3)
//                  	Int Module_typertn,	Ptn(4)
//                 	Int Master_keyrtn ){	Ptn(5)

//	Chdcall(	Ptn(2),Ptn(3),Ptn(4),Ptn(5) );
//
// 外のエンジンから呼び出している
//}

//	書き換え変数	...ptn.h初期化
//		Array Elm_chd=();
//		Int Master_key= 0;
//		Int Shift_key = 0;
	
	//---[初期設定] 

	Int Module_num_sw = Module_num;	//モジュール選択

	Int Chd_invert = 0;	//コードヴォイシング選択
				//[0, 2:drop2, 3:drop3, 4:drop1&3, 5:drop2&3, 6:invert]

//	Int Btm_tmp = 0;	//ヲンコード変換テンプ
				//Chd_typeの記述、117でCM7/D、1117でCM7/B

	Int Chd_rev = 0;	//コードリバースイッチ
	Int Rev_tmp = 0;	//リバーステンプ
	Int Shift_sw= 0;	//シフトスイッチ

	Int Chd_type_btm =0;

	Str Chd_str  ={};
	Str Control_panel_str= Cpl_str;	//コントロールパネル

	Int Flag_Mode= 0;
	Int LPi_num =1;		//ループ回数

	Array Elm_Chord= ();
	Array Elm_Mode = ();

	Int Mode_type = 0;
	Int Chord_type= 0;

 
	//コード指定---事前処理 

	//ボトム分離
	IF( 110<=Chd_type & Chd_type< 1300 ){	Flag_Mode =1;}

	//モード分離

	IF(Chd_type<= -1110){	Flag_Mode =2;}

	//ポリコード分離

	IF(11010<= Chd_type){	Flag_Mode =3;}


	SWITCH(Flag_Mode){
	CASE(1){
		Chd_type_btm = Chd_type/100;	Chd_type= Chd_type%100;
	}
	CASE(2){
		IF(Module_num_sw==10 | Module_num_sw==70){
			Chord_type = -Chd_type%100;	Mode_type = Chd_type/100%100;
			LPi_num =2;
		}
		ELSE{	Chd_type =-Chd_type%100;}
	}
	CASE(3){
		Chord_type = Chd_type%100;	Mode_type= Chd_type/100%100;
		LPi_num =2;			Chd_type_btm = Chd_type/10000;
	}
	DEFAULT{
		Chd_type =Chd_type%100;
	}
	} //SW
 
//デバック 
//Print({Chd_type:}+Chd_type+{Chord_type:}+Chord_type+{Mode_type:}+Mode_type+{Chd_type_btm:}+Chd_type_btm);
 
	FOR(Int LPi=0; LPi< LPi_num; LPi++){ 

		IF(LPi_num==2){
			IF(LPi==0){	Chd_type = Chord_type;}
			IF(LPi==1){	Chd_type = Mode_type;}
		}
	
IF(-100<Chd_type&Chd_type< -10){	//スケール 

	Shift_sw= 1;
	
	SWITCH(Chd_type){	// 構成スケール[-11] -> [-99] 


	//コードにスケールを割り当てる場合、例えばKey inＣメジャーの曲でA7thコードが使われる際、
	//ドミナント7thコードに親近性のあるＡオルタード・スケールを割り当てる

	//[アボイドノートはパッセージのみ使用可能なので基本は省いています]

	// 0:Tonic, 1:m2, 2:M2, 3:m3, 4:M3, 5:P4, 6:-5, 7:P5, 8:m6, 9:M6, 10:m7, 11:M7, 12:P8
	
// メジャー・スケール 

	//ダイアトニック・スケール、チャーチ・モード
	
	CASE(-11){	Chd_str ={ Ionian}; 
	Elm_chd = (	0, 2, 4, 7, 9, 11 );	//, 5 );

	//メジャー・キーのトニックコード
	}
	//(	0, 2, 5, 7, 9 )
 
	CASE(-12){	Chd_str ={ Dorian}; 
	Elm_chd = (	0, 2, 3, 5, 7, 10 );	//, 9 );

	//マイナーキーの楽曲では多用
	}
 
	CASE(-13){	Chd_str ={ Phrygian}; 
	Elm_chd = (	0, 3, 5, 7, 10 );	//, 1, 8 );

	//メジャー?m7,マイナー?m7
	}
 
	CASE(-14){	Chd_str ={ Lydian}; 
	Elm_chd = (	0, 2, 4, 6, 7, 9, 11 );

	//メジャーキーにおけるサブドミナント
	//＃11(♭5)以外はイオニアンとまったく同じためトニックも
	//Ionianに比べテンション感が高い
	}
 
	CASE(-15){	Chd_str ={ Mixolydian}; 
	Elm_chd = (	0, 2, 4, 7, 9, 10 );	//, 5 );

	//メジャーキーのドミナント
	//第7音がm7になる以外はIonianと同じ
	}
 
	CASE(-16){	Chd_str ={ Aeolian}; 
	Elm_chd = (	0, 2, 3, 5, 7, 10 );	//, 8 );

	//Natural Minor Scale [Keyin A]
	//マイナー・キーのトニック
	}
 
	CASE(-17){	Chd_str ={ Locrian}; 
	Elm_chd = (	0, 3, 5, 6, 8, 10 );	//, 1 );

	//m7♭5
	}
  
//メロディック・マイナー・スケール 
	//SDMへ適用
	
	CASE(-21){	Chd_str ={ Melodic Minor}; 
	Elm_chd = (	0, 2, 3, 5, 7, 11 );	//, 9 );

	//上行するメロディーのみ、下行はナチュラル・マイナー
	}
 
	CASE(-22){	Chd_str ={ Dorian }+CHR(33267)+{2};	//Dorian ♭2 
	Elm_chd = (	0, 3, 5, 7, 10 );	//, 1, 9 );
	}
 
	CASE(-23){	Chd_str ={ Lydian  ♯5}; 
	Elm_chd = (	0, 2, 4, 6, 8, 11 );	//, 9 );
	}
 
	CASE(-24){	Chd_str ={ Lydian Dominant}; //Lydian ♭7 
	Elm_chd = (	0, 2, 4, 6, 7, 10 );	//, 9 );
	}
 
	CASE(-25){	Chd_str ={ Mixolydian }+CHR(33267)+{6};	//Mixolydian ♭6 
	Elm_chd = (	0, 2, 4, 7, 10 );	//, 5, 8 );
	}
 
	CASE(-26){	Chd_str ={ Aeolian }+CHR(33267)+{5}; //Locrian #2 
	Elm_chd = (	0, 2, 3, 5, 6, 8, 10 );

	//?m7(♭5) SDMの根拠
	}
 
	CASE(-27){	Chd_str ={ Super Locrian}; 
	Elm_chd = (	0, 3, 6, 8, 10 );	//, 1, 4 );
	}
  
//ハーモニック・マイナー・スケール 
	
	CASE(-31){	Chd_str ={ Harmonic Minor}; 
	Elm_chd = (	0, 2, 3, 5, 7, 11 );	//, 8 );
	}
 
	CASE(-32){	Chd_str ={ Locrian #6}; 
	Elm_chd = (	0, 3, 5, 6, 10 );	//, 1, 9 );
	}
 
	CASE(-33){	Chd_str ={ Ionian ♯5}; 
	Elm_chd = (	0, 2, 3, 8, 10 );	//, 5, 9 );
	}
 
	CASE(-34){	Chd_str ={ Dorian ♯4}; 
	Elm_chd = (	0, 2, 4, 6, 7, 11 );	//, 9 );
	}
 
	CASE(-35){	Chd_str ={ Harmonic Minor Perfect 5th Below}; 
	Elm_chd = (	0, 1, 4, 7, 10 );	//, 5, 8 );

	//Phrygian Major
	//スパニッシュ
	}
 
	CASE(-36){	Chd_str ={ Lydian  ♯2}; 
	Elm_chd = (	0, 4, 6, 7, 9, 11 );	//, 3 );
	}
 
	CASE(-37){	Chd_str ={ Super Locrian }+CHR(33267)+{7}; 
	Elm_chd = (	0, 3, 6, 8, 9 );	//, 1, 4 );
	}
  
//ブルー・ノート・スケール 

	//Ｃメジャー・ペンタトニックでのフレージングに、
	//ちょろっと短3度を織り交ぜる使い方が効果的　->　Major Blues

	//♭3と3の間が本当のブルース構成音となる
	//ジミヘンコードE7(#9)　７R-3th-7th-♯9(=m3ｔｈ)
	
	CASE(-40){	Chd_str ={ Blue Note}; 
	Elm_chd = (	0, 2, 3, 5, 6, 7, 9, 10 );

	//マイナー・ペンタトニックの短3度及び短7度をブルー・ノートとし，
	//減5度のブルー・ノートを加え，2度と6度を補ったスケール
	//結果的にドリアン・スケールに減5度を補ったもの
	//主音の半音上と下以外の音、3度、5度の半音上を除いたもの
	}
 
	CASE(-41){	Chd_str ={ Major Blues}; 
	Elm_chd = (	0, 2, 3, 4, 7, 9 );
	}
 
	CASE(-42){	Chd_str ={ Blues}; 
	Elm_chd = (	0, 3, 5, 6, 7, 10 );

	//マイナー・ブルース・スケール
	//Minor Pentatonicにブルーノートである♭5を加える
	}
 
	CASE(-45){	Chd_str ={ Minor Pentatonic + 2, ♭5}; 
	Elm_chd = (	0, 2, 3, 5, 6, 7, 10 );
	}
 
	CASE(-46){	Chd_str ={ Minor Pentatonic + 2, ♭5, 6}; 
	Elm_chd = (	0, 2, 3, 5, 6, 7, 9 );
	}
 
	CASE(-44){	Chd_str ={ Minor Pentatonic + 2, 6}; 
	Elm_chd = (	0, 2, 3, 5, 7, 9 );
	}
  
//ペンタトニック・スケール 
	
	CASE(-50){	Chd_str ={ Major Pentatonic(ヨナ抜き)}; 
	Elm_chd = (	0, 2, 4, 7, 9 );

	//呂スケール、宮調式
	//明るい曲調の演歌、流行歌
	//スコットランド民謡
	}
 
	CASE(-51){	Chd_str ={ ヨナ抜き短}+CHR(35257)+CHR(35403);	//ヨナ抜き短音階 
	Elm_chd = (	0, 2, 3, 7, 8 );

	//平調子
	//ナチュラル・マイナー4番目(P4)と7番目(m7)の音を抜いたもの
	//4番目の音から始めた転回型を雲井スケール
	//2番目の音から始めた転回型を岩戸スケール
	//明治〜昭和の演歌、流行歌
	}
 
	CASE(-52){	Chd_str ={ Minor Pentatonic}; 
	Elm_chd = (	0, 3, 5, 7, 10 );

	//陽スケール、羽調式
	//ブルース・ペンタトニック
	//メジャー・ペンタトニックを6度から並べ直したもの
	}
 
	CASE(-54){	Chd_str ={ 雲井スケ}+CHR(33115)+{ル}; 
	Elm_chd = (	0, 1, 5, 7, 8 );
	}
 
	CASE(-55){	Chd_str ={ 岩戸スケ}+CHR(33115)+{ル}; 
	Elm_chd = (	0, 1, 5, 6, 10 );
	}
 
	CASE(-60){	Chd_str ={ 陰スケ}+CHR(33115)+{ル}; 
	Elm_chd = (	0, 1, 5, 7, 10 );
	}
 
	CASE(-61){	Chd_str ={ 都節スケ}+CHR(33115)+{ル}; 
	Elm_chd = (	0, 1, 5, 7, 8 );
	}
 
	CASE(-62){	Chd_str ={ 律スケ}+CHR(33115)+{ル、商}+CHR(37554)+{式};	//商調式 
	Elm_chd = (	0, 2, 5, 7, 10 );
	}
	//sus4へ適用
 
	CASE(-63){	Chd_str ={ 角}+CHR(37554)+{式}; //角調式 
	Elm_chd = (	0, 3, 5, 8, 10 );
	}
 
	CASE(-64){	Chd_str ={ 徴}+CHR(37554)+{式};　//徴調式 
	Elm_chd = (	0, 2, 5, 7, 9 );
	}
	//sus4へ適用
	//バスク地方のペンタトニック??
 
	CASE(-66){	Chd_str ={ 琉球スケ}+CHR(33115)+{ル}; 
	Elm_chd = (	0, 4, 5, 7, 11 );
	}
  
//シンメトリカル,ドミナント・スケール 
	
	CASE(-70){	Chd_str ={ Chromatic}; 
	Elm_chd = (	0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 );

	//半音階
	}
 
	CASE(-72){	Chd_str ={ Whole Tone}; 
	Elm_chd = (	0, 2, 4, 6, 8, 10 );

	//調性はハッキリしない、主にドミナント
	//指板上では市松模様
	}
 
	CASE(-74){	Chd_str ={ Mixolydian sus4}; 
	Elm_chd = (	0, 2, 5, 7, 9, 10 );	//, 4 );

	//sus4へ適用
	//アボイドノートを入れ換えたもの
	}
 
	CASE(-75){	Chd_str ={ Bebop}; 
	Elm_chd = (	0, 2, 4, 5, 7, 8, 9, 11 );

	//Abを追加したメジャースケール
	//II-Vのどちらも適用できる(バッキングコードは必要)
	}
 
	CASE(-76){	Chd_str ={ Diminished}; 
	Elm_chd = (	0, 2, 3, 5, 6, 8, 9, 11 );

	//ディミニッシュ・コードへ適用
	}
 
	CASE(-77){	Chd_str ={ Combination Of Diminished}; 
	Elm_chd = (	0, 1, 3, 4, 6, 7, 9, 10 );

	//コンディミ Dominant Diminished
	//ハーフ・ホールトーン

	//ドミナントへ適用(II7には適用しない)
	//半音-全音と交互に並ぶ
	//ドミナント・セブンス（Tonic・M3・P5・m7）と、
	//テンション（♭9・#9・#11・13）を含む
	}
 
	CASE(-78){	Chd_str ={ Altered}; 
	Elm_chd = (	0, 1, 3, 4, 6, 8, 10 );

	//Super Locrianと同じ
	//ドミナントやディミニッシュへ対応
	//メジャースケールのトニック以外の音を全て半音下げた構造
	//ドミナントのトーン(Tonic・M3・m7)と、
	//全てのオルタード・テンション（♭9・#9・#11・♭13）を含む
	}
  
//エキゾティック・スケール 
	
	CASE(-80){	Chd_str ={ Spanish 8 note}; 
	Elm_chd = (	0, 1, 3, 4, 5, 7, 8, 10 );

	//ミの旋法、フラメンコ

	//フリジアン+M3度
	//スパニッシュ・8ノートからm3を引いた音階、
	//Harmonic Minor Perfect 5th Belowをスパニッシュ・スケールと呼ぶ
	}
 
	CASE(-81){	Chd_str ={ Hungarian}; 
	Elm_chd = (	0, 3, 4, 6, 7, 9, 10 );

	//メジャーコードに対応
	}
 
	CASE(-82){	Chd_str ={ Hungarian Minor}; 
	Elm_chd = (	0, 2, 3, 6, 7, 8, 11 );	//9

	//ジプシー、ダブル・ハーモニック・マイナー

	//アラビックの4番目から始めたのと同じ構成
	}
 
	CASE(-82){	Chd_str ={ Hungarian Minor}; 
	Elm_chd = (	0, 2, 3, 6, 7, 9, 11 );

	//メロディック・マイナーの第4音を半音上げる
	}
 
	CASE(-85){	Chd_str ={ Gypsy}; 
	Elm_chd = (	0, 1, 4, 5, 7, 8, 11 );

	//Harmonic Minor Perfect 5th Belowの第7音を半音上げる
	}
 
	CASE(-88){	Chd_str ={ Neapolitan Major}; 
	Elm_chd = (	0, 1, 3, 5, 7, 9, 11 );

	//Major Scale から2と3を半音下げたScale
	}
 
	CASE(-89){	Chd_str ={ Neapolitan minor}; 
	Elm_chd = (	0, 1, 3, 5, 7, 8, 11 );

	//Major Scale から2と3と6を半音下げたScale
	}
 
	CASE(-90){	Chd_str ={ Arabic}; 
	Elm_chd = (	0, 1, 4, 5, 7, 8, 11 );

	//ダブル・ハーモニック・スケール

	//Harmonic Minor Perfect 5th Belowとは第7音（M7）が違うだけ
	}
 
	CASE(-91){	Chd_str ={ Hindu}; 
	Elm_chd = (	0, 2, 4, 5, 7, 8, 10 );

	//[インド風ではないらしい]
	}
   
	}	//SWITCH(Chd_type) 
} //IF
  
IF( -10<Chd_type&Chd_type< 0){	//特殊コード 

	Shift_sw= 1;
	
SWITCH(Chd_type){ 
	
//クォータル・ハーモニー (4度) 
//Mメジャー,Mmメロディックマイナー,Hmハーモニックマイナー
/*
	CASE(){	Chd_str ={qua M7};
	Elm_chd = (	0, 11, 16);//, 5);
	}	//MI,  HmbIII

	CASE(){	Chd_str ={qua m7};
	Elm_chd = (	0, 5, 10, 15);
	}	//MII,III,?,?,  MmII,Mm?,  HmII

	CASE(){	Chd_str ={qua M7 add4};
	Elm_chd = (	0, 6, 11, 16);
	}	//M?,  MmbIII

	CASE(){	Chd_str ={qua 7};
	Elm_chd = (	0, 10, 16);//, 5);
	}	//M?,  Mm?,  Hm?

	CASE(){	Chd_str ={qua Mm7};
	Elm_chd = (	0, 5, 11, 15);
	}	//MmI,  HmI

	CASE(){	Chd_str ={qua 7 add4};
	Elm_chd = (	0, 6, 10, 16);
	}	//Mm?,  Hmb?

	CASE(){	Chd_str ={qua m7 b4};
	Elm_chd = (	0, 4, 10, 15);
	}	//Mm?

	CASE(){	Chd_str ={qua m7 add4};
	Elm_chd = (	0, 6, 10, 15);
	}	//Hm?

	CASE(){	Chd_str ={qua 6 b4};
	Elm_chd = (	0, 4, 9, 15);
	}	//Hm?
*/
 
//クインタル・ハーモニー (5度) 
//Mメジャー,Mmメロディックマイナー,Hmハーモニックマイナー
/*
	CASE(){	Chd_str ={qui 13};
	Elm_chd = (	0, 7, 14, 21);
	}	//MI,II,?,?,  MmI,Mm?,  HmI,Hm?

	CASE(){	Chd_str ={qui b13(b9)};
	Elm_chd = (	0, 7);//, 13, 20);
	}	//MIII,  Hm?

	CASE(){	Chd_str ={qui b13};
	Elm_chd = (	0, 7, 14, 20);
	}	//M?,  Mm?,

	CASE(){	Chd_str ={qui b13(b5,b9)};
	Elm_chd = (	0, 6, 20);// 13);
	}	//M?,  Mm?,  Hm?

	CASE(){	Chd_str ={qui 13(b9)};
	Elm_chd = (	0, 7, 21);// 13);
	}	//MmII

	CASE(){	Chd_str ={qui 13(#5)};
	Elm_chd = (	0, 8, 15, 21);
	}	//MmbIII,  HmbIII

	CASE(){	Chd_str ={qui b13(b5)};
	Elm_chd = (	0, 6, 14);//, 20);
	}	//Mm?

	CASE(){	Chd_str ={qui 13(b5,b9)};
	Elm_chd = (	0, 6, 21);// 13);
	}	//HmII

	CASE(){	Chd_str ={qui 13(#9)};
	Elm_chd = (	0, 7, 15, 21);
	}	//Hmb?
*/
  
	}	//SWITCH(Chd_type) 
} //特殊コード

  
IF( 0< Chd_type&Chd_type< 10){	//テストコード 
	
SWITCH(Chd_type){ 
	
	CASE(1){ //Sqrptn.hテスト 

	Lyric={"Sqrptnテスト Sqrptn(4,0,1);"};

	Shift_key = 0;
	Elm_chd = (0, 2, 5, 7);
	VCO = 90;	Gate = 60;	Tim = 0;

	Marks =24;	// 1小節の音符数、TimeBase=120であれば240で割れる数字のみ
	Accent= 3;	//アクセントカウント
//	Octave = 2;	//[0,1,2,3]
	Array Oct_chg= (1, 3, 0, 2);	//ヲクターブパターン
	Array Hm_ary = (0, 4, 7   );	//ハーモニー付加

	Rand_sw = 1;	//ランダムパターン選択[1,2,3]
	Pan_Assign =1;	//ヲートパンアサイン[0,1]
	Double_skip =0;	//最終節加速SkipSW[1]であれば[Marks]は480で割れる数字まで可

	Chd_invert =0;
	Chd_rev =0;

	}
 
	CASE(3){ //Padptn.hテスト 

	Lyric={"Padptnテスト Padptn(4,0,3)"};

	Shift_key =Shift_key+12;
	Elm_chd = (	0, 2, 5, 7, 12,  14, 17, 19);

	VCO = 80;	Gate =99;	Tim = 1;

	Chd_invert =0;
	}

 
	CASE(4){ //Prsptn.hテスト 

	Lyric={"Prsptnテスト Prsptn(4,0,4)"};

	Shift_key = 0;
	Elm_chd = (	0, 2, 5, 7, 9);

	Marks = 12;	//[Marksは240で割れる数]

	// Bt_mrks/[-1][1][0][10]から選択、Elm_chg/コード構成音から選択、Oct_chg/ヲクターブ変更
	Bt_mrks= (	1, 1,10, 1,   1, -1, 0, 1,   1, 1, 1,10);
	Elm_chg= (	0, 1,  , 3,   0,  1, ,  3,   0, 1, 2,  );
	Oct_chg= (	1, 3,  , 0,   2,  1, ,  0,   3, 0, 1,  );

	Elm_rdmsw =0;			//コードランダムSW、[Elm_chg]を指定しない場合
	Oct_rdmsw =0;			//ヲクターブランダムSW、[Oct_chg]を使用しない場合
	Octave = 3;			//[Octave]範囲指定、[Oct_rdmsw =1]のみ

	FR_sw = 0;		//Front[0]-Rear[1]切換

	VCO = 100;	Gate = 50;	Tim = 0;
	Chd_invert =0;	Chd_rev =0;
	}
 
	CASE(5){ //Apgptn.hテスト--Clav poly syn 

	Lyric={"Apgptnテスト--Clav設定 / Sgltgr =0; Apgptn(4,0,5)"};

	Shift_key =0;
	Elm_chd = (	0, 5, 7, 12);
	VCO =90;	Gate = 75;	Tim = 3;

	Bt_mrks= (	1, 0, 0, 1,	10, 0, 0,-1);		//配列を4つ以下にしない
	Bt_Keys= (	0, 0, 0, 0,	 0, 0, 0, 0);		//キーコントロール

	Sgltgr =0;	  //[0(polysyn),1(monosyn)]
	Chd_invert =4;

	//Bt_mrks ---
	//[1]で鳴る、[0]は休符、[10]が続くとスラー、[2]-[8]でティドル、[-1]-[-8]で裏打ちティドル
	//[1][2][-1]で強打、[11][12][-11]で弱打
	//※ティドルの無理な指定は[Length_Error]を出力、[480/SizeOf(Bt_mrks)*2]
	}
 
	CASE(6){ //Apgptn.hテスト--Bass mono syn 

	Lyric={"Apgptnテスト--Bass設定 / Sgltgr =1; Unison_sw =0; Apgptn(4,0,6)"};

	Shift_key =-12;
	VCO =80;	Gate = 80;	Tim = 0;

	Sgltgr =1;
	Unison_sw =0;			//ユニゾンスイッチ

	Bt_mrks= (	-1, 1 ,2,-1);	//配列を4つ以下にしない
	Bt_Keys= (	 0, 0, 0, 0);	//キーコントロール
	Bt_slide= (	0, 7);		//単音スライド
	}
 
	CASE(7){ //Apgptn.hテスト--Bass mono syn 

	Lyric={"Apgptnテスト--リフ設定/ Sgltgr =1; Unison_sw =1; Apgptn(4,0,7)"};

	Shift_key =-12;
	VCO =80;	Gate = 80;	Tim = 0;

	Sgltgr =1;
	Unison_sw =1;	//Bt_marks(*)=2 以上はユニゾンせず、単音スライド

	Bt_mrks= (	1, 1, 1, 1,	1, 1, 1, 1);
	Bt_Keys= (	7, 7, 9, 7,	10, 7, 9, 7);	//ハーモニー指定
	Bt_slide= (	0);
	}
  
	}	//SWITCH(Chd_type) 
} //テストコード

  
IF(10 <=Chd_type){	//コード 

	Shift_sw= 1;
	
SWITCH(Chd_type){ // 構成コード[10] -> [99] 

	//ヲンコード指定の仕方
	//		217でCM7/D、	417でCM7/E、	1117でCM7/B
	//		270で7th/D、	470で7th/E、	1170で7th/B
	
//メジャー 

 
	CASE(10){	Chd_str ={M}; 
	Elm_chd = (	0, 4, 7);
	}
 
	CASE(12){	Chd_str ={M9}; 
	Elm_chd = (	0, 4, 7, 11, 14);
	}
 
	CASE(13){	Chd_str ={69th}; 
	Elm_chd = (	0, 4, 7, 9, 14);
	}
 
	CASE(14){	Chd_str ={M add2}; 
	Elm_chd = (	0, 2, 4, 7);
	}
 
	CASE(16){	Chd_str ={6th}; 
	Elm_chd = (	0, 4, 7, 9);
	}
 
	CASE(17){	Chd_str ={M7}; 
	Elm_chd = (	0, 4, 7, 11);
	}
 
	CASE(19){	Chd_str ={M add9}; 
	Elm_chd = (	0, 4, 7, 14);
	}

 
//マイナー 
 
	CASE(20){	Chd_str ={m}; 
	Elm_chd = (	0, 3, 7);
	}
 
	CASE(22){	Chd_str ={m9};	//m7(9) 
 	Elm_chd = (	0, 3, 7, 10, 14);
	}
 
	CASE(23){	Chd_str ={m69}; 
	Elm_chd = (	0, 3, 7, 9, 14);
	}
 
	CASE(24){	Chd_str ={m add4}; 
	Elm_chd = (	0, 3, 5, 7);
	}

 
	CASE(26){	Chd_str ={m6}; 
	Elm_chd = (	0, 3, 7, 9);
	}
 
	CASE(27){	Chd_str ={m7}; 
	Elm_chd = (	0, 3, 7, 10);
	}
 
	CASE(28){	Chd_str ={mM7}; 
	Elm_chd = (	0, 3, 7, 11);
	}
 
	CASE(29){	Chd_str ={m add9}; 
	Elm_chd = (	0, 3, 7, 14);
	}
 
//パワー(omit3) 
 
	CASE(30){	Chd_str ={Unison}; 
	Elm_chd = (	0, 12);
	}
 
	CASE(33){	Chd_str ={5th omit3}; 
	Elm_chd = (	0, 7);
	}
 
	CASE(36){	Chd_str ={7th omit3}; 
	Elm_chd = (	0, 7, 10);
	}
 
	CASE(39){	Chd_str ={9th omit3}; 
	Elm_chd = (	0, 7, 10, 14);
	}
 
//サスフォー 
/*	G7sus4 -> G7
	SD        D
	AM7 -> A#sus4　->　//どこにでも飛べる

	BbM7 -> G7sus4
	SDM     SD
	Db7 -> G7sus4 -> FM7
	D      SD        SD

	Dm7/G -> E7sus4 -> Fm7 -> G7sus4 -> FM7
	SD,D               SDM    SD        SD

 	B7→	E7sus4→E7→	Am	//マイナー定番ライン[Keyin A]
	2D	SD	D	T

	CM7 -> Bsus4[Esus2/B] -> E7sus4 -> Fm7	//変則
*/
 
	CASE(40){	Chd_str ={sus4}; 
	Elm_chd = (	0, 5, 7);
	}
 
	CASE(42){	Chd_str ={sus2}; 
	Elm_chd = (	0, 2, 7);
	}
 
	CASE(47){	Chd_str ={7sus4}; 
	Elm_chd = (	0, 5, 7, 10);
	}
 
	CASE(49){	Chd_str ={sus4 add9}; 
	Elm_chd = (	0, 5, 7, 14);
	}
 
//♭5 ハーフディミニッシュ 

/*	D#m7b5 -> Dm7
	F#m7b5 -> FM7

	半音上のハーフディミニッシュからサブドミナントへ
*/
 
	CASE(50){	Chd_str ={m7b5};	//halfdim 
	Elm_chd = (	0, 3, 6, 10);
	}
 
	CASE(51){	Chd_str ={Mb5}; 
	Elm_chd = (	0, 4, 6);
	}
 
	CASE(57){	Chd_str ={7b5}; 
	Elm_chd = (	0, 4, 6, 10);
	}
 
	CASE(59){	Chd_str ={9b5}; 
	Elm_chd = (	0, 4, 6, 10, 14);
	}
 
//ディミニッシュ 

/*	近似コード構成音
		7	11	2	5	G7
		8	11	2	5	G#dim7

	dim ⇔ 7 代理コード変換(上下で構成音が近いため)
	dim [F   G#  B   D ] [F#  A   C   D#] [G   A#   C#   E ]	[代理可能グループ]
	 7  [E]  G  [A#] C#  [F]  G# [B]  D   [F#] A   [C]   D#		7th裏コード[F#][C]

	G7であれば、[F   G#  B   D ]dim7どれでも可


	コードモーションパターン

		CM7	C#dim7	Dm7	//パッシング
		CM	D#dim7	Dm7

		Dm7	D#dim	C6/E	F6	F#dim	C6/G
		SD		T	SD		T

		Dm7	G7	Cdim	C6	//装飾
		SD	D		T
		Dm7	Bb7	Cdim	CM7
		SD	SDM		T
*/
 
	CASE(60){	Chd_str ={dim}; 
	Elm_chd = (	0, 3, 6);
	}
 
	CASE(67){	Chd_str ={dim7}; 
	Elm_chd = (	0, 3, 6, 9);
	}
 
//セブンス 

/*	セカンダリードミナント
	D7 -> G7 -> CM7

	裏コードからドミナント
	C#7 -> CM7
	[G7]
*/
 
	CASE(70){	Chd_str ={7th}; 
	Elm_chd = (	0, 4, 7, 10);
	}
 
	CASE(73){	Chd_str ={7b9}; 
	Elm_chd = (	0, 4, 7, 10, 13);
	}
 
	CASE(74){	Chd_str ={9th};	//7(9) 
	Elm_chd = (	0, 4, 7 10, 14);
	}
 
	CASE(75){	Chd_str ={7#9};	//ジミヘンコード 
	Elm_chd = (	0, 4, 7, 10, 15);
	}
 
	CASE(76){	Chd_str ={7(11)}; 
	Elm_chd = (	0, 4, 7, 10, 17);
	}
 
	CASE(77){	Chd_str ={7#11}; 
	Elm_chd = (	0, 4, 7, 10, 18);
	}
 
	CASE(78){	Chd_str ={7b13}; 
	Elm_chd = (	0, 4, 10, 20);
	}
 
	CASE(79){	Chd_str ={7(13)}; 
	Elm_chd = (	0, 4, 10, 21);
	}
 
//#5 ヲーギュメント 

/*	近似コード構成音
		0	4	8		CAug
		0	4	7		CM
	9	0	4			Am

		1	4	8		C#m
			4	8	11	EM


	コードモーションパターン

		CM	0	CAug	-3	Am
		CM	0	CAug	+1	C#m
		CM	0	CAug	+4	EM

		Am	+3	CAug	+1	C#m
		Am	+3	CAug	+4	EM

		C#m	-1	CAug	+4	EM
*/
 
	CASE(80){	Chd_str ={aug}; 
	Elm_chd = (	0, 4, 8);
	}
 
	CASE(81){	Chd_str ={augM7};	//M7#5 
	Elm_chd = (	0, 4, 8, 11);
	}
 
	CASE(82){	Chd_str ={aug m7};	//m7#5 
	Elm_chd = (	0, 3, 8, 10);
	}
 
	CASE(83){	Chd_str ={aug mM7};	//mM7#5 
	Elm_chd = (	0, 3, 8, 11);
	}
 
	CASE(85){	Chd_str ={m(#5)}; 
	Elm_chd = (	0, 3, 8);
	}
 
	CASE(87){	Chd_str ={aug7};	//7#5 
	Elm_chd = (	0, 4, 8, 10);
	}
 
	CASE(88){	Chd_str ={aug7b9};	//7#5♭9 
	Elm_chd = (	0, 4, 8, 10, 13);
	}
 
	CASE(89){	Chd_str ={aug9};	//9(#5) 
	Elm_chd = (	0, 4, 8, 10, 14);
	}
 
//11th,13th 
 
	CASE(91){	Chd_str ={M11}; 
	Elm_chd = (	0, 4, 7, 11, 14, 17);
	}
 
	CASE(92){	Chd_str ={m11}; 
	Elm_chd = (	0, 3, 7, 10, 14, 17);
	}
 
	CASE(97){	Chd_str ={11th}; 
	Elm_chd = (	0, 4, 7, 10, 14, 17);
	}
 
	CASE(98){	Chd_str ={m13}; 
	Elm_chd = (	0, 3, 7, 10, 14, 17, 21);
	}
 
	CASE(99){	Chd_str ={13th}; 
	Elm_chd = (	0, 4, 7, 10, 14, 17, 21);
	}
  
	}	//SWITCH(Chd_type) 
} //コード
  
// モード、ポリコード変換 

		IF(LPi_num==2){
		IF(LPi==0){	IF(Module_num_sw==70){	Chord_str= Chd_str;}	Elm_Chord= Elm_chd;	}
		IF(LPi==1){	IF(Module_num_sw==70){	Mode_str = Chd_str;}	Elm_Mode = Elm_chd;	}
		}
		ELSE{	IF(Module_num_sw==70){	Chord_str= Chd_str;}	}
	} //FOR

 
	//ヲンコード出力 
	IF(Flag_Mode==1){

		Chd_type_btm = Chd_type_btm-12;

		IF(Shift_key_type<= Chd_type_btm){	Chd_type_btm = Chd_type_btm-12;}
		//ヲンコードが-7[F]で、シフトキーが-10[D]の時、ヲクターブを下げる

		//Chd_type_btm = Chd_type_btm-Shift_key_type;	//キーシフト分キー逆算

		FOR(Int Btmi=0; Btmi< SizeOf(Elm_chd); Btmi++){	//キーシフト分キー逆算

			Elm_chd(Btmi) = Elm_chd(Btmi)+Shift_key_type-Chd_type_btm;
		}

		Shift_key_type= Chd_type_btm;	//書換

		Elm_chd= (0, Elm_chd);		//配列差込み
	}
 
	//モード出力 
	IF(Flag_Mode==2){
	IF(Module_num_sw==10 | Module_num_sw==70){

		Elm_chd = ();
		Elm_mod = ();

		FOR(Int EMi=0; EMi< SizeOf(Elm_Mode); EMi++){

			IF(EMi!=0){
				Elm_mod= (Elm_mod, Elm_Mode(EMi));	//ルート以外取り出し
			}

			FOR(Int SPi=0; SPi< SizeOf(Elm_Chord); SPi++){

				IF(Elm_Mode(EMi)==Elm_Chord(SPi) ){
					Elm_chd= (Elm_chd, Elm_Mode(EMi));	//共通取り出し
				}
			}
		}
	}
	}
 
	//ポリコード出力 
	IF(Flag_Mode==3){

		//IF(-Shift_key_type+Chd_type_btm<= 12){	Chd_type_btm = Chd_type_btm+12;}

		Chd_type_btm = Chd_type_btm+12;

		FOR(Int EPi=0; EPi< SizeOf(Elm_Mode); EPi++){
			Elm_Mode(EPi)=Elm_Mode(EPi) +Chd_type_btm;	//キーシフト分キー逆算
		}
		Elm_chd = (Elm_Chord, Elm_Mode);	//出力
	}
 
// デバック 
/*	Print({Elm_chd:}+Elm_chd);
	Print({Elm_mod:}+Elm_mod);
	Print({Elm_Chord:}+Elm_Chord);
	Print({Elm_Mode:}+Elm_Mode);
*/
 
	//コードキーシフト 

	IF(Shift_sw==1){

		Shift_key =Shift_key +Shift_key_type; 		// MMLからのキー指定
		Master_key =Master_key +Master_key_type;	// MMLからの転調指定

		Shift_sw= 0;
	}
  
	//モジュールデータ呼び出し 

IF(Chd_type< 0 | 10<= Chd_type){	//テストコード以外

	//Common_str呼び出し
	//Moddata(Ptn_type(0),Ptn_type(1),Ptn_type(2),Module_num_sw );//[del]

	//Common_str;	// Moddataからの読込み - コントロールパネル値[del]

	IF(Module_num!=70){	Control_panel_str;}	// MMLファイルから読込み

	//Print(Control_panel_str);	//デバック
} //
 
	// コードヴォイシング変換エンジン 

	IF( 0< Chd_invert){

		//IF(2 <SizeOf(Elm_chd) & SizeOf(Elm_chd)< 6){	//Chd_invertエンジン

			IF(Chd_invert==2){		// drop2

				Elm_chd(1)=Elm_chd(1)-12;
			}
			IF(Chd_invert==3){		// drop3

	IF(3<= SizeOf(Elm_chd)){Elm_chd(2)=Elm_chd(2)-12;}
			}
			IF(Chd_invert==4){		// drop1&3

				Elm_chd(0)=Elm_chd(0)-12;
	IF(3<= SizeOf(Elm_chd)){Elm_chd(2)=Elm_chd(2)-12;}
			}
			IF(Chd_invert==5){		// drop2&3

				Elm_chd(1)=Elm_chd(1)-12;
	IF(3<= SizeOf(Elm_chd)){Elm_chd(2)=Elm_chd(2)-12;}
			}
			IF(Chd_invert==6){	// invert[drag1&2 drop4]

				Elm_chd(0)=Elm_chd(0)+12;
				Elm_chd(1)=Elm_chd(1)+12;
	IF(4<= SizeOf(Elm_chd)){Elm_chd(3)=Elm_chd(3)-12;}
			}
		//}

		Elm_chd = ArraySortNum(Elm_chd); // 再ソート

	} //IF

 
	//リバースコードエンジン 
IF(Chd_rev==1){

		FOR(Int Rev_i=0; Rev_i< SizeOf(Elm_chd)/2; Rev_i++){

			Rev_tmp= Elm_chd(0+ Rev_i);
			Elm_chd(0+ Rev_i) = Elm_chd( SizeOf(Elm_chd)-1 -Rev_i);	//最後を最初へ代入

			Elm_chd( SizeOf(Elm_chd)-1 -Rev_i) =Rev_tmp;
		}

} //IF
  
} // Function 
  
//TrackName ={"シーケンスパターン　ver1.99."}// 
//Copyright ={"庚申works"}//

//関数部---------//

/* [指定した小節数分持続して演奏]

Cpl_str={ // @5_EP

	Marks =24;	// 1小節の音符数、TimeBase=120であれば240で割れる数字のみ
	Accent= 3;	//アクセントカウント
//	Octave = 2;			//[0,1,2,3]
	Array Oct_chg= (1, 3, 0, 2);	//ヲクターブパターン
	Array Hm_ary = (0, 4, 7   );	//ハーモニー付加

	Rand_sw = 0;	//ランダムパターン選択[1,2,3]
	Pan_Assign =1;	//ヲートパンアサイン[0,1]
	Double_skip =0;	//最終節加速SkipSW[1]であれば[Marks]は480で割れる数字まで可

//	VCO = 90;	Gate = 60;	Tim = 0;	//不要

	Chd_invert =0;
	Chd_rev =0;

	};
*/
	
//	Function { 

	/*	------[変数の設定例]
	Int part1 = 4;					//整数型変数定義
	Str Lgh = {l24};				//文字列型変数定義
	#crd1 = { Sqrptn(60, 63, 67, 70, 53, 24)};	//マクロ定義 = 関数呼び出し
	*/

Function Sqrptn(	Array Ptn){

	Int Part		=Ptn(0);
	Int Parthalf		=Ptn(1);

/*Function Sqrptn(	Int Part,		//Ptn(0)	小節数
                 	Int Parthalf,		//Ptn(1)	1/4小節数	[1,2,3]
                 	Int Chd_typertn,	//Ptn(2)	コード型選択	[Chdcall.h 47:M7]
                 	Int Shift_keyrtn,	//Ptn(3)	キー
                 	Int Module_typertn,	//Ptn(4)	モジュール
                 	Int Master_keyrtn ){*/	//Ptn(5)	転調
	
	//---[初期設定] 

	Int Module_num = 10;	//chdcallへ渡す値、旧Sqr_module
	Int TB=TimeBase;	//タイムベース読込み

	Int VCO = MML(v);	//ベロシティ値 90
	Int Gate= MML(q);	//ゲートタイム 60-75前後
	Int Tim = MML(t);	//タイミング調整 0


	//コントロールパネル変数

	Int Marks = 24;		//デフォルトは[24]分音符	// 4の倍数のみ
	Int Accent= 4;		//ランダム時、アクセント
//	Int Octave = 2;		//ヲクターバー[0, 1, 2, 3]
	Array Oct_chg= (1, 2, 0, 1);	//ヲクターブパターン
	Array Hm_ary = ();		//ハーモニー付加

	Int Rand_sw = 0;	//ランダム選択[0ランダム、1スラップ、2ゆりもどし]
	Int Pan_Assign =1;	//ヲートパンアサイン
	Int Double_skip =0;	//[0,1]倍速スキップスイッチ


	//コードコール変数

	Int Master_key =48;	// [ノートナンバー n48/o4c ( C3 )]
	Int Shift_key = 0;	//キーシフト[+-]

	Array Elm_chd = ();
	Array Elm_mod = ();
 
	Chdcall( Ptn(2), Ptn(3), Ptn(4), Ptn(5) ); 

	//※注 IntはFORループの外へ(再定義エラー)
 
	//>>>エンジンコントローラー 

	//ループ計算//
	Int Marks_count = Marks*Part + Marks *Parthalf/4;	//音符数/1処理[M]

	Int Sgl_count = 0;	//倍速タイミング指定
	Int Dub_count = 0;
	Int Adj_count = 0;
	Int Loop_count =0;

	IF(Double_skip == 1){
		Loop_count= Marks_count;	//配列出力ループ[K]
		Sgl_count = Marks_count;
	}
	ELSE{
		IF(8 < Marks){ Adj_count++;
		IF(16< Marks){ Adj_count++;
		}	}

		IF(Marks/2 <= Marks_count){			// 1/2以上
			Dub_count = (Marks/2 -Adj_count)*2;	//倍速処理

			IF(Marks/2 < Marks_count){			// 3/4以上
				Sgl_count = Marks_count - Marks/2;	//倍速処理分減算する
			}
		}
		ELSE{						// 1/4以上
			Dub_count = (Marks/4 -Adj_count)*2;	//倍速処理
		}
		Loop_count = Sgl_count +Dub_count +Adj_count;	//配列出力ループ[K]
	}
 
	//>>>ランダムシーケンスエンジン 

	//初期化

	//Int Elm_select = 0;	//出音スイッチ分岐カウンタ[C]
	//Int Elm_sct_out= 0;	//出音後のテンポラリ[E]
	Array Rdm_out_ary= ();
	Int Rdm_out = 0;	//事前減算ランダム出力[D]
	Int Rdm_i = 0;

	Int Lang_num= 0;	//ダブル時の減算カウンタ
	Int Dub_num = 1;	//倍速テンプ

	Int Bebop =0;
	IF(Ptn(2)< -1000){	Bebop =1;}	//モードスイッチ

	//Backforth変数

	Int Flagupdown = 0;	//ゆりもどし切換スイッチ
 
	//ヲクターブコントロール 
/*
	Array Oct_chg = (0);	//初期値

	SWITCH(Rand_sw){	//外部指定はSWITCHで
	CASE(0){
		SWITCH(Octave){
		CASE(1){	Oct_chg = (1, 0);	}
		CASE(2){	Oct_chg = (1, 2, 0, 1);	}
		CASE(3){	Oct_chg = (1, 3, 0, 2);	}
		}
	}
	CASE(1){
		SWITCH(Octave){
		CASE(1){	Oct_chg = (0, 1);	}
		CASE(2){	Oct_chg = (0, 2, 1);	}
		CASE(3){	Oct_chg = (0, 2, 3, 1);	}
		}
	}
	CASE(2){
		SWITCH(Octave){
		CASE(1){	Oct_chg = (0, 1);	}
		CASE(2){	Oct_chg = (0, 1, 2);	}
		CASE(3){	Oct_chg = (0, 1, 2, 3);	}
		}
	}
	} //SWITCH
*/
 
FOR(Int CKi= 0; CKi< Loop_count; CKi++){	//配列出力部 

	//I = Loop_count;		//カウンタ初期化
	//WHILE(0 < I){		//[0]でEXIT ::減算処理が複雑になりそうでWHILE::
	//	I--;

	//	IF(Dub_num==1){	//倍速、2in1カウンタ

	//		Rdmc--;
	//		IF(Rdmc==0){	I++;	}	//カウンタ減算
	//		ELSE{		Rdmc =1;}

	SWITCH(Rand_sw){ //Rdm_out_ary出力
	
CASE(0){	// Randomパターン 

	IF(CKi==0 & Sgl_count!=0){	Rdm_out_ary(CKi) =0;}	//配列ボトム出力
	ELSE{
	WHILE(1){

		IF(CKi==Loop_count-1){	Lang_num = 1;	}	// [1,2,3,  ]ルート音以外
		ELSE{			Lang_num = 0;	}	// [0,1,2,3,]

		IF(Double_skip == 0){
			IF(CKi==Sgl_count){				Dub_num=2;}
			IF(CKi==Loop_count -Adj_count & Adj_count!= 0){	Dub_num=1;} //アジャストもどし
		}

		IF(CKi%(Accent*Dub_num)!=0 & Bebop==1){		//ノンアクセント出力

			Rdm_out_ary(CKi) =Random(SizeOf(Elm_mod)-Lang_num)+Lang_num;	//Elm_mod配列出力
			Rdm_out =Elm_mod( Rdm_out_ary(CKi) );
		}
		ELSE{
			IF(SizeOf(Elm_chd)<= 2){	Lang_num = 0;}	// アクセント時、無限ループ抑止

			Rdm_out_ary(CKi) =Random(SizeOf(Elm_chd)-Lang_num)+Lang_num;	//Elm_chd配列出力
			Rdm_out =Elm_chd( Rdm_out_ary(CKi) );
		}

		IF(Rdm_out==Rdm_i & 1< SizeOf(Elm_chd) ){}	//再ループチェック
		ELSE{ Rdm_i =Rdm_out;	EXIT;}			//WHILE(1)は、(!=)がうまくいかない

	} //WH
	} //EL
} //CA
 
CASE(1){	// Slapパターン 

	IF(SizeOf(Oct_chg)-1< Rdm_i ){	Rdm_out++;	Rdm_i =0;};
	Rdm_i++;

	IF(SizeOf(Elm_chd)-1 < Rdm_out ){	Rdm_out =0;}

	Rdm_out_ary(CKi) = Rdm_out;	//出力[0,0,1,1,2,2,]
} //CA
 
CASE(2){	// Backforthパターン 

	Rdm_out_ary(CKi) = Rdm_out;	//出力[0,1,2,1,0,]

	SWITCH(Flagupdown){
	CASE(0){
		Rdm_out++;
		IF(SizeOf(Elm_chd)-1 < Rdm_out ){
			Rdm_i++;
			IF( Rdm_i ==SizeOf(Oct_chg)){	Flagupdown = 1;	Rdm_out= Rdm_out-2;}
			ELSE{				Rdm_out =0;}
		}
	}
	CASE(1){
		Rdm_out--;
		IF(Rdm_out< 0 ){
			Rdm_i--;
			IF( Rdm_i ==0){	Flagupdown = 0;	Rdm_out= Rdm_out+2;}
			ELSE{		Rdm_out =SizeOf(Elm_chd)-1;}
		}
	}
	} //SW
} //CA
  
	} //SW
} //FOR 

 
	//デバック 
	//Print({Rdm_out_ary:}+Rdm_out_ary);
 
	// 変数初期化 // 

	Int Flag_Pan= 0;	//パンフラグ
	Int Flagmkt = 1;	//レングス出力抑制
	Int Mkt = Marks;	//倍速用音符長テンポラリ[L]
	    Dub_num = 1;	//再利用で初期化

	Int FlagAct =0;
	Int Act_num =0;		//ヲクターブ配列 - 構成コード外指定

	Array Pan_ary	= (127,	0);
	Array VCO_ary	= (-15,	0);	//減算値
	Array Tim_ary	= (-1, 0);
	Array Gate_ary  = (-5, 0);

	Int VCOvalue = 0;	//出力
	Int Gate_value=0;
	Int Pan_value =64;
	Int Timvalue = 0;

	Int Piyo_key = Master_key +Shift_key;
	Int Po = 0;		//ヲクターブスイッチ加算分
	Int Piyo = 0;		//実発音ノート

	Str Piyo_str ={};
 
	//配列メモリ初期化 

	Int Oct_i =0;
	Array Elm_oct= ();

	Int SZ_chd = 0;	Int SZ_mod = 0;

	IF(1< SizeOf(Oct_chg)){
	//IF(0 < Octave){
		FOR( Int RTi=0; RTi< SizeOf(Elm_chd); RTi++){
			Elm_oct(RTi) = 0;
		}
		IF(Bebop==1){	//モードのみ
			SZ_chd = SizeOf(Elm_chd);	SZ_mod = SizeOf(Elm_mod);

			FOR( Int RTj=SZ_chd; RTj< SZ_chd+SZ_mod; RTj++){
				Elm_oct(RTj) = 0;
			}
		}
	} //IF
 
	//FOR [WHILE]ループ

	Rdm_out_ary =(Rdm_out_ary, -1);	//配列差込み

	FOR(Int I =0; Rdm_out_ary(I)!=-1; I++){ 

	//IF(E==D){}
	//ELSE{
	//	Elm_select =Rdm_out;	//ランダム出力をエレメント選択へ
	//	P = Elm_chd(Rdm_out);	//配列呼出
	
	//フラグ出力 

	Piyo_str ={};	//再初期化

	IF(Double_skip==0){
	IF(I == Sgl_count){				Dub_num = 2;	Flagmkt = 1;} //音符長半分
	IF(I == Loop_count -Adj_count & Adj_count!= 0){	Dub_num = 1;	Flagmkt = 1;}
	}

	IF(I%(Accent*Dub_num)==0){	FlagAct=1;	Act_num = 0;}
	ELSE{			  	FlagAct=0;	Act_num = SizeOf(Elm_chd);}
 
	//ヲクターブエンジン 

	//IF(0 < Octave){
	IF(1< SizeOf(Oct_chg)){
	SWITCH(Rand_sw){
	CASE(0){
		Oct_i = Elm_oct(Act_num+Rdm_out_ary(I) );	//配列メモリElm_oct()から読込み

		Po = Oct_chg(Oct_i);
		Oct_i++;

		IF(SizeOf(Oct_chg)-1 < Oct_i ){	Oct_i =0;}

		Elm_oct(Act_num+Rdm_out_ary(I) ) = Oct_i;	//再確保
	}
	CASE(1){
		Po = Oct_chg(Oct_i);
		Oct_i++;

		IF(SizeOf(Oct_chg)-1 < Oct_i ){	Oct_i =0;}
	}
	CASE(2){
		SWITCH(Flagupdown){
		CASE(0){
			IF(Rdm_out_ary(I)== 0 ){	Po = Oct_chg(Oct_i);}
			IF(Rdm_out_ary(I)== SizeOf(Elm_chd)-1){ 		//トップで切換

				IF(SizeOf(Oct_chg)-1== Oct_i){	Flagupdown = 1;}
				ELSE{				Oct_i++;}
			}
		}
		CASE(1){
			IF(Rdm_out_ary(I)== SizeOf(Elm_chd)-1){	Po = Oct_chg(Oct_i);}
			IF(Rdm_out_ary(I)== 0 ){

				IF(Oct_i== 0){	Flagupdown = 0;}
				ELSE{		Oct_i--;}
			}
		}
		} //SW
	} //CA
	} //SW
	} //IF
 
	//レングス 

	//IF(I == 0){	Mkt =Marks;	Dub_num = 1;	Flagmkt = 1;}

	IF(Flagmkt==1){
		Flagmkt = 0;	//出力抑制
		Mkt =Marks *Dub_num;

		IF( (TB*4)%Mkt != 0){	Print({Sqrptn_Length_Error:}+{(}+(TB*4)+{/}+Mkt+{)} ); }
		//全音符で480/480 [tempo = 120]

		Piyo_str =Piyo_str+{l(}+Mkt+{)};
	}
 
	//ヲートパンアサイン 

	IF(Pan_Assign==1){	//パンアサインタイプ

		SWITCH(Rand_sw){
		CASE(0){
			IF(FlagAct!=1 & Bebop==1){	Flag_Pan=4;}
			ELSE{				Flag_Pan=3;}
		}
		CASE(1){	Flag_Pan=2;}
		CASE(2){	Flag_Pan=2;}
		}
	}
	ELSE{
		IF(Double_skip==0){

			SWITCH(Dub_num){
			CASE(2){	Flag_Pan = 1;}
			CASE(1){	Flag_Pan = 0;}
			}
		}
	}

	SWITCH(Flag_Pan){
	CASE(0){	Pan_value = 64;}
	CASE(1){	Pan_value = Pan_ary(I%2);}			//[0]から
	CASE(2){	Pan_value = 127 /(SizeOf(Oct_chg)-1) *Oct_i;}
	CASE(3){	Pan_value = 127 /(SizeOf(Elm_chd)-1) *Rdm_out_ary(I);}
	CASE(4){	Pan_value = 127 /(SizeOf(Elm_mod)-1) *Rdm_out_ary(I);}
	}

	Piyo_str =Piyo_str+{Panpot(}+Pan_value+{)};
 
	//ヴェロシティ・タイミング 

	Timvalue= 0;

	//ヲクターブ減算
	VCOvalue = -( 3*Po);

	//アクセント加算
	IF(Rand_sw==0){
		VCOvalue = VCOvalue +VCO_ary(FlagAct);
		Timvalue = Timvalue +Tim_ary(FlagAct);
	}

	//バックフォース加算
	IF(Rand_sw==2){
		SWITCH(Flagupdown){
		CASE(0){
			VCOvalue = VCOvalue -7;
		}
		CASE(1){
			VCOvalue = VCOvalue +14;
			Timvalue =Timvalue -2;
		}
		} //SW
	}

	VCOvalue = VCOvalue+VCO;
	Piyo_str =Piyo_str+{v(}+VCOvalue+{)};

	Timvalue= Timvalue +Tim;
	Piyo_str =Piyo_str+{t(}+Timvalue+{)};
 
	//ゲート 

	IF(Rand_sw==0 & Dub_num!=2){
		Gate_value = Gate_ary(FlagAct);
	}
	ELSE{	Gate_value = 0;}

	Gate_value = Gate_value +Gate;

	Piyo_str =Piyo_str+{q(}+Gate_value+{)};
 
	//ノート発音 

	IF(FlagAct!=1 & Bebop==1){
		Piyo = Piyo_key+Elm_mod(Rdm_out_ary(I) )+Po*12;
	}
	ELSE{
		Piyo = Piyo_key+Elm_chd(Rdm_out_ary(I) )+Po*12;
	}

	IF(Dub_num==2 & Rand_sw==0 & I%2==0){	Piyo = Piyo +12;} //倍速ユニゾン加算

	//ハーモニースイッチ
	IF(SizeOf(Hm_ary)==0){
		Piyo_str =Piyo_str+{n(}+Piyo+{)};
	}
	ELSE{
		IF(SizeOf(Hm_ary)==1 & Hm_ary(0)==0){
			Piyo_str =Piyo_str+{n(}+Piyo+{)};
		}
		ELSE{
			Piyo_str=Piyo_str +{'};
			FOR(Int Hmi=0; Hmi< SizeOf(Hm_ary); Hmi++){
				Piyo_str=Piyo_str +{n(}+(Piyo+Hm_ary(Hmi))+{)};
			}
			Piyo_str=Piyo_str +{'};
		}
	}
 
	//デバック 
	//Print(Piyo_str);

	//同音チェック
	//Elm_sct_out = Rdm_out;

	//Elm_sct_out = Elm_select;	//[E=C;]同音チェックテンポラリに代入
	//Po = 0;			//CASEごと独立カウントため初期化
 
	//出力 

	Piyo_str;
  
	}	//FOR [WHILE] 
 
	//変更した数値を書きもどし 
	v(VCO);
	q(Gate);
	t(Tim);
  
} // Function 
  
//TrackName ={"アルペジヲパターン　ver0.31"}// 
//Copyright ={"庚申works"}//

//関数部---------//

/* [数字が多いものは代入、計算回数、を少なくする]
   [IF分岐数を少なくする]

	//Clv設定/ Sgltgr =0;
Cpl_str={
	Bt_mrks= (	1, 0, 0, 1,	10, 0, 0,-1);		//配列を4つ以下にしない
	Bt_Keys= (	0, 0, 0, 0,	 0, 0, 0, 0);		//キーコントロール

	Sgltgr =0;	  //[0(polysyn),1(monosyn)]
	Chd_invert =4;
	};

	//Bass設定/ Sgltgr =1; Unison_sw =0;
Cpl_str={
	Bt_mrks= (	-1, 1 ,2,-1);		//配列を4つ以下にしない
	Bt_Keys= (	 0, 0, 0, 0);		//キーコントロール

	Sgltgr =1;
	Unison_sw =0;			//ユニゾンスイッチ
	Bt_slide= (	0, 7);		//単音スライド
	//Tim = Tim +1;
	};

	//リフ設定/ Sgltgr =1; Unison_sw =1;
Cpl_str={
	Bt_mrks= (	1, 1, 1, 1,	1, 1, 1, 1);
	Bt_Keys= (	7, 7, 9, 7,	10, 7, 9, 7);	//ハーモニー指定

	Sgltgr =1;
	Unison_sw =1;	//Bt_marks(*)=2 以上はユニゾンせず、単音スライド

	Bt_slide= (	0);
	};
*/
	
//	Function { 

	/*	------[変数の設定例]
	Int part1 = 4;					//整数型変数定義
	Str Lgh = {l24};				//文字列型変数定義
	#crd1 = { Sqrptn(60, 63, 67, 70, 53, 24)};	//マクロ定義 = 関数呼び出し
	*/

/*
Function Apgptn(	Int Part,			//小節数
                 	Int Parthalf,			//1/4小節数	[1,2,3]
                 	Int Chd_typertn,		//コード型選択	[Chdcall.h M7:47]
                 	Int Shift_keyrtn,		//キー
                 	Int Module_typertn,		//モジュール
                 	Int Master_keyrtn ){		//転調
*/

Function Apgptn(	Array Ptn){

	Int Part		=Ptn(0);
	Int Parthalf		=Ptn(1);
	
	//---[初期設定] 

	Int Module_num = 20;		//chordcallへ渡す固定値、旧Apg_module
	Int TB=TimeBase;		//タイムベース読込み

	//コントロールパネル変数

	Int VCO = MML(v);
	Int Gate= MML(q);
	Int Tim = MML(t);

	//コードコール変数
	Int Master_key =48;		//デフォルトキー [ノートナンバー n48/o4c ( C3 )]
	Int Shift_key = 0;		//キーのシフト[+-]
	Array Elm_chd = (	0, 5, 7, 12);

	//ゲートアルペジ
	Array Bt_mrks = (	1, 2, 3, 4);	//ビート指定
	Array Bt_Keys= (	0, 1, 2, 3);	//単音キーシフト
	Array Bt_slide= (	0);		// 単音スライド 8段まで

	//モード設定
	Int Sgltgr =0;			//シングルトリガーSW[0(polysyn),1(Monosyn)]
	Int Unison_sw =0;		//ユニゾンスイッチ


 
	Chdcall( Ptn(2), Ptn(3), Ptn(4), Ptn(5) ); 

	IF( SizeOf(Bt_mrks)!=SizeOf(Bt_Keys) ){	Print({"ERR:Bt_mrksとBt_Keysの数が合わない"});}

 
	//>>>ポリゲートエンジン 
	
	//FORループカウンタ初期化 

	Int For_count = Part;


	IF(Parthalf!=0){	//半小節指定時、1回追加
		For_count++;
	}
 
	//WHILEループカウンタ初期化 

	Int I = 0;		//WHILEカウンタ
	Int Loop_count =0;	//ループカウンタ

	Int VCOvalue = 0;	//ベロシティ
	Int Gatevalue = Gate;	//ゲート
	Int TimValue = 0;	//タイミング

	//ゲートアルペジ
	Int Btt = 0;		//スラー加算
	Int Flagyasumi =0;	//休符スイッチ
	Int Btmarksvalue = 0;	//音符長計算テンプ
	Int Btmarkstmp =1;	//Btmarkの倍化変数

	//シングルトリガー
	Int Piyo_key = Master_key +Shift_key;
	Int Piyo_unison =0;	//ユニゾン出力
	Int Piyo =0;
	Int Sti =0;		//さしもどしカウンタ
	Int Flagsti =0;		//ダブルトリガー解除フラグ
	Int Bttmp= 0;		//裏打ちテンポラリ

	//ポリ発音
	Array Piyo_ary=();
	Str Piyo_str ={};
	Str Piyo_chd ={};
	Int Ir_thru_sw =0; //[***]
 
	FOR(Int J= 0; J< For_count; J++){ 
	//小節ループ

	
	//WHILEループカウンタ代入 

	IF(Parthalf!=0 & J==For_count-1){	//ラストループで半小節処理
		Loop_count = SizeOf(Bt_mrks)*Parthalf /4;
	}
	ELSE{
		Loop_count = SizeOf(Bt_mrks);	//通常処理
	}

//	Sti = -1;
	Bttmp= 0;

	I = 0;			//カウンタ再初期化
 
	WHILE(I < Loop_count){ 

		Flagyasumi = 0;
		VCOvalue = VCO;		//再初期化
		TimValue = Tim;		//再初期化

		IF(Flagsti==2){		//ループ頭でSti[ループreset]を解除
			Btmarkstmp =1;
			//Sti= -1;
			Flagsti= 0;	//自分自身[Flagsti]を初期化
		}

	
	Bttmp= Bt_mrks(I); //出音長さ代入 
	Btt = 1;

	IF(Bttmp==0){	// 休符、各分岐

		Flagyasumi= 1;
	}
	ELSE{
		IF(Bttmp< -10 | 10< Bttmp){
		IF(Bttmp< -20 | 20< Bttmp){
			Bttmp =Bttmp%20; VCOvalue =VCOvalue*5/12; TimValue = TimValue+2; //弱々拍
		}
		ELSE{	Bttmp =Bttmp%10; VCOvalue =VCOvalue*2/3; TimValue = TimValue+1; //弱拍
		}	}

		IF(Bttmp==1 | Bttmp==10){　//[Btmarkstmp =1]をスルー

			IF(I< Loop_count-1){				//[Loop_count-1] ラストキャンセル
			FOR(Int Bti =I+1; Bt_mrks(Bti)==10; Bti++){
				Btt++;
			}	}
			//I = I +Btt-1; //最下段へ
		}
		ELSE{	//倍テンポ、裏打ち

			IF(Flagsti==0){ //初回のみフラグ
				Flagsti =1;

				IF(Bttmp<= -1){			//裏打ち倍テンポ
					Flagyasumi= 2;
					Bttmp= -Bttmp;
					Btmarkstmp =Bttmp*2;
				}
				ELSE{
					Btmarkstmp =Bttmp;	//倍テンポ化
				}
				Sti =Bttmp;
			}
		}
	} //ELSE
 
	//ゲートアルペジ音符長 

	Btmarksvalue =SizeOf(Bt_mrks)*Btmarkstmp;

	IF((TB*4)*Btt %Btmarksvalue!=0){
		Print({Apgptn_Length_Error:}+{(}+(TB*4)+{*}+Btt+{/}+Btmarksvalue+{)} );
	}

	//l%(480*Btt /Btmarksvalue); //tempo = 120時、全音符で[480*24 /24*1]
	//Print(MML(l));

	Piyo_str = {l%(}+( (TB*4)*Btt /Btmarksvalue)+{)};
 
	IF(Flagyasumi==1){ //休符スイッチ 

		//r; //休符
		Piyo_str = Piyo_str+{r};
	}
 
	ELSE{  //発音スイッチ 
	
	//グルーブ代入 

	Piyo_str = Piyo_str+{v(}+(VCOvalue)+{)};
	Piyo_str = Piyo_str+{t(}+(TimValue)+{)};
	Piyo_str = Piyo_str+{q(}+Gatevalue+{)};
 
	//ノート発音エンジン--- 
	
IF(Sgltgr==1){	//モノエンジン 

	Piyo_unison =Piyo_key +Bt_Keys(I);	//キーシフト

	IF(Flagsti ==1){

		WHILE(0< Sti){	Sti--;	Piyo =Piyo_unison;	//ティドル

			IF(Sti< SizeOf(Bt_slide) ){	Piyo =Piyo +Bt_slide(Sti);}	//配列エラー抑止


			IF(Flagyasumi==2){	Piyo_str = Piyo_str+{r; n(}+Piyo+{)};}
			ELSE{			Piyo_str = Piyo_str+{n(}+Piyo+{)};}

			IF(Sti== 0){	Flagsti =2;}	//フラグ頭で解除
		}
	}
	ELSE{
		IF(Flagsti< 1 & Unison_sw==1){
			Piyo_str = Piyo_str+{'n(}+Piyo_unison+{)n(}+Piyo_key+{)'};	}	//リフ
		ELSE{
			Piyo_str = Piyo_str+{n(}+Piyo_unison+{)};	}	//シングル
	}
} //
 
ELSE{	//ポリエンジン 

	Piyo_chd =CHR(39);	//[']

	FOR(Int Ir=0; Ir< SizeOf(Elm_chd); Ir++){

		Piyo_ary(Ir) = Master_key+Shift_key +Elm_chd(Ir)+Bt_Keys(I);	//計算結果代入

		//Piyo_ary(Ir) = Master_key +Elm_chd(Ir) ;		//不要

		//IF(17<= Track){		Ir_thru_sw =1;}	//Drum BD以外[***]
		//IF(17<= Track){		Ir_thru_sw =1;}	//Drum Sn以外[***]

		//IF(Ir_thru_sw==0){//[***]
		//Piyo_ary(Ir) = Piyo_ary(Ir) +Shift_key +Bt_Keys(I);
		//}//[***]

		Piyo_chd =Piyo_chd+{n(}+(Piyo_ary(Ir) )+{)};	//文字を合成
	}
	Piyo_chd =Piyo_chd+CHR(39);

	IF(Flagsti ==1){
		WHILE(0< Sti){	Sti--;

			IF(Flagyasumi==2){	Piyo_str = Piyo_str+{r; }+Piyo_chd;}	//裏打ち
			ELSE{			Piyo_str = Piyo_str+Piyo_chd;}		//ティドル

			IF(Sti== 0){	Flagsti =2;}		//フラグ頭で解除
		}
	}
	ELSE{	Piyo_str = Piyo_str+Piyo_chd;}
} //
  
	} //EL 
   
	//Print(Piyo_str);	//デバック 
	// {y64,1Piyo_str;}
 
		Piyo_str;

		I = I +Btt-1;
		I++;

	} //WHILE 
  
	} //FOR 
  
	//変更した数値を書きもどし 
	v(VCO);
	q(Gate);
	t(Tim);
  
} // Function 
  
//TrackName ={"パッドパターン　ver0.32"}// 
//Copyright ={"庚申works"}//

/* [指定した小節数分持続して演奏]

Cpl_str={

	Shift_key =Shift_key+12;
	Chd_invert =0;

//	VCO = 80;	Gate =99;	Tim = 1;
	};
*/
	
Function Padptn(	Array Ptn){ 

	Int Part		=Ptn(0);
	Int Parthalf		=Ptn(1);

/*Function Padptn(	Int Part,			//小節数
                 	Int Parthalf,			//1/4小節数	[1,2,3]
                 	Int Chd_typertn,		//コード型選択	[Chdcall.h 47:M7]
                 	Int Shift_keyrtn,		//キー
                 	Int Module_typertn,		//モジュール
                 	Int Master_keyrtn ){*/		//転調

	/*	------[変数の設定例]
	Int part1 = 4;					//整数型変数定義
		Str Lgh = {l24};			//文字列型変数定義
	#crd1 = { Sqrptn(60, 63, 67, 70, 53, 24)};	//マクロ定義 = 関数呼び出し
	*/
	
	//---[初期設定] 

	Int Module_num = 30;		//chordcallへ渡す値、旧Pad_module
	Int TB=TimeBase;		//タイムベース読込み


	//コントロールパネル変数

	Int VCO = MML(v);
	Int Gate= MML(q);
	Int Tim = MML(t);


	//コードコール変数
	Int Master_key =48;		//デフォルトキー [ノートナンバー n48/o4c ( C3 )]
	Int Shift_key = 0;		//キーのシフト[+-]
	Array Elm_chd = (	0, 5, 7, 12);
 
Chdcall( Ptn(2), Ptn(3), Ptn(4), Ptn(5) ); 
 
//>>>エンジンコントローラー 

	
	//[初期設定] 

	Int Marks_count = 0;	//音の長さ/1処理[M]
 
	Marks_count = Part*4 + Parthalf; 
  
	//>>>ポリゲートエンジン 
	
	//初期化 

	Int VCOvalue = 0;	//ベロシティテンポラリ
	Int Gatevalue = 0;	//ゲートテンプ
	Int TimValue = 0;	//タイミングテンプ

	Str Piyo_str ={};
 
	//ゲートアルペジ音符長 

	//l%(480/4*Marks_count); //tempo = 120時、全音符で[480/4*4]

	//Print({Marks_count});
	//Print(Marks_count);

	Piyo_str = {l%(}+((TB*4)/4*Marks_count)+{)};
 
	//ヴェロシティコントロール 

	VCOvalue = VCO;

	Piyo_str = Piyo_str+{v(}+VCOvalue+{)};
 
	//ゲートコントロール 

	Gatevalue = Gate;

	Piyo_str = Piyo_str+{q(}+Gatevalue+{)};
 
	//ビートタイミングコントロール 

	TimValue = Tim;

	Piyo_str = Piyo_str+{t(}+TimValue+{)};
 
	//ノート発音エンジン--- 

	Array Piyo_ary=();	//ループレスのため

	Piyo_str = Piyo_str+CHR(39);	//[']

	FOR(Int I=0; I< SizeOf(Elm_chd); I++){
		Piyo_ary(I) = Master_key +Shift_key +Elm_chd(I);	//計算結果代入

		Piyo_str =Piyo_str+{n(}+(Piyo_ary(I) )+{)};	//文字を合成
	}

	Piyo_str =Piyo_str+CHR(39);

	//Print(Piyo_str);

	Piyo_str;	//ポリ発音

	// [y64,1;Piyo_str;]
  
	//変更した数値を書きもどし 
	v(VCO);
	q(Gate);
	t(Tim);
  
} // Function 
  
//TrackName ={"フレーズパターン　ver0.36}// 
//Copyright ={"庚申works"}//

//関数部---------//

/* [1小節など定められたパターンを演奏したら残りの小節数だけ、休符を出力する。]
   [Marksで小節の配列数を指定し、必要な長さだけ配列を入力する。]

	//Bt_mrks= (	1, 1, 2,   1,	-2,        0, 1,10);
	//Bt_Keys= (	1, 1, 2,2, 1,   -4,4,-4,4, 0, 1,10);	//出力サンプル
	//Bt_Keys(I)!=0 |  = (	0, 0, 0,0, 0,	  ,0,  ,0,  , 0,  );
	//Oct_chg = (	0, 0, 0,1, 0,	  ,0,  ,1,  , 0,  );

Cpl_str={
	Marks = 12;	//[Marksは240で割れる数]

	// Bt_mrks/[-1][1][0][10]から選択、Elm_chg/コード構成音から選択、Oct_chg/ヲクターブ変更
	Bt_mrks= (	1, 1,10, 1,   1, -1, 0, 1,   1, 1, 1,10);
	Elm_chg= (	0, 1,  , 3,   0, ,1, ,  3,   0, 1, 2,  );
	Oct_chg= (	1, 3,  , 0,   2, ,1, ,  0,   3, 0, 1,  );

	Elm_rdmsw =0;			//コードランダムSW、[Elm_chg]を指定しない場合
	Oct_rdmsw =0;			//ヲクターブランダムSW、[Oct_chg]を使用しない場合
	Octave = 3;			//[Octave]範囲指定、[Oct_rdmsw =1]のみ

	//Shift_key =Shift_key+12;

	FR_sw = 0;		//発音Front[0]-Rear[1]切換

	Chd_invert =0;	Chd_rev =0;
	};
*/
	
//	Function { 

	/*	------[変数の設定例]
	Int part1 = 4;					//整数型変数定義
	Str Lgh = {l24};				//文字列型変数定義
	#crd1 = { Sqrptn(60, 63, 67, 70, 53, 24)};	//マクロ定義 = 関数呼び出し
	*/

/*Function Sqrptn(	Int Part,		//Ptn(0)	小節数
                 	Int Parthalf,		//Ptn(1)	1/4小節数	[1,2,3]
                 	Int Chd_typertn,	//Ptn(2)	コード型選択	[Chdcall.h 47:M7]
                 	Int Shift_keyrtn,	//Ptn(3)	キー
                 	Int Module_typertn,	//Ptn(4)	モジュール型
                 	Int Master_keyrtn ){*/	//Ptn(5)	転調

Function Prsptn(	Array Ptn){

	Int Part		=Ptn(0);
	Int Parthalf		=Ptn(1);
	
	//---[初期設定] 

	Int Module_num = 40;	//chdcallへ渡す値、旧Sqr_module
	Int TB=TimeBase;	//タイムベース読込み

	//コントロールパネル変数

	Int VCO = MML(v);
	Int Gate= MML(q);
	Int Tim = MML(t);

	//コードコール変数
	Int Master_key =48;	// [ノートナンバー n48/o4c ( C3 )]
	Int Shift_key = 0;	//キーシフト[+-]
	Array Elm_chd = (0, 5, 7, 12);


	//ノート生成
	Int Marks = 4;		//デフォルトは[24]分音符	// 4の倍数のみ

	Array Bt_mrks = (1,10,10,10);
	Array Elm_chg = (0, 0, 0, 0);
	Array Oct_chg = (0, 0, 0, 0);

	Int Elm_rdmsw =0;
	Int Oct_rdmsw =0;
	Int Octave =3;

	Int FR_sw = 0;		//休符Front[0]-Rear[1]切換
 
Chdcall( Ptn(2), Ptn(3), Ptn(4), Ptn(5) ); 

IF(SizeOf(Bt_mrks)!=SizeOf(Elm_chg) ){	Print({"Elm_chgの配列長エラー"};) };
IF(SizeOf(Bt_mrks)!=SizeOf(Oct_chg) ){	Print({"Oct_chgの配列長エラー"};) };
 
	//休符差込み// 
	//Int Marks_count = 0;	//音符数/1処理[M]

	Int Marks_count = Marks*Part +Marks *Parthalf/4 - SizeOf(Bt_mrks);	//休符カウント[番兵分注意]

	Str R_str ={};
	IF (0< Marks_count){

		R_str= {l%}+((TB*4)/Marks);

		FOR(Int J =Marks_count; 0< J; J--){
			R_str= R_str+{r};
		}
		IF(FR_sw==1){	R_str;}	//休符出力
	}

	Array Bt_mrks_tmp = ();
	IF(Marks_count< 0){

		Bt_mrks_tmp =Bt_mrks;
		Bt_mrks= ();		//初期化

		FOR(Int Cki= 0; Cki< Marks*Part +Marks *Parthalf/4; Cki++){	//自動配列カッター

			Bt_mrks(Cki)= Bt_mrks_tmp(Cki);
		}
	}
 
	//配列変換// 

	//Print({Bt_mrks:}+Bt_mrks);	//デバック

	Int Bt_tmp = 0;			//倍速処理ループ
	Array Bt_Keys = ();

	Bt_mrks= (Bt_mrks, -11);	//配列差込み
	FOR(Int Bti=0; Bt_mrks(Bti)!=-11; Bti++){

		IF(Bt_mrks(Bti)==0 | Bt_mrks(Bti)==1  | Bt_mrks(Bti)==10 ){	//配列書込み

			Bt_Keys= (Bt_Keys, Bt_mrks(Bti));	//[0,1,10]

		}
		ELSE{
			IF(Bt_mrks(Bti)< 0 ){	Bt_tmp = -Bt_mrks(Bti);}	//[-1,-2]
			ELSE{			Bt_tmp = Bt_mrks(Bti);}		//[ 2, 3]

			FOR(Int Btj=Bt_tmp ;0< Btj ; Btj--){

				IF(Bt_mrks(Bti)< 0){
					Bt_Keys= (Bt_Keys, Bt_mrks(Bti)*2, -Bt_mrks(Bti)*2);
				}
				ELSE{
					Bt_Keys= (Bt_Keys, Bt_mrks(Bti));
				}
			}
		}
	}
 
	//エラーチェック、デバック 

	//Bt_mrks= (	1, 1, 2,   1,	-2,        0, 1, 1);
	//Bt_Keys= (	1, 1, 2,2, 1,   -4,4,-4,4, 0, 1, 1);	//出力サンプル
	//Elm_chg= (	0, 0, 0,0, 0,	  ,0,  ,0,  , 0, 0);
	//Oct_chg= (	0, 0, 0,1, 0,	  ,0,  ,1,  , 0, 0);

	//Print({Marks:}+Marks);
	//Print({Bt_Keys:}+Bt_Keys);
 
// エンジン初期化 

	Int Flag_Bt= 0;		//トップノートのボトムスイッチ

	Int Aryi =0;		//カウンタアップ抑制 - Elm_chg,Oct_chg
	Int Flag_Aryi=0;

	Str Piyo_str ={};
	Int Piyo_key = Master_key +Shift_key;
	Int Piyo = 0;		//実発音ノート
	Int Po = 0;
	Int Po_sct_out =0;

	Int Elm_sct_out =0;	//出音後のテンポラリ[E]
	Int Rdm_out = 0;	//事前減算ランダム出力[D]

	Int Mkt = 0;		//音符長テンポラリ
	Int Btt = 1;		//レングステンプ

	Int Pan_value =64;	//パンテンプ
	Int VCOvalue = 0;	//ベロシティテンポラリ
	Int Timvalue = 0;	//タイミングテンプ
	Int Gate_value = 0;	//ゲートテンプ

	Int Oct_i =0;
	//Int Rdm_i =0;

	Array VCO_ary	= ( 0, 0);
	Array Tim_ary	= ( 0, 0, 0, 0);
 
	//エンジン// 

	Bt_Keys= (Bt_Keys, -11);	//配列差込み
	FOR(Int I=0; Bt_Keys(I)!=-11; I++){

		// 音符長変換
		Btt=1;
		IF(Bt_Keys(I)< 0){	Mkt = -Bt_Keys(I) * Marks;}
		ELSE{
			IF(1< Bt_Keys(I) & Bt_Keys(I)!=10){	Mkt = Marks *Bt_Keys(I);}
			ELSE{
				IF(I< SizeOf(Bt_Keys)-2){			//[-11]分ラストキャンセル
				FOR(Int Bti =I+1; Bt_Keys(Bti)==10; Bti++){
					Btt++;
				}	}

				Mkt = Marks;
				//I = I +Btt-1; //最下段へ
			}
		}

		IF((TB*4)*Btt%Mkt != 0){ Print({Prsptn_Length_Error:}+{(}+(TB*4)*Btt+{/}+Mkt+{)} ); }
		Piyo_str ={l%(}+((TB*4)*Btt/Mkt)+{)};




	
	// MML 出力 
		IF(Bt_Keys(I)!=0 & Bt_Keys(I)!=1 & Bt_Keys(I)!=10){

			IF(Flag_Aryi==0){	//最初だけ
				IF(Bt_Keys(I)< 0){	Flag_Aryi= -Bt_Keys(I);}
				ELSE{			Flag_Aryi= Bt_Keys(I);}
			}
			ELSE{			//最初はキャンセル
				Aryi++;
				IF(Flag_Aryi<= Aryi+1){	Flag_Aryi= 0;}
			}
		}

		//Print({I:}+I+{ }+{Bt_Keys(I):}+Bt_Keys(I)+{ }+{Aryi:}+Aryi+{ }+{Flag_Aryi:}+Flag_Aryi);

		IF(Bt_Keys(I)<= 0){	Piyo_str =Piyo_str+{r};}
		ELSE{
			IF(Elm_rdmsw==1){
				IF(Flag_Bt==0){	Rdm_out= 0;	Flag_Bt= 1;}
				ELSE{
					WHILE(1){
						Rdm_out =Random(SizeOf(Elm_chd) );

						IF(Elm_sct_out==Rdm_out ){}
						ELSE{ EXIT;}
					}
					Elm_sct_out = Rdm_out;
				}
			}
			ELSE{
				//IF(SizeOf(Elm_chg)-1 < Rdm_i ){	Rdm_i =0;}		//ビート
				Rdm_out= Elm_chg(I-Aryi);					//エレメントセレクタ
				//Rdm_i++;
				IF(SizeOf(Elm_chd)-1< Rdm_out){	Rdm_out = SizeOf(Elm_chd)-1;}	//ヲーバーカット
			}

			//Print({Rdm_out:}+Rdm_out);	//デバック

		//パンアサイン
			Pan_value = 127 /(SizeOf(Elm_chd)-1) *Rdm_out;
			Piyo_str =Piyo_str+{Panpot(}+Pan_value+{)};


		//タイミング
			Timvalue = Tim_ary(I%SizeOf(Tim_ary));
			Piyo_str =Piyo_str+{t(}+(Tim+Timvalue)+{)};

		//ゲート
			Gate_value = Gate;
			Piyo_str =Piyo_str+{q(}+Gate_value+{)};

		//ヲクターブ
			IF(Oct_rdmsw==1){
				WHILE(1){
					Po =Random(Octave);

					IF(Po_sct_out==Po ){}
					ELSE{ EXIT;}
				}
				Po_sct_out = Po;
			}
			ELSE{
				Po = Oct_chg(I-Aryi);
			}
		//ヴェロシティ
			VCOvalue = -3*Po;
			VCOvalue = VCOvalue +VCO_ary( I%SizeOf(VCO_ary) );
			Piyo_str =Piyo_str+{v(}+(VCO+VCOvalue)+{)};
		//ノート
			Piyo = Piyo_key+Elm_chd(Rdm_out)+Po*12;
			Piyo_str =Piyo_str+{n(}+Piyo+{)};
		}　//EL
 
	//デバック 
	//Print({Piyo_str:}+Piyo_str);
 
		Piyo_str;	//出力 

		I = I +Btt-1; //最下段へ
	} //FOR
  
	//休符差込み// 

	IF (0< Marks_count){	IF(FR_sw==0){	R_str;}	} //休符出力
	//Print(R_str);
 
	//変更した数値を書きもどし 
	v(VCO);
	q(Gate);
	t(Tim);
  
} // Function 
  
//TrackName ={"リリックパターン　ver1.11"}// 
//Copyright ={"庚申works"}//

/*	Time    Module KeyIn   機能   MasterKey Chord   構成音
	(1:1:0) Type:0 KeyIn:C/T      M_Key:0 GM7/CM7 | o3gb`d`f#`c`e`g`b
*/
	
Function Lyricptn(	Array Ptn){ 


/*Function Padptn(	Int Part,			//小節数
                 	Int Parthalf,			//1/4小節数	[1,2,3]
                 	Int Chd_typertn,		//コード型	[Chdcall.h 47:M7]
                 	Int Shift_keyrtn,		//キー
                 	Int Module_typertn,		//モジュール
                 	Int Master_keyrtn ){*/		//転調
	
	//---[初期設定] 

	Int Module_num = 70;		//chordcallへ渡す値、旧Pad_module

	Int TB=TimeBase;	//タイムベース読込み
	Int TM_read=Time;	//リアルタイム読込み
	Str TM_write ={(}+((TM_read/(TB*4))+1)+{:}+(((TM_read%(TB*4))/TB)+1)+{:}+(TM_read%TB)+{)};

	//コードコール変数
	Int Master_key =48;
	Int Shift_key =0;
	Array Elm_chd = ();
	Array Elm_mod = ();

	Str Chd_out = {};
	Str Chord_str={};
	Str Mode_str ={};
 
	//コードコール呼び出し 
	Chdcall( Ptn(2), Ptn(3));	//Elm_chd()呼び出し
 
	//ローカル 

	Int Key_chk =Ptn(3)+Ptn(5);

	Array Key_Ary = ({C}, {C#}, {D}, {D#}, {E}, {F}, {F#}, {G}, {Ab}, {A}, {Bb}, {B} );

	//キー、キーイン出力
	Int Key_input =Key_chk %12;	IF(Key_input< 0){	Key_input= Key_input+12};

	Str Key_out =Key_Ary(Key_input);

	//ボトム出力
	Str Btm_out ={};
	Int Chd_type_btm_chk = 0;

	IF( 110<=Ptn(2) & Ptn(2)< 1300 ){

		Chd_type_btm_chk = ( Ptn(2)/100+Ptn(5) )%12;
		IF(Chd_type_btm_chk< 0){	Chd_type_btm_chk= Chd_type_btm_chk+12};

		Btm_out = {/}+Key_Ary(Chd_type_btm_chk);
	}

	//コード出力
	IF(Ptn(2)<= -1110 | 11010<= Ptn(2) ){	//ポリ、モード出力

		IF(11010<= Ptn(2) ){
			Chd_type_btm_chk = ( Ptn(2)/10000+Ptn(5) )%12;
			IF(Chd_type_btm_chk< 0){	Chd_type_btm_chk= Chd_type_btm_chk+12};

			Chd_out =Key_Ary(Chd_type_btm_chk)+Mode_str;	Btm_out ={/}+Key_out+Chord_str;
		}
		ELSE{	Chd_out =Key_out+Mode_str;	Btm_out = {/}+Chord_str;}

	}
	ELSE{	Chd_out = Key_out+Chord_str;}
 
	// コードカラーキー出力 
	Int Keyin_set_tmp = Keyin_set;			//親からローカルへコピー

	Keyin_set_tmp = Keyin_set_tmp%12;	IF(Keyin_set_tmp< 0){	Keyin_set_tmp= Keyin_set_tmp+12};

	Str Keyin_set_out = Key_Ary(Keyin_set_tmp);

	// コードカラー出力
	Int Chd_type_chk= Ptn(2)%100;

	Array Chd_Color_Ary = ({T     },{SD    },{D     },{T,SD  },{T,D   },{TM    },{SDM   },{DM    },{TM,SDM},{      } );

	Int Key_type_chk =( Ptn(3) -Keyin_set_tmp)%12;	IF(Key_type_chk< 0){ Key_type_chk= Key_type_chk+12};	//Keyin Cへ変更

	Str Chd_Color_out ={};

	SWITCH(Key_type_chk){
	CASE(0){	//C
		SWITCH(Chd_type_chk){
		CASE(10){	Chd_Color_out =Chd_Color_Ary(0);}	// CM  T
		CASE(16){	Chd_Color_out =Chd_Color_Ary(0);}	// C6  T
		CASE(17){	Chd_Color_out =Chd_Color_Ary(0);}	// CM7 T
		CASE(20){	Chd_Color_out =Chd_Color_Ary(5);}	// Cm  TM
		CASE(26){	Chd_Color_out =Chd_Color_Ary(5);}	// Cm6 TM
		CASE(27){	Chd_Color_out =Chd_Color_Ary(5);}	// Cm7 TM
		CASE(29){	Chd_Color_out =Chd_Color_Ary(5);}	// Cm add9 TM
		CASE(80){	Chd_Color_out =Chd_Color_Ary(0);}	// Caug7 T
		DEFAULT{	Chd_Color_out =Chd_Color_Ary(9);}
		}
	}
	CASE(1){	//C#
		SWITCH(Chd_type_chk){
		CASE(17){	Chd_Color_out =Chd_Color_Ary(6);}	// DbM7 SDM
		CASE(70){	Chd_Color_out =Chd_Color_Ary(2);}	// Db7 D
		DEFAULT{	Chd_Color_out =Chd_Color_Ary(9);}
		}
	}
	CASE(2){	//D
		SWITCH(Chd_type_chk){
		CASE(27){	Chd_Color_out =Chd_Color_Ary(1);}	// Dm7 SD
		CASE(50){	Chd_Color_out =Chd_Color_Ary(6);}	// Dm7b5 SDM
		DEFAULT{	Chd_Color_out =Chd_Color_Ary(9);}
		}
	}
	CASE(3){	//D#
		SWITCH(Chd_type_chk){
		CASE(17){	Chd_Color_out =Chd_Color_Ary(5);}	// EbM7 TM
		DEFAULT{	Chd_Color_out =Chd_Color_Ary(9);}
		}
	}
	CASE(4){	//E
		SWITCH(Chd_type_chk){
		CASE(27){	Chd_Color_out =Chd_Color_Ary(4);}	// Em7 T,D
		DEFAULT{	Chd_Color_out =Chd_Color_Ary(9);}
		}
	}
	CASE(5){	//F
		SWITCH(Chd_type_chk){
		CASE(17){	Chd_Color_out =Chd_Color_Ary(1);}	// FM7 SD
		CASE(20){	Chd_Color_out =Chd_Color_Ary(6);}	// Fm  SDM
		CASE(26){	Chd_Color_out =Chd_Color_Ary(6);}	// Fm6 SDM
		CASE(27){	Chd_Color_out =Chd_Color_Ary(6);}	// Fm7 SDM
		CASE(29){	Chd_Color_out =Chd_Color_Ary(6);}	// Fm add9 SDM
		CASE(87){	Chd_Color_out =Chd_Color_Ary(1);}	// Faug7 SD
		DEFAULT{	Chd_Color_out =Chd_Color_Ary(9);}
		}
	}
	CASE(6){	//F#
		SWITCH(Chd_type_chk){
		CASE(17){	Chd_Color_out =Chd_Color_Ary(0);}	// F#M7 T
		CASE(50){	Chd_Color_out =Chd_Color_Ary(3);}	// F#m7♭5 T,SD
		DEFAULT{	Chd_Color_out =Chd_Color_Ary(9);}
		}
	}
	CASE(7){	//G
		SWITCH(Chd_type_chk){
		CASE(27){	Chd_Color_out =Chd_Color_Ary(7);}	// Gm7 DM
		CASE(73){	Chd_Color_out =Chd_Color_Ary(7);}	// G7b9 DM
		CASE(70){	Chd_Color_out =Chd_Color_Ary(2);}	// G7 D
		CASE(47){	Chd_Color_out =Chd_Color_Ary(1);}	// G7sus4 SD
		CASE(16){	Chd_Color_out =Chd_Color_Ary(6);}	// G6 SDM
		DEFAULT{	Chd_Color_out =Chd_Color_Ary(9);}
		}
	}
	CASE(8){	//Ab
		SWITCH(Chd_type_chk){
		CASE(16){	Chd_Color_out =Chd_Color_Ary(6);}	// Ab6 SDM
		CASE(17){	Chd_Color_out =Chd_Color_Ary(8);}	// AbM7 TM,SDM
		DEFAULT{	Chd_Color_out =Chd_Color_Ary(9);}
		}
	}
	CASE(9){	//A
		SWITCH(Chd_type_chk){
		CASE(27){	Chd_Color_out =Chd_Color_Ary(0);}	// Am7 T
		CASE(50){	Chd_Color_out =Chd_Color_Ary(5);}	// Am7b5 TM
		DEFAULT{	Chd_Color_out =Chd_Color_Ary(9);}
		}
	}
	CASE(10){	//Bb
		SWITCH(Chd_type_chk){
		CASE(10){	Chd_Color_out =Chd_Color_Ary(7);}	// BbM DM
		CASE(16){	Chd_Color_out =Chd_Color_Ary(7);}	// Bb6 DM
		CASE(70){	Chd_Color_out =Chd_Color_Ary(7);}	// Bb7 DM
		CASE(17){	Chd_Color_out =Chd_Color_Ary(1);}	// BbM7 SD
		DEFAULT{	Chd_Color_out =Chd_Color_Ary(9);}
		}
	}
	CASE(11){	//B
		SWITCH(Chd_type_chk){
		CASE(50){	Chd_Color_out =Chd_Color_Ary(2);}	// Bm7b5 D
		DEFAULT{	Chd_Color_out =Chd_Color_Ary(9);}
		}
	}
	} //SWITCH
 
	//ノートナンバー変換出力	// o4cfg`c``cなどと出力 

	Array Elm_chk=();	// Elm_chdのコピー
	Int ECi=0;	Int FCi=0;
	Str Piyo_mml={};

	Array Elm_Ary = ({c}, {c#}, {d}, {d#}, {e}, {f}, {f#}, {g}, {g#}, {a}, {a#}, {b} );

	FOR(Int El_cki=0; El_cki< SizeOf(Elm_chd); El_cki++){

	Elm_chk(El_cki) =Key_chk +Elm_chd(El_cki);

	IF(Elm_chk(El_cki)< 0){	ECi = 4+(Elm_chk(El_cki)/12-1);}	// -13/12 o2, -6/12 o3
	ELSE{			ECi = 4+(Elm_chk(El_cki)/12);}		//   6/12 o4, 13/12 o5

	IF(El_cki==0){
		Piyo_mml ={o}+ECi;			//[o4]出力
		FCi = ECi;
	}
	ELSE{
		FOR(Int Oct_i=0; Oct_i< ECi -FCi; Oct_i++){
			Piyo_mml =Piyo_mml +{`};	//[`]出力
		}
	}
	Elm_chk(El_cki) =Elm_chk(El_cki) %12;

	IF(Elm_chk(El_cki)< 0){	Elm_chk(El_cki)= Elm_chk(El_cki)+12};

	Piyo_mml = Piyo_mml +Elm_Ary(Elm_chk(El_cki) );
	} //FOR
 
// リリック出力 --- 

	RESULT =TM_write+{ Type:}+Ptn(4)+{ KeyIn:}+Keyin_set_out+{/}+Chd_Color_out+{ M_Key:}+Ptn(5)+{ }+Chd_out+Btm_out+{ | }+Piyo_mml;
  
} // Function 
  
//TrackName ={"プリントタイム　ver0.01"}// 
//Copyright ={"庚申works"}//

//関数部---------//

/*Function Padptn(	Int Part_ADD,			//小節数加算
                 	Int Parthalf_ADD){*/		//1/4小節数加算

Function Prttime(	Array Prttime_ptn){

	//初期化

	Int Min_out =0;
	Int Sec_out =0;
	Int P_ADD = 0;
	Int Pf_ADD= 0;


	Min_out =(Part_ADD*4+Parthalf_ADD)/Tempo;		//Min_out =Min_out+Sec_out/60;
	Sec_out =(Part_ADD*4+Parthalf_ADD)%Tempo*60/Tempo;	//Sec_out=Sec_out%60;

	P_ADD = Part_ADD+Parthalf_ADD/4;
	Pf_ADD = Parthalf_ADD%4;

	// Strへ型合わせ
	RESULT ={"演奏時間 :"}+#STR(Min_out)+{"分 "}+#STR(Sec_out)+{"秒  "}+#STR(P_ADD)+{","}+#STR(Pf_ADD)+{"小節"};
} //
 
//TrackName ={"ディレイパターン　ver0.11"}// 
//Copyright ={"庚申works"}//

//関数部---------//
	
//	Function { 

	/*	------[変数の設定例]
	Int part1 = 4;					//整数型変数定義
		Str Lgh = {l24};			//文字列型変数定義
	#crd1 = { Sqrptn(60, 63, 67, 70, 53, 24)};	//マクロ定義 = 関数呼び出し
	*/

/*Function Dlyptn(	Int Part,			//小節数
                 	Int Parthalf){*/		//1/4小節数	[1,2,3]

Function Dlyptn(	Array Ptn){

	Int Part		=Ptn(0);
	//Int Parthalf		=Ptn(1);
	
	//---[初期設定] 

	//Int Module_num = 60;		//chordcallへ渡す値、旧Pad_module

//>>>エンジンコントローラー

	//[初期設定]

	//Int Marks_count = 0;	//音の長さ/1処理[M]

	Int TB=TimeBase;	//タイムベース読込み
	Int TP=Tempo;		//テンポ読込み
	//Print({TB:}+TB);
	//Print({TP:}+TP);

	Int Marks_count = TB*TP*Part/60/1000;
	//[57step]		[333]
	//Print({Marks_count:}+Marks_count);

	RESULT = Marks_count;	// ディレイタイム出力
  
} // Function 
  
//TrackName ={"休符パターン　ver0.11"}// 
//Copyright ={"庚申works"}//

//関数部---------//
	
//	Function { 

	/*	------[変数の設定例]
	Int part1 = 4;					//整数型変数定義
		Str Lgh = {l24};			//文字列型変数定義
	#crd1 = { Sqrptn(60, 63, 67, 70, 53, 24)};	//マクロ定義 = 関数呼び出し
	*/

/*Function Rptn(	Int Part,			//小節数
                 	Int Parthalf,			//1/4小節数	[1,2,3]
                 	Int Chd_typertn,		//コード型選択	[Chdcall.hファイル]
                 	Int Shift_keyrtn,		//キー		KeyC [MMLファイル]
                 	Int Module_typertn,		//モジュール型　TypeA [MMLファイル]
                 	Int Master_keyrtn ){*/		//転調

Function Rptn(	Array Ptn){

	Int Part		=Ptn(0);
	Int Parthalf		=Ptn(1);
	
	//---[初期設定] 

	//Int Module_num = 50;		//chordcallへ渡す値、旧Pad_module

//Chdcall( Ptn(2), Ptn(3), Ptn(4), Ptn(5) );


//>>>エンジンコントローラー

	//[初期設定]

	Int TB=TimeBase;	//タイムベース読込み
	//Int Marks_count = 0;

	Int Marks_count = Part*4 + Parthalf;	//音の長さ/1処理[M]

	//初期化

	Str Piyo_str ={};

	//ゲートアルペジ音符長

	//l%(480/4*Marks_count); //tempo = 120時、全音符で[480/4*4]

	//Print({Marks_count});
	//Print(Marks_count);

	Piyo_str = {l%(}+((TB*4)/4*Marks_count)+{)};

	Piyo_str =Piyo_str+{r};

	//Print(Piyo_str);

	Piyo_str;	//休符発行
  
} // Function 
  
		//初期化---------// 

/*	Include(Chdcall.h);
	Include(Dlyptn.h);
	Include(Sqrptn.h);
	Include(Apgptn.h);
	Include(Padptn.h);
	Include(Prsptn.h);
	Include(Rptn.h);
	Include(Lyricptn.h);
	Include(Prttime.h);*/

		Include(stdmsg.h);		//ミディ音源リセットのおまじない

		System.MeasureShift(1);
		Time( 0: 1: 0);
		ResetXG();ResetGS();ResetGM();	//音源リセット命令


 
		//メロディ・コード指定---// 

	
// Track =-1// ---グローバル共通 

//Sqrptn(1,0,10,KeyC,TypeA,0)	//
//Apgptn(1,0,10,KeyC,TypeA,0)	//
//Padptn(1,0,10,KeyC,TypeA,0)	//
//エンジン名 (小節数, 1/4小節数, コード型, キーシフト, モジュール, 転調キー)


	//M(127)	//Reverb(120)	//PitchBend(0);
	TimeBase=120	Tempo=86	Int TM_set=Time(1:1:0);

//演奏時間
	Int Part_ADD =0;	Int Parthalf_ADD =0;

//ファンクション

	Str Cpl_str={};		//モジュール変数書き込み

//ドラムマクロ

	Str RF={};	Str RH={};	Str LF={};	Str LH={};
	Str RF_half={};	Str RH_half={};	Str LF_half={};	Str LH_half={};


//ファンクション、転調

	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;

	Int Keyin_set = KeyC; 	//Lylicコード機能出力
 
// Track =0	// ---ローカル 

//呼び出しファンクション切換

	Str Section_str ={};	Str SctClr_str ={};	//Lyric出力

	Array Cluster= ();
	Array Ptn_num = ();	//コード配列指定

	Int Part_num=0;
	Int Parthalf_num=0;
	Int Chd_num= 0;
	Int Key_num =0;
	Int Mod_num = 0;
	Int Master_key_num =0;

	Array Ary_ChdA=();	Array Ary_KeyA=();	Array Ary_ModA=();

	Int Phi=0;		//小節処理テンプ
 
FOR(Int Trk=1; Trk<= 12; Trk++){ //トラックセレクト 

	IF(Trk== 2){Time=TM_set-TimeBase*2;	Lyric =Prttime(Part_ADD,Parthalf_ADD);}	//演奏時間出力

	IF(Trk== 5){Trk = 11;}	//skip

	SWITCH(Trk){
	CASE(1){	TR=Trk	CH=1	@5	Time=TM_set	v90 q60 t10	}	//Sqr
	CASE(2){	TR=Trk	CH=2	@5	Time=TM_set	v90 q60 t10	}	//Sqr

	CASE(3){	TR=Trk	CH=3	@90	Time=TM_set	v66 q99 t0 P(0)}	//Pad
	CASE(4){	TR=Trk	CH=4	@90	Time=TM_set	v66 q99 t0 P(127)}	//Pad

	CASE(11){	TR=Trk	CH=11	@82	Time=TM_set	v90 q100 t0 P(32)}	//Bass
	CASE(12){	TR=Trk	CH=12	@82	Time=TM_set	v90 q100 t0 P(96)}	//Bass
	} //SW
	
	FOR(Int JA =0; JA <=0 ; JA++){ //セクション 

	Section_str ={Section:}+JA+{ };

	//Clr_str;	//上から読込み Str Clr_str ={Master_key_num=KeyB; Tempo =79; Cluster= (	0, 1)};など

	SWITCH(JA){
	CASE(0){	Master_key_num=KeyC;	Tempo =79;

		Cluster= (	0,0,1,0,1,1,0,0,1,1);	//クラスター読込順
	}
	} //SW
 
	Cluster = (Cluster, -1);

	FOR(Int IA =0; Cluster(IA)!=-1 ; IA++){	//クラスター読込み 
	SctClr_str =Section_str+{Cluster }+(SizeOf(Cluster)-1)+{/}+(IA+1)+{ Number:}+(Cluster(IA));

	SWITCH(Cluster(IA) ){	//コード指定

	//Chd_str;
	//上から読込み Str Chd_str = {CASE(0){ Keyin_set = KeyC; Ary_ChdA=(); Ary_KeyA=(); Ary_ModA=();} };

		CASE(0){
		Keyin_set = KeyC;
	Ary_ChdA=(	71717,	,	,	,	81727,	,	,		);
	Ary_KeyA=(	KeyC,	,	,	,	KeyC,	,	,		);
	Ary_ModA=(	0,	,	,	,	,	,	,		);

		//	GM7/CM7				AbM7/Cm7
		//	/T				SDM/TM
		}
		CASE(1){
		Keyin_set = KeyC;
	Ary_ChdA=(	92717,	,	,	,	101727,	,	,		);
	Ary_KeyA=(	KeyAf,	,	,	,	KeyG,	,	,		);
	Ary_ModA=(	0,	,	,	,	,	,	,		);

		//	Am7/AbM7			BbM7/Gm7
		//	T/TM				SD/DM
		}
	} //SW
 
	IF(SizeOf(Ary_ChdA)!=SizeOf(Ary_KeyA) ){Print({ERR:Ary_KeyA_count});}
	IF(SizeOf(Ary_ChdA)!=SizeOf(Ary_ModA) ){Print({ERR:Ary_ModA_count});}

FOR(Int HA =0; HA< SizeOf(Ary_ChdA); HA++){	//半小節処理 

	Part_num=0;	Parthalf_num=0;

	IF(Channel==10){		//Track --ドラム
		Mod_num = Ary_ModA(HA);

		Phi= 1;

		WHILE(1){
			IF(Ary_ModA(HA+Phi)%1==0){ EXIT;}		//数字チェック
			ELSE{
				IF(SizeOf(Ary_ChdA)<= HA+Phi){ EXIT;}	//コード配列使用
				ELSE{	Phi++;}				//Nullでスラー加算
			}
		}
	}
	ELSE{			//Track --ドラム以外の処理

		Chd_num = Ary_ChdA(HA);
		Key_num = Ary_KeyA(HA);

		IF(Ary_ModA(HA)%1==0){	Mod_num = Ary_ModA(HA);} //数字があれば書き換え

		Phi= 1;
		WHILE(1){
			IF(Ary_ChdA(HA+Phi)%1==0){ EXIT;}		//数字チェック
			ELSE{
				IF(SizeOf(Ary_ChdA)<= HA+Phi){ EXIT;}	//コード配列使用
				ELSE{	Phi++;}				//Nullでスラー加算
			}
		}
	}

	Part_num= Phi/2;	IF(Phi%2==1){	Parthalf_num =2;}
 
Cpl_str={};		//再初期化

SWITCH(Track){		//固定 
CASE(1){	//総パート数
		Part_ADD =Part_ADD+Part_num;	Parthalf_ADD =Parthalf_ADD+Parthalf_num;
		IF(HA==0){Lyric ={------ }+SctClr_str;}

} //Sqr
CASE(3){
	Cpl_str={
		Shift_key =Shift_key-12;	//Chd_invert =0;
	};
} //Pad
CASE(4){
	Cpl_str={
		Shift_key =Shift_key-12;	Chd_invert =5;
	};
} //Pad Drop2,3

} //SW
 
	Ptn_num =(Part_num,Parthalf_num,Chd_num,Key_num,Mod_num,Master_key_num); 

	//Print({Ptn_num:}+Ptn_num);
 
	IF(JA==0){ 
	SWITCH(Track){		//呼び出し

	CASE(1){
		Cpl_str={	Shift_key =Shift_key-12};
		Lyric =Lyricptn(Ptn_num);	//読込み前指定//演奏前コード出力
		Sqrptn(Ptn_num);
	} //Sqr
	CASE(2){
		Cpl_str={	Shift_key =Shift_key-12};
		Sqrptn(Ptn_num);
	} //Sqr
	CASE(3){
		Padptn(Ptn_num);
	} //Pad
	CASE(4){
		Padptn(Ptn_num);
	} //Pad Drop2,3
	CASE(11){
		Cpl_str={
			Shift_key =Shift_key-24;
			Elm_chd=(0);
			};
		Padptn(Ptn_num);
	} //Bass
	CASE(12){
		Cpl_str={
			Shift_key =Shift_key-24;
			Elm_chd=(0);
			};
		Padptn(Ptn_num);
	} //Bass
	DEFAULT{
		Rptn(Ptn_num);
	}

	} //SW
	}

  
// } FOR /HA /IA /JA /Trk 

	Phi--;		//減算、Phiカウンタ数増分のみ加算
	HA= HA +Phi;	//ここで加算

			}
		}
	}
} //
   
