『教育用G3Xパッチメイカー』(Step 9 コーラスも増設の巻)
【解説】
プログラムが長くなってきたので、何度も掲載されている部分はわかりきってると思うので、複数行を1行につなげて
表示しているよ。「;」さえ末尾につけていればこうしても動作は変わらないので豆知識として覚えておいてねw
<script language="JavaScript">
function g3xpm(){
//「MAKE PATCH DATA!」ボタンを押した時に作動するメインのプログラム
PGX="";
for(ct=0;ct<50;ct++){
//NRセクション
NRU=edu.NRsel.value;NRT=edu.Thrsh.value;if(NRT==999)NRT=Math.floor(Math.random()*25);
NRL=edu.lev1.value;
//DRIVEセクション
DRU=edu.DRIVEsel.value;if(DRU==888){DRU=Math.floor(Math.random()*20)+71;if(DRU>84)DRU=DRU+1;}
DRG=edu.Gain1.value;if(DRG==999)DRG=Math.floor(Math.random()*101);
DRT=edu.Tone.value;if(DRT==999)DRT=Math.floor(Math.random()*101);DRL=edu.lev2.value;
//AMPセクション
APU=edu.AMPsel.value;if(APU==888){APU=Math.floor(Math.random()*22)+92;if(APU>104)APU=APU+3;}
APG=edu.Gain2.value;if(APG==999)APG=Math.floor(Math.random()*101);
APT=edu.Tube.value;if(APT==999)APT=Math.floor(Math.random()*101);
APC=edu.Cab.value;if(APC==888)APC=cabkansuu(0);if(APC==777)APC=cabkansuu(APU);
APL=edu.lev3.value;
//CHORUSセクション
CHU=edu.CHsel.value;
if(CHU==888){
CHU=Math.floor(Math.random()*3)+41; //★1-a 41,44,45から選ぶ
if(CHU>41)CHU=CHU+2; //★1-b
}
CHR=edu.Rate.value;
if(CHR==999)CHR=Math.floor(Math.random()*db(CHU,33)); //★2-a
CHD=edu.Depth.value;
if(CHD==999)CHD=Math.floor(Math.random()*db(CHU,23)); //★2-b
CHM=edu.Mix1.value;
if(CHM==999)CHM=Math.floor(Math.random()*db(CHU,43)); //★2-c
CHL=edu.lev4.value;
//各Moduleデータの書き込み
px="<Module0><Prm0>1</Prm0><Prm1>"+NRU+"</Prm1>";
px=px+"<Prm2>"+NRT+"</Prm2><Prm3>"+NRL+"</Prm3></Module0>";
px=px+"<Module1><Prm0>1</Prm0><Prm1>"+DRU+"</Prm1>";
px=px+"<Prm2>"+DRG+"</Prm2><Prm3>"+DRT+"</Prm3><Prm4>"+DRL+"</Prm4></Module1>";
px=px+"<Module2><Prm0>1</Prm0><Prm1>"+APU+"</Prm1>";
px=px+"<Prm2>"+APG+"</Prm2><Prm3>"+APT+"</Prm3><Prm4>"+APL+"</Prm4>";
px=px+"<Prm5>60</Prm5><Prm6>60</Prm6><Prm7>60</Prm7><Prm8>60</Prm8>";
px=px+"<Prm9>"+APC+"</Prm9></Module2>";
px=px+"<Module3><Prm0>1</Prm0><Prm1>"+CHU+"</Prm1>"; //★3-a
px=px+"<Prm2>"+CHD+"</Prm2><Prm3>"+CHR+"</Prm3><Prm4>"+CHM+"</Prm4>"; //★3-b
px=px+"<Prm5>6</Prm5><Prm6>"+CHL+"</Prm6></Module3>"; //★3-c
px=px+"<Module4><Prm1>107</Prm1></Module4><Module5><Prm1>107</Prm1></Module5>";
px=px+"<Module6><Prm0>100</Prm0></Module6>";
header="<PatchData><Name>TestPatch</Name>";
header=header+"<Tooltip></Tooltip><Keywords></Keywords><Version>0.12</Version>";
footer="</PatchData>";
patch=header+px+footer;
PGX=PGX+patch;
}
gheader="<PatchSet><Product>G3X</Product>";
gheader=gheader+"<Version>1</Version><Name>TestGroup</Name><Patches>";
gfooter="</Patches></PatchSet>";
PatchGroup=gheader+PGX+gfooter;
edu.kekka.value=PatchGroup;
}
function cabkansuu(n){
//キャビネット番号を返すための関数
if(n==0)x=Math.floor(Math.random()*22);
if(n!=0){
if(n==92)x=0;if(n==111)x=1;if(n==104)x=2;if(n==94)x=3;if(n==93)x=4;if(n==116)x=5;
if(n==95)x=6;if(n==103)x=7;if(n==114)x=8;if(n==102)x=9;if(n==108)x=10;if(n==96)x=11;
if(n==97)x=12;if(n==109)x=13;if(n==98)x=14;if(n==115)x=15;if(n==99)x=16;if(n==110)x=17;
if(n==100)x=18;if(n==101)x=19;if(n==112)x=20;if(n==113)x=21;if(n==107)x=22;
}
return x;
}
function db(m,k){
//各エフェクトのパラメータ情報を保管するデータベース関数
b=new Array();
//◆NRセクションのエフェクト
b[28]="NoiseGate,0,23,2,,,,,,,,,,,,,,,,,THRSH,1,25,25,25,0,1,,,,Level,0,150,151,151,0,1,,,,0,0,0,0,0,0,0,,,,0,0,0,1,1,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
b[29]="DirtyGate,0,23,2,,,,,,,,,,,,,,,,,THRSH,1,25,25,25,0,1,,,,Level,0,150,151,151,0,1,,,,0,0,0,0,0,0,0,,,,0,0,0,1,1,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
//◆CHORUSセクションのエフェクト
b[41]="Chorus,5,346,4,4,,,,,,,,,,,,,,,,Depth,0,100,101,101,0,0,,,,Rate,1,50,50,50,0,1,,,,Mix,0,100,101,101,0,1,,,,Tone,0,10,11,11,0,0,,,,Level,0,150,151,151,0,1,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
b[44]="StereoCHo,5,2346,4,4,,,,,,,,,,,,,,,,Depth,0,100,101,101,0,1,,,,Rate,1,50,50,50,0,1,,,,Mix,0,100,101,101,0,1,,,,Tone,0,10,11,11,0,0,,,,Level,0,150,151,151,0,1,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
b[45]="Ensemble,5,346,4,4,,,,,,,,,,,,,,,,Depth,0,100,101,101,0,0,,,,Rate,1,50,50,50,0,6,,,,Mix,0,100,101,101,0,1,,,,Tone,0,10,11,11,0,0,,,,Level,0,150,151,151,0,1,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
//◆DRIVEセクションのエフェクト
b[71]="Booster,3,24,2,4,,,,,,,,,,,,,,,,Gain,0,100,101,101,0,1,,,,Tone,0,100,101,101,0,0,,,,Level,0,150,151,151,0,1,,,,0,0,0,1,1,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
b[72]="OverDrive,3,24,2,2,,,,,,,,,,,,,,,,Gain,0,100,101,101,0,1,,,,Tone,0,100,101,101,0,0,,,,Level,0,150,151,151,0,1,,,,0,0,0,1,1,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
b[73]="T Scream,3,24,2,2,,,,,,,,,,,,,,,,Gain,0,100,101,101,0,1,,,,Tone,0,100,101,101,0,0,,,,Level,0,150,151,151,0,1,,,,0,0,0,1,1,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
b[74]="Governor,3,24,2,2,,,,,,,,,,,,,,,,Gain,0,100,101,101,0,1,,,,Tone,0,100,101,101,0,0,,,,Level,0,150,151,151,0,1,,,,0,0,0,1,1,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
b[75]="Dist+,3,24,2,2,,,,,,,,,,,,,,,,Gain,0,100,101,101,0,1,,,,Tone,0,100,101,101,0,0,,,,Level,0,150,151,151,0,1,,,,0,0,0,1,1,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
b[76]="Dist 1,3,24,2,2,,,,,,,,,,,,,,,,Gain,0,100,101,101,0,1,,,,Tone,0,100,101,101,0,0,,,,Level,0,150,151,151,0,1,,,,0,0,0,1,1,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
b[77]="Squeak,3,24,2,2,,,,,,,,,,,,,,,,Gain,0,100,101,101,0,1,,,,Tone,0,100,101,101,0,0,,,,Level,0,150,151,151,0,1,,,,0,0,0,1,1,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
b[78]="FuzzSmile,3,24,2,2,,,,,,,,,,,,,,,,Gain,0,100,101,101,0,1,,,,Tone,0,100,101,101,0,0,,,,Level,0,150,151,151,0,1,,,,0,0,0,1,1,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
b[79]="GreatMuff,3,24,2,2,,,,,,,,,,,,,,,,Gain,0,100,101,101,0,1,,,,Tone,0,100,101,101,0,0,,,,Level,0,150,151,151,0,1,,,,0,0,0,1,1,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
b[80]="MetalWRLD,3,24,2,2,,,,,,,,,,,,,,,,Gain,0,100,101,101,0,1,,,,Tone,0,100,101,101,0,0,,,,Level,0,150,151,151,0,1,,,,0,0,0,1,1,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
b[81]="HotBox,3,24,2,2,,,,,,,,,,,,,,,,Gain,0,100,101,101,0,1,,,,Tone,0,100,101,101,0,0,,,,Level,0,150,151,151,0,1,,,,0,0,0,1,1,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
b[82]="Z Wild,3,24,2,2,,,,,,,,,,,,,,,,Gain,0,100,101,101,0,1,,,,Tone,0,100,101,101,0,0,,,,Level,0,150,151,151,0,1,,,,0,0,0,1,1,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
b[83]="Lead,3,24,2,2,,,,,,,,,,,,,,,,Gain,0,100,101,101,0,1,,,,Tone,0,100,101,101,0,0,,,,Level,0,150,151,151,0,1,,,,0,0,0,1,1,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
b[84]="ExtremeDS,3,24,2,2,,,,,,,,,,,,,,,,Gain,0,100,101,101,0,1,,,,Tone,0,100,101,101,0,0,,,,Level,0,150,151,151,0,1,,,,0,0,0,1,1,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
b[86]="Z Clean,0,24,2,2,,,,,,,,,,,,,,,,Gain,0,100,101,101,0,1,,,,Tone,0,100,101,101,0,0,,,,Level,0,150,151,151,0,1,,,,0,0,0,1,1,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
b[87]="Z MP1,3,24,2,2,,,,,,,,,,,,,,,,Gain,0,100,101,101,0,1,,,,Tone,0,100,101,101,0,0,,,,Level,0,150,151,151,0,1,,,,0,0,0,1,1,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
b[88]="Z Bottom,3,24,2,2,,,,,,,,,,,,,,,,Gain,0,100,101,101,0,1,,,,Tone,0,100,101,101,0,0,,,,Level,0,150,151,151,0,1,,,,0,0,0,1,1,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
b[89]="Z Dream,3,24,2,2,,,,,,,,,,,,,,,,Gain,0,100,101,101,0,1,,,,Tone,0,100,101,101,0,0,,,,Level,0,150,151,151,0,1,,,,0,0,0,1,1,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
b[90]="Z Scream,3,24,2,2,,,,,,,,,,,,,,,,Gain,0,100,101,101,0,1,,,,Tone,0,100,101,101,0,0,,,,Level,0,150,151,151,0,1,,,,0,0,0,1,1,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
b[91]="Z Neos,3,24,2,2,,,,,,,,,,,,,,,,Gain,0,100,101,101,0,1,,,,Tone,0,100,101,101,0,0,,,,Level,0,150,151,151,0,1,,,,0,0,0,1,1,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
//◆Throughの場合
b[107]="Through,0,0,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,0,0,0,0,0,0,0,,,,";
hbx=b[m].split(",");
xx=hbx[k];
return xx;
}
</script>
★印のついたポイント部分を解説していくよ。まず★1-aは、新たに追加されたCHORUSセクションのユニットを
ランダムに選ぶ場合の処理だよ。41,44,45の中から選ぶので、41から43の乱数を発生させて、41以上の場合は
2を加える(★1-b)という処理をしているyo この2行全体が、if(CHU==888){ }という大括弧の中にくくられている
ことに注意してね。そうしないと必要ないときまでCHUに2が加えられちゃっておかしな動作になるからねw
★2では、いよいよデータベース関数から数値を読ませる処理を取り入れているよ。★2-aでやっていることは、
「もし、Rateでfreeが選択されているなら、データベース関数dbの当該エフェクト行(要素番号CHU番目の行)の33番
目のデータを読み込んで、0からその数値までの乱数をつくって小数以下を切り捨てて変数CHRに代入する」という
処理だよ。33番目のデータには何を格納してあるかというと、Prm3のとり得る値の個数を入れてるよ。つまり、とり得
る値の範囲いっぱいの中からランダムに数値を決めているということになるよ。★2-b、★2-cも同様に各パラメータ
の値を範囲いっぱいの中からランダムに決めているよ。
★3ではCHORUSセクションの値をModule3に書き込んでいるよ。★3-aではPrm1にID番号であるCHUを入れてるよ。
★3-bではマニュアル掲載順どおりにDepth, Rate, Mixを入れてるよ。画面上の順番とは一部異なってるので注意し
てね。★3-cではPrm5にトーンの値を6固定で入れちゃってるよ。これも改造のしどころだろうねw(含み笑) 最後に
LevelをPrm6に入れて完了だよ。
あとはデータベース関数だね。こいつはStep 7で説明したのと同じ構造で、縦と横に数が増えただけなので特に難
しい点はないと思うよ。今回はまだコーラスセクションでしかこの関数を使ってないけど、次Step以降はすべての
セクションでこの関数を読ませるよ。データも今回はNR、CHORUS、DRIVEだけ掲載したけど、次Step以降はG3Xの
すべてのエフェクトのデータを網羅したフルバージョンにするよ。いよいよ手加減なしの本番バージョンで動作する
ようになるので楽しみにしていてくれw(上から笑)
このデータベースにのってる各Prmのデータの書き方はボクのやり方なので、各自好きなようにデータ形式を考えれ
ばいいんだけど、まあいろいろ使い回すのに便利なように今回新たに拡張してこうしてみたから、特に理由がなけれ
ばこのまま使ってくれたらいいと思うyo このデータ形式については次Stepで詳しく解説するよw
プログラムが大きくなってきたけど、ついて来られてるかな?(苦笑) ここまでで主要なノウハウはほぼ出そろった
からあとはこれらを上手く使いこなしていくだけだよw 今が一番難しく感じるピークだと思うから頑張ってyo(微笑)