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