1

libpd の API では、一度に 64 サンプルのフレームでのみオーディオを処理できます。私が過去に行ったことは、オーディオ デバイスのバッファ サイズを 64 で割り切れる数に設定することでした。問題はありません。

次に、ASIO 互換の Windows アプリを作成する必要があります。私は RtAudio を使用しています。問題は、RtAudio API を使用して ASIO サウンド カード (Roland FA-66) を初期化すると、バッファ サイズ パラメータが無視され、64 で割り切れない独自のいずれかが選択されることです。

回避策を考えました。これはオーディオ コールバック関数で行われます。

  1. バッファー サイズが 64 で割り切れないかどうかを確認します。割り切れる場合は、次のようにします。
  2. libpd に、必要なサイズよりも大きい数のフレームを処理し、それを一時バッファーに格納するように指示します。
  3. memcpy を使用して、適切な量のフレームを一時バッファーから出力バッファーにコピーします。
  4. memcpy を使用して追加のサンプルを別のバッファー (extra と呼ばれる) に保存し、次のオーディオ コールバックの呼び出しで使用します。

私はこれを試していませんが、うまくいくと思います。

ただし、この問題を処理するための「標準」または「よく知られている」手順があるかどうかを知りたいです。私が気付いていない警告やヒントがあるのではないでしょうか?

4

1 に答える 1

1

あなたのアプローチは有効なようです。注意する必要があるのは、メモリの配置だけです。

memcpyこれは、頭痛の種となる可能性のある の落とし穴に関する優れた (そして非常に短い) 記事です: http://www.codepolice.org/c/memcpy.html

于 2014-06-28T00:10:02.107 に答える