libpd の API では、一度に 64 サンプルのフレームでのみオーディオを処理できます。私が過去に行ったことは、オーディオ デバイスのバッファ サイズを 64 で割り切れる数に設定することでした。問題はありません。
次に、ASIO 互換の Windows アプリを作成する必要があります。私は RtAudio を使用しています。問題は、RtAudio API を使用して ASIO サウンド カード (Roland FA-66) を初期化すると、バッファ サイズ パラメータが無視され、64 で割り切れない独自のいずれかが選択されることです。
回避策を考えました。これはオーディオ コールバック関数で行われます。
- バッファー サイズが 64 で割り切れないかどうかを確認します。割り切れる場合は、次のようにします。
- libpd に、必要なサイズよりも大きい数のフレームを処理し、それを一時バッファーに格納するように指示します。
- memcpy を使用して、適切な量のフレームを一時バッファーから出力バッファーにコピーします。
- memcpy を使用して追加のサンプルを別のバッファー (extra と呼ばれる) に保存し、次のオーディオ コールバックの呼び出しで使用します。
私はこれを試していませんが、うまくいくと思います。
ただし、この問題を処理するための「標準」または「よく知られている」手順があるかどうかを知りたいです。私が気付いていない警告やヒントがあるのではないでしょうか?