今日はPyscleソースとにらめっこです。わかったことといえば...。
MMEやDirectSoundを使用した場合の動きです。
1.Driverを初期化
2.ポーリングスレッド(PollerThread)のスタート
3.ポーリングスレッドが、10ms-20msおきにDoBlocks()を呼び出す。
4.DoBlocks()はあるサンプル数分のWaveデータを作成し、出力する。出力するデータの作成はPlayer::Work()を呼び出すことで行う。DoBlocks()が終わったら3.に戻る
5.Player::Work()はシーケンスのコントロール、MIDIイベントの処理(InjectMIDI)、Machine::Work()を呼び出してドライバに出力するWaveデータの作成を行う。
気になるのは、
・MIDI入力の処理
これは別スレッドでMIDIイベントをキューにため込んでPlayer::Work()中で処理してるのかな?とか思いながらMIDIのソースを見始めているところです。
・ポーリングスレッドの間隔
10ms-20msは妥当なのか?PsycleでMIDIキーボードを使用し、リアルタイムレコーディングをするとちょっとモタるのはこのせい?もしくはレイテンシのせい?