『教育用G3Xパッチメイカー』(Step 14 音量連動補正の巻)
先頭へ1つ前へ次へ

 /    (^)  (^) \   

今回は音量連動補正のオプションを組み込んでみるyo
ユニットによってバラつきはあるけど、爆音防止にそこそこ効果があると思うyo(新機能笑)
UNIT (1st) (2nd) (3rd) LEVEL
NR Thrsh
DRIVE Gain1 Tone‏ ‏ ‏
AMP Gain2 Tube‏ ‏ ‏ Cab
CHORUS Rate ‏ ‎ Depth Mix1
DELAY Time ‏ ‎ F.B. ‏ ‏ ‏ Mix2
REVERB Decay Tone2 Mix3
EX-PEDAL  Input Vol  Output Vol  Auto Assign  Off PATCH LEVEL
Contents of patch group file 

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

【解説】

今回は音量連動補正システムを組み込んでみるyo これはパッチメイカーシリーズでもまだ実装したことがないので、最
新のシステムを実験を兼ねて導入することになるyo(人柱笑) 基本的な仕組みはGainが大きいときはLEVELを下げて、
逆にGainが小さいときはレベルを少し上げてやるというものにするよ。DRIVEとAMPのセクションだけを対象にするyo

LEVELのセレクトメニューでは通常30から150までの値が選べるようにしてあるよ。ここに「auto」というのを追加して、これ
が選ばれている場合に作動するようにするyo とりあえずデフォルトレベルはDRIVEは80、AMPは90にして、これを基準
に増減させてみるよ。各ユニットごとに音量バランスが結構異なっているので、これで完璧という補正をしようと思うなら選
ばれたユニットごとに補正する値を変えたらいいと思うけど、今回はそこまで手間をかける気はないyo(簡易笑) まあ、
補正し過ぎで変になってもいやなので、補正量は控えめにしとくよ。基本的にはボリュームペダルを常に使用して爆音を
予防するのが賢明な使い方だと思うyo とりあえずDRIVEユニットのほうのJavaScriptを見てみるよ。

      DRL=edu.lev2.value;
      if(DRL==22){    //autoが選ばれている場合
         DRL=110;
         if(DRG>11)DRL=100;
         if(DRG>21)DRL=90;
         if(DRG>31)DRL=80;
         if(DRG>61)DRL=70;
         if(DRG>71)DRL=65;
         if(DRG>81)DRL=60;
         if(DRG>91)DRL=50;
      }


autoが選択されている場合はvalueに22が入っているので、if以下のルーチンに入るよ。低いほうの値から順にチェックし
ていって、Gainが大きいほどLevelを削って代入しているだけだよ。AMPセクションも同じような感じで記述してるyo まあ、
これのキモは、上の補正値をどこまで実用的な値にすりあわせていくかだよね。今後、微調整して随時変更していくyo

簡単にできちゃったので、もう一つ改造しちゃうyo これまで試しにいろいろパッチグループを作って実際にG3v2で鳴らし
てみてるけど、正直毎回毎回コーラスやリバーブがワンワンかかるのはしつこいなと思ったyo じゃあ、(through)を選ん
でオフにすりゃいいじゃないかと思うところだけど、そうすると今度は80パッチが全部コーラス無しになっちゃうのでそれ
はそれで面白くないよねw(苦笑) というわけで、たまには休めよ!という仕組みを導入してみるyo

やり方は単純。各セクションのUNITを選ぶセレクトメニューに「any of ◯◯」というのがあるけど、これの下に「any 75%」
「any 66%」「any 50%」「any 33%」という項目を追加するよ。それぞれ、4回に3回はどれかが選ばれる、3回に2回はどれ
かが選ばれる、2回に1回はどれかが選ばれる、3回に1回はどれかが選ばれる、という意味だよ。つまり、休みになる頻
度が選べるというわけだyo(優れモノ笑)

      NRU=edu.NRsel.value;
      //any of NRの場合
      if(NRU==888)NRU=Math.floor(Math.random()*3)+27;
      //★any ◯◯%の場合
      NRB=0;
      if(NRU==675)NRB="27,28,29,107";                                   //25%が107(through)
      if(NRU==666)NRB="27,28,29,27,28,29,107,107,107";             //33%が107(through)
      if(NRU==650)NRB="27,28,29,107,107,107";                        //50%が107(through)
      if(NRU==633)NRB="27,28,29,107,107,107,107,107,107";        //66%が107(through)
      if(NRB!=0){        //NRBが0でない場合、つまりany ◯◯%のどれかが選ばれている場合の処理
            NRx=NRB.split(",");    //NRBを配列変数NRxに格納する
            NRlen=NRx.length;    //配列変数NRxの配列要素の個数をNRlenに代入する
            Rnum=Math.floor(Math.random()*NRlen);   //Rnumに配列要素の個数内の乱数整数を得る
            NRU=NRx[Rnum];      //配列変数NRxのRnum番目のデータ数値をNRUに代入する
      }


NRセクションを例に解説するyo ユニットのID番号を変数NRUに入れればいいんだよ。★以降が追加部分だよ。まず、
NRBという変数に初期状態で0を入れるよ。any ◯◯% はセレクトメニューではvalueに675-633の値が入ってるよ。そ
れぞれの場合において、NRユニット3種類のID番号(27,28,29)とthroughの107番が選択させたい比率に従ってコンマ
区切りテキストに入ってるyo それらをNRBに代入してデイレイタイムを選択するときに使った手法で、配列変数を使っ
て乱数で決定した要素番号の値をNRUに代入しているよ。「.length」というのを配列変数名の後ろにつけると、その配
列変数の配列要素の個数を得ることができるので覚えておいてne これと同様の処理を各ユニットに追記してるyo
まあ、こういうのを6種類追記するのは結構たいへんなんだけどねw(手間笑)

あと説明しておくべきことは、フットスイッチのアサインと、テンポ同期の指定もさせたい場合と、スタイルシートに関する
ことかなw もうちょっと連載は続くyo(延長笑)

先頭へ1つ前へ次へ