『教育用G3Xパッチメイカー』(Step 9 コーラスも増設の巻)
先頭へ1つ前へ次へ

 /    (^)  (^) \   

コーラスセクションも追加して、全体の3分の2が完成するyo
パラメータのデータベース関数も導入されて、いよいよ本格的に動作するようになるよw(快笑)
UNIT (1st) (2nd) (3rd) LEVEL
NR NRsel Thrsh lev1
DRIVE DRIVEsel Gain1 Tone lev2
AMP AMPsel Gain2 Tube Cab lev3
CHORUS CHsel Rate Depth Mix1 lev4
Contents of patch group file 

Just copy this data and paste it to ".g3xa" file of Edit&Share on any text-editing software.

【解説】

プログラムが長くなってきたので、何度も掲載されている部分はわかりきってると思うので、複数行を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(微笑)

先頭へ1つ前へ次へ