2

私はWindowsマルチメディアAPIを使用して、ウェーブオーディオ(waveInOpenおよびその友人)を記録および処理しています。ラウンドロビン方式で少数のバッファを使用したいと思います。

デバイスにバッファを追加する前に使用することになっていること、およびWaveデバイスが「バッファをアプリケーションに戻した」後、割り当てを解除する前にwaveInPrepareHeader呼び出すことになっていることを私は知っています。waveInUnprepareHeader

私の質問は、バッファを再利用するために準備を解除して再準備する必要がありますか?または、以前に使用したバッファをデバイスに追加することはできますか?

また、これをどのスレッドで行うかは重要ですか?オーディオシステムに属するワーカースレッドで呼び出されているように見えるコールバック関数を使用しています。waveInUnprepareHeaderコールバック中に、、、waveInPrepareHeaderおよびwaveInAddBufferそのスレッドで呼び出すことはできますか?

4

2 に答える 2

2

はい、私の経験では、毎回準備と準備解除を呼び出す必要があります。同じものを再利用しようとすると、メモリからエラーが返されます。

また、通常、コールバックを処理しているスレッドで準備と準備解除を呼び出します。

于 2010-11-21T17:18:01.027 に答える
0

バッファを作成するときは、を呼び出しますwaveInPrepareHeader。次に、デバイスから返されたバッファを呼び出す前に、準備されたフラグを設定するだけです。waveInAddBuffer

pHdr->dwFlags = WHDR_PREPARED;

これは、コールバックスレッド(またはメッセージハンドラー)で実行できます。

于 2010-11-21T21:31:58.027 に答える