| 先頭へ | 1つ前へ | 次へ |
【解説】
この講座で使ってるエフェクトでテンポ同期があるのはDELAYセクションだけなのでちょっと淋しいけど、まあ内蔵リズム
マシンとの同期で遊べることを前提に勉強してくれyo ここで使ってるディレイユニットはテンポ同期に関して言えば次の
4種類に分類されるよ。いずれも最短の長さは16分音符になってるよ。
・グループ1 最長2小節まで同期のもの TapeEcho, ModDelay, PhaseDly, FilterDly, DynaDelay
・グループ2 最長2小節半まで同期のもの Delay, AnalogDly
・グループ3 最長1小節まで同期のもの ReverseDL
・グループ4 同期しないもの PitchDly
今回はめったに使わないような長さのテンポ同期は無視してシンプルな設計でいこうと思うよ。16分音符、8分音符、
付点8分音符、4分音符、付点4分音符、2分音符、全音符(1小節)、2小節の8通りを選べるようにするよ。つまりグル
ープ2はグループ1と同等の扱いにできちゃうよ。注意すべきはReverseDLが選ばれてるときに2小節の指定がされた
場合どうするかだけだね。ルールどおりにいくなら勝手な代替はしないということになるけど、ディレイタイムは0にはで
きない仕様なのでどうしても何かの数値を入れる必要があるよ。そこで考えてみるとReverseDLはそもそも逆回転ディ
レイで奇妙な音を鳴らして特殊効果を出すエフェクトユニットなので、2小節長が1小節長になっても得られる雰囲気に
大差はないよw というわけで、ここは例外的に1小節長に代替することで対応するyo(アバウト笑)
<select name="Time">
<option value=10015>2 bars</option>
<option value=10011>1 bar</option>
<option value=10009>1/2 note</option>
<option value=10008>1.5/4 note</option>
<option value=10007>1/4 note</option>
<option value=10006>1.5/8 note</option>
<option value=10004>1/8 note</option>
<option value=10001>1/16 note</option>
<option value=888 selected>free</option>
<option value=9>10</option>
<option value=19>20</option>
<option value=29>30</option>
<option value=39>40</option>
<option value=49>50</option>
<option value=99>100</option>
<option value=199>200</option>
<option value=299>300</option>
<option value=399>400</option>
<option value=499>500</option>
<option value=749>750</option>
<option value=999>1000</option>
</select>
とりあえず上のようなvalueを「Time」のセレクトメニューに仕込んでおくよ。下側が通常のディレイタイム10msから
1000msまでの指定。真ん中付近のfreeの行がその中からランダムに選ぶ指定。そこより上がテンポ同期の指定だよ。
それぞれvalueを1万番台にすることで、1万以上ならこっちという処理が簡単になるからね。で、下2桁の値がテンポ同
期の範囲でとり得る値の中でそのテンポ長は下から何個目(先頭を1とカウント)のものになるかという値になってるよ。
つまり、データベースから参照してきた通常データ範囲での値のとり得る個数に、ここのvalue値から10000引いた数を
足してやれば、Timeのパラメータに代入すべき値が導き出されるというわけだyo
DLT=edu.Time.value; //基本パターン
if(DLT==888){ //freeで選択肢の中からランダムに決める場合
timedata="9,19,29,39,49,99,199,299,399,499,749,999";
tdx=timedata.split(",");
tnumber=Math.floor(Math.random()*12);
DLT=tdx[tnumber];
}
if((DLT<10000)&&(DLU==57))DLT=DLT-9; //ReverseDLのTimeは先頭が1から始まらないので補正
DLonoff=1; //原則はディレイユニットをONにする
if(DLT>10000){ //テンポ同期が選ばれている場合
Dsync=DLT-10000; //セレクトのvalueから10000を引く
if((DLU==57)&&(Dsync==16))Dsync=12; //もしReverseDLで2小節なら1小節に代替
Nnum=db(DLU,23); //通常データ範囲でのとり得る値の個数
DLT=Nnum*1+Dsync*1-1; //テンポ同期の範囲で下から何個目かの数を足してやる
if(DLU==6)DLonoff=0; //PitchDlyの場合はテンポ同期にならないのでディレイユニット自体OFFにする
}
上がTimeの値を変数DLTに代入する部分だよ。さらに今回PitchDlyでテンポ同期が指定された場合は同期ができない
のでDELAYセクションをoffにすることで「筋を通す」ことにしたyo その部分の記述が下のようになってるよ。
px=px+"<Module4><Prm0>"+DLonoff+"</Prm0><Prm1>"+DLU+"</Prm1><Prm2>"+DLT+"</Prm2>";
変数DLonoffが1ならonで、0ならoffだよ。まあ、ユニットによってパラメータの対応範囲が例外的に違っていたりするの
で、そういう処理が面倒くさいところなんだよね。というわけでテンポ同期の指定もあっけなく終わったね。データベース
関数の扱い方と、どこに何のパラメータを入れたらいいのかさえきちんと把握していれば、あとはそうたいした処理はし
てないんだよねw(苦笑)
ところが、ここまで完成させた後で動作チェックしている中で、G3X本体のテンポ同期に不具合を発見したよ。四分音符
2個分の1/2 noteよりも長いテンポ長で正しく作動していないことを発見したよ。とりあえず、これはボクがどうこうでき
る問題ではないのでバグフィックスを待つしかないne せっかく上のように2小節まで対応するようにプログラムしたけ
ど、とりあえず上限を1/2 noteまでに限定せざるを得ないね。早々の修正を望みたいyo 次Stepでは約束してたスタイ
ルシートと、Edit&Shareの画面をきちんと100パッチ分表示させる方法wを解説するyo
| 先頭へ | 1つ前へ | 次へ |