utoroのJS解説

JavaScriptプログラムの解説。動作条件の説明があるので先頭から読んでください。

ベースを鳴らそう

8小節のループマシンになったので、リズムだけではなく、ベースも鳴らせるようにしたいと思います。まずはシンプルに各小節のルート音だけをボーンと鳴らしてみます。下記のリンクを右クリックして別ウインドウで開いてください。

サンプル12(ベースを鳴らす)

小節の進行表を一番上にもってきました。「Root Note」の行に各小節のルート音のセレクタが配置されています。「Play」をクリックすると、ルート音とリズムが順に再生されていきます。

ソースを見ていきましょう。htmlはルート音の行を追加しただけです。ここでもこの1行をformで囲っているので、チェックボックスのform番号がまた1つずれているので注意してください。

var cbnは現在選ばれているルート音のインデックス値(0〜16)が入り、それに+36することでベースの音高にしています。初期値は0です。

function tick()の前半部分にベースの処理を書いています。playing==2のループプレイの時のみで、かつ、count==0の小節の先頭でのみ処理を行います。まずは鳴っている音を消音し、var cbnを更新して新しい音を発音します。これだけだと演奏停止したときに最後の音が鳴りっぱなしになるので、消音命令の「Jazz.MidiOut(0x81,cbn+36,0);」をfunction play()とfunction loopplay()の中のStopしたときの処理に追加しています。長くなるのでソースの引用掲載はしませんが。

最後の部分はセレクタの中身を8個つくってやる記述です。初期値をi==kとしているので、Cから順に半音ずつ上がる進行になっています。個別に初期値を変えてやれば、プリセットのルート進行を変更できます。

これで8小節のループマシンでリズムとルート音が鳴らせるようになりました。