2017-02-08 10 views
0

Windows 7 x86アプリケーションでXAudio2.7を使用してストリーミングオーディオサンプルをレンダリングしています。 ソース音声は、8KHz、モノラル、16ビット/サンプルのウェーブ形式で作成されます。 その後、私は音声コールバックで待機し、新しいバッファを送信するバックグラウンドスレッドを実行します。声を止めて、アプリケーションがアクセス違反の例外でクラッシュするまで、すべてがうまくいきます。ソース音声を停止した後にXAudio2.7がクラッシュする

Stack trace

が、私は声を停止する前にエンジンのスレッドを停止しようとしたが、結果は同じです:ダンプファイルを作成した後、私はクラッシュがXAudio2内部処理スレッド上で起こることに気付きます。あなたがバッファのためにポイントのメモリが提出解放しないとき

、 おかげ

答えて

0

を教えてください?音声がそのバッファの処理を終了するまで、すべてのメモリポインタを有効にしておかなければならないことに注意してください。データは、コピーされていないワーカースレッドによってリアルタイムでアプリケーションメモリから読み込まれます。

声にStopを呼び出すと、スレッドが完全とすぐに返すよう動作を停止しましたという意味ではありません。音声用のすべてのバッファが終了したことを確認するには、Stopの後にFlushSourceBuffersを使用します。

(void)voice->Stop(0); 
(void)voice->FlushSourceBuffers(); 

あなたはDirectX Tool Kit for Audioの実装を見てください。

ここで、XAudio 2.7を使用しているので、このknown issueに注意する必要があります。

+0

こんにちはチャック、応答に感謝します。バッファのメモリは、アプリケーションの起動時に割り当てられ、FIFOキューにプールされるため、決して解放されません。私は、Stopの後にFlushSourceBuffersを呼び出します。私は停止前にDiscontinuity APIを使ってみましたが、どちらも役に立たなかった。私が "既知の問題"を指摘してくれてありがとう –

関連する問題