ステップシーケンサ型リズムマシンのプログラム

ステップ型シーケンサのプログラムで、テンポにしたがって正しいタイミングで順にサウンドを再生する方法を知るためにDirectSound によるドラム マシンの作成C#ソースファイルを熟読中。

RhythmMachine.csのRythmMachineAppクラス

Rhythm.csのMixerクラスで定義されているAdd()メソッドで各楽器用のTrack型オブジェクトをArrayList Mixer.m_Tracksに追加。

Rhythm.csのTrackクラスで定義されているInit()メソッドの引数として、byte配列によるビートのパターンを渡す。(このプログラムではbyte配列の1要素が音楽の音符に相当する。明示的ではないが、1要素を8分音符と解釈すると8ビート、16分音符と解釈すると16ビートを表現できる。)Init()メソッドは、受け取ったbyte型の引数が1なら真、0なら偽として、配列pattern[i]に、ビートのパターンをセット。

Rhythm.cs MixerクラスのMix16Mono()メソッド

引数sizeを2で割ったものをDoMix()メソッドに引数として渡す。ここで、解説文にある次の作業が行われる。

ミキサーは、ビート期間に対応するサンプルの数を計算し、出力ストリームの合成が進行するのに合わせて、現在のビート位置を進めます。また、サンプルのブロックを生成するために、ミキサーは単に現在のビートで再生されているパッチを足し合わせます。

DoMix()メソッドは渡された引数に応じて配列m_MixBufferの要素の数を設定する。
short型の配列m_MixBuffer16に配列m_MixBufferの内容を代入。

この部分の詳細を後日。