音声バッファ

http://d.hatena.ne.jp/shotaro_tsuji/20070602/1180785883

出来る限りバッファのアドレスをセットするまでの時間を削ったけどもう無理だわ。操作中だけでも割り込み禁止に出来たらいいのに・・・

そんなにレイテンシ必要なしくみなんだろうか?

http://d.hatena.ne.jp/shotaro_tsuji/20070607/1181208812

波形を観察すると伸びた方の波形はほぼ同じ波形が2回繰り返されている。

どういうことだ?

PCのサウンドのインタフェースは知らないけど、昔デジカメの音声周りやってたときの経験から言うと、バッファ管理が怪しい。
例えば、100msを1ブロックとして、ブロックをB[0...]で表すと、音声再生開始の時はB[0]から再生を開始して、割り込みを待たずにB[1]の設定をする。ハードがB[0]の再生を完了したら、次に設定されているB[1]を再生開始しながら、割り込みを発生させてくる。それを受けたドライバは、B[2]の設定をする。
B[0]の完了のタイミングでB[1]を設定するのではないのがミソだ。設定するのは次の次。そうしないと、B[0]の再生が完了した時点でハードはまだB[1]の設定を受け取ってないので、B[0]を2回再生してしまう。

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。