S.F.Tracker(42)

公開:2005-06-02 19:53
更新:2020-02-15 04:36
カテゴリ:sftracker,windows,audio,tracker

(きょうより、「ですます」調から、「である」調に変更します。内容は「寒い」まままです。)

そろそろ、何か音を鳴らしてみたいなと思い始めた。

今のところ、ASIOのみ音が鳴らせそうな雰囲気まできている。といってもVSTPluginを読み込んで鳴らしてみるとかはできない。モジュラー部分はまったく手をつけていないからだ。
WAVEファイルを読み込んで鳴らしてみようとしているレベルである。

Psycleでは音声は内部的にfloatで処理して、インターフェースに合わせてサンプルフォーマットを変換し、出力している。
私もそれに倣おうとしているが、少し工夫をしてみたい。

Psycleの場合、サンプルデータの作成→インターフェースへの出力は1つのスレッドで行っているのだが、ここを2つのスレッドに分けるのだ。
サンプルデータ生成スレッドは、せっせとデータを生成する。そのあとを追いかけるように出力スレッドが処理するわけだ。これを処理するために、出力インターフェースとの間にリングバッファを設ける。

利点は、サンプルデータの作成負荷に、出力処理が影響されないことだ。プチプチ音が途切れにくくなるのではないかと考えている。

でも、再生開始時にASIOのBufferSwitch()が呼び出されたとき、Psycleだとバッファと出力との同期が取れるが、私方式だと少しレイテンシが発生する恐れがある。BufferSwitch時にリングバッファにデータが蓄積されていない場合があるからだ。というか一発目は蓄積されていないな、多分。