3

C++ で小さな .wav ファイルを再生するプログラムを作成しようとしています。DirectX SDK ドキュメントに従って、セカンダリ静的バッファーで書き込みおよび再生するようにプログラムしました。.wav ファイルの再生の最後に、非常に目立つ「クリック」ノイズがあることを除いて、正常に動作します。DirectSound を使用していることがわかっている他のゲームにはそれがないため、オーディオ ハードウェア側の欠陥ではないことは確かです。

サイクルごとに GetCurrentPosition をポーリングし、終了する直前に停止しようとしましたが、信頼性がありませんでした。プライマリ バッファで再生される .wav はループする必要があるため、プライマリ バッファでは再生できません。これは望ましくありません。

誰もこの問題の修正を知っていますか? 前もって感謝します。

4

1 に答える 1

4

問題の WAV ファイルと、WAV ファイルをサウンド バッファにロードするコードの両方を確認する必要があります。しかし、ここにいくつかの推測があります。

私の最初の推測では、あなたが持っている WAV ファイルをビジュアル オーディオ エディタにロードすると、サウンドが次第に無音になるのではなく、突然終了することがわかります。これにより、ほとんどすべてのオーディオ プレーヤーで突然の「ポップ」ノイズが発生します。

私の 2 番目の推測は、最後にガベージ データをサウンド バッファにコピーしていることです。一部の WAV ファイルには、DATA チャンクの末尾を過ぎたファイルの末尾に追加のメタデータがあります。サンプルをコピーするサウンド ファイル内の位置をどのように決定したかはわかりませんが、これを台無しにするのは簡単です。WAV ファイルを 16 進エディタ (Visual Studio など) で調べて、DATA チャンクの長さが主張どおりの大きさであることを確認しましたか? ReadFile 呼び出しをデバッグしてファイルからバッファにデータをコピーするとき、バッファの最後の数バイトが 16 進エディタで見たものと一致するかどうかを調べましたか?

于 2010-06-28T06:46:03.207 に答える