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
*/