utoroのJS解説

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

ルート音を刻ませよう

前回は小節内でルート音を1回切り替えることができるようになりました。今回はルート音を16分音符単位で刻んで鳴らすことができるよう改良します。まずは下記のリンクを右クリックして別ウインドウで開いてください。

サンプル14(ルート音を刻ませる)

「Play」ボタンをクリックするとベースが小刻みにピッキングされているのがわかると思います。中ほどにある「Bass Pattern」という行のチェックボックスで示されたパターンで各小節中で発音させているというわけです。

ソースを見ていきましょう。htmlで追加したのはBass Patternの1行ですが、全体のレイアウトをパートごとにまとめて表示することで見やすくしました。

var mbnは次に消音すべきベースの音高が入ります。前回まではvar cbnのみでしたが、今回から「ある音が鳴ってる途中でcbnのみ切り替わる」という事態が起こりうるようになったので、cbnとmbnを分けて管理するようにしました。前回はルート切り替え時に必ず発音していましたが、今回からルートの切り替えと発音消音は無関係になっています。まあ通常は切り替えのタイミングで鳴らすとは思いますが。

メイン関数であるfunction tick()中では、bppにそのcountで弾くか否かをt/fで取得。bvelにベロシティを取得。弾くcountならばまず消音。その後、前回つくった記述で最新のcbnを確定し、鳴らすならばcbn+36を鳴らし、cbnをmbnに入れるという流れです。

演奏をStopしたときに最後の音を消す処理をfunction loopplay()とfunction play()に入れていましたので、こちらもcbnではなくmbn+36を消音するよう変更しています。

function bed()は、Bass Patternの行にあるチェックボックス等をいじったときにコールしていますが、自動保存を実装するときに中身をつくることにします。

これで小節内でルート音を刻むタイミングを指定することができるようになりました。