| 先頭へ | 1つ前へ | 次へ |
【解説】
プログラムが長くなってきたけど、全体を把握してもらうためにも、もうしばらくは全プログラムを掲載して解説して
いくよ。今回は後半部分にキャブを選択するための関数「cabkansuu()」を書いているのに注目してね。とりあえず
関数の実例に馴れてもらって、パラメータの巨大データ関数は次Step以降導入する予定だよ。てか、ここまでの
ユニットだけなら単純なのでデータベース使わなくても記述できちゃうんだよねw(微笑)
<script language="JavaScript">
function g3xpm(){
PGX="";
for(ct=0;ct<20;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; //★ポイント1-a
if(DRU>84)DRU=DRU+1; //★ポイント1-b
}
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; //★ポイント2-a
if(APU>104)APU=APU+3; //★ポイント2-b
}
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); //★ポイント3-a
if(APC==777)APC=cabkansuu(APU); //★ポイント3-b
APL=edu.lev3.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>"; //★ポイント4-a
px=px+"<Prm9>"+APC+"</Prm9></Module2>"; //★ポイント4-b
px=px+"<Module3><Prm1>107</Prm1></Module3>";
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){ //★ポイント5
//nが0の場合(any of Cabが選ばれている場合)
if(n==0)x=Math.floor(Math.random()*22);
//nが0でない場合(same with Ampが選ばれていてnにAPUの値が入っている場合)
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; //アンプセクションでthroughが選ばれてる場合
}
return x;
}
</script>
大半の部分はこれまでに説明してあるとおりだから、「★ポイント」とマークしている新出事項について解説して
いくよ。まずポイント1から。DRIVEセクションのユニット選択も「any of DRIVE」を選べばランダムにどれかが選
択されるように改造したよ。歪みペダルのID番号は71-84, 86-91の範囲に割り当てられてるよ。なので71-90
の範囲の乱数を得て(★1-a)、結果が85以上なら1を足してやる(★1-b)というふうに処理してるよ。
ポイント2もほぼやってることは同じだよ。アンプモデルのID番号は92-104, 108-116の範囲に割り当てられて
いるよ。中間が3つ飛んでるから、92-113の乱数を得て(★2-a)結果が105以上なら3を足す(★2-b)という処理
をしているよ。
ポイント3は、AMPセクションでCabに条件指定が選ばれている場合の処理だよ。どちらも関数cabkansuu()に飛
んで値を返してもらうという処理にしてるよ。関数の内容はあとで説明するよ。
ポイント4-aはAMPセクションのパラメータの書き込みの一部なんだけど、Prm5がトレブル、Prm6がミドル、Prm7
がバス、Prm8がプレゼンスだよ。これらも選択するようにできるんだけど画面がゴチャゴチャするからここでは
全部60という値をぶちこんでるよw(乱暴笑) まあ、改造したい人はここらあたりが手のつけどころの一つだねw
ポイント4-bでは関数で得られたキャブ番号が入った変数APCでPrm9のキャブを設定してるよ。
ポイント5がいよいよ関数cabkansuu()だね。まずはタイトル行を見てほしい。cabkansuu(n)というふうに括弧の
中にnが入ってるよね。ポイント3-a、ポイント3-bでそれぞれ(0)、(APU)と括弧内に送る数を入れていたけど、
そいつがここではnという変数に代入されて利用されるということになるよ。で、さっそく次の行からnが使われて
いるね。nが0の場合ということは、ポイント3-aから飛んできた場合ということになるので、APCが888の場合、
つまり、any of Cabが選ばれている場合の処理ということになるよ。これはキャブ番号0-21の中から好きなのを
選べばいいだけなので乱数を使って簡単に記述できるよね。この程度ならプログラム本文に書いちゃってもいい
くらいなんだけど、みなさんの練習のためにあえて関数で処理しといたよw あと、キャブの番号はマニュアルの
別表1に載ってる順で上から0-21になってて、最後のOFFが22番になっているので覚えておいてne
その次の行からが本命だね。nが0でない場合とは、ポイント3-bから飛んできた場合のほうで、same with Amp
が選択されている場合の処理だね。この場合、nには変数APUが代入されるんだけど、このAPUというのはAMP
セクションのユニットを決めるときにアンプのID番号を入れた変数だよね。この数値がそのまま使えればラクな
んだけどそうはいかないんだよねw(苦笑) G5でアンプモデルが追加されたときにマニュアル上での掲載順を
いじったんだけど、そのときにキャブ番号は新しい掲載順にあわせて付番されたけど、アンプモデルのID番号は
従来のものは据え置きになったのでチグハグなことになったよw(失笑) そのチグハグを処理するためにこの
関数をつくってるというわけだよw(とばっちり笑)
if(n==92)x=0;の行がFD COMBOを表していて、ID番号が92、キャブ番号が0という意味だよ。以下DELUXE-R
以降マニュアル掲載順どおりに記述しているよ。最後のID番号107というのはG3Xでは「through」を意味してい
て、なんのユニットも選ばれていない状態がID番号107になるよ。ここで思い出してほしいのが、Step 6で作った
歪みメイカー2では、未使用のモジュールがすべて「M-Filter」で埋まっていたことだよ。あれは、107を入力して
through状態を指定していなかったからすべての未定義データが「0」と認識されてしまい、その結果G3XがID番
号0のM-Filterが選択状態「0」=OFFの状態で選ばれていると読み取ってあのように表示していたということだよw
つまり、G3Xで空きモジュールを指定するにはそのモジュールのPrm1で「107」を入力しといてやらないといけな
いというルールがあるわけだよ。今回は増量して30パッチまで生成されるようになってるけど、モジュール3,4,5
についてもきっちり「107」を書きこんでいるので「謎のM-Filter」は登場しないようになってるyo(微笑)
| 先頭へ | 1つ前へ | 次へ |