directsound を介して単純な wav ファイルを再生する ac# アプリケーションを持っています。私が持っていたテストデータでは、コードはうまくいきました。しかし、実世界のデータを使用すると、セカンダリ バッファーの作成時に非常に役に立たないエラーが発生しました:「ArgumentException: 値が期待される範囲内にありません。」
テスト wav のビット レートは 512kbps、オーディオ サンプル サイズは 16 ビット、オーディオ サンプル レートは 32kHz でした。新しいwavはそれぞれ1152kbps、24bit、48kHzです。これらのより大きな値に対処するためにdirectsoundを取得するにはどうすればよいですか、またはファイルを再生する前にこれらの値をプログラムで検出するにはどうすればよいですか?
私が使用しているマネージ DirectX v9.00.1126 です。サンプル コードを以下に示します。
using DS = Microsoft.DirectX.DirectSound;
...
DS.Device device = new DS.Device();
device.SetCooperativeLevel(this, CooperativeLevel.Normal);
...
BufferDescription bufferDesc = new BufferDescription();
bufferDesc.ControlEffects = false;
...
try
{
SecondaryBuffer sound = new SecondaryBuffer(path, bufferDesc, device);
sound.Play(0, BufferPlayFlags.Default);
}
...
追加情報: 実際の wav ファイルは Windows Media Player でも再生されず、ファイルを再生するにはコーデックが必要ですが、winamp では正常に再生されます。
追加情報 2: 動作中のテスト データと実際の不良データのバイト数を比較すると、RIFF チャンクを超えると、不良データには "bext" チャンクが含まれていることがわかります。これは、インターネットがブロードキャストに関連付けられたメタデータであると通知するものです。テスト データは直接 fmt チャンクに入ります。/is/ 不正なデータに fmt チャンクがあるため、形式が不適切なのか、それともローダーが fmt データをさらに探す必要があるのかはわかりません。データを提供してくれた人々から、このルージュ ベクスト チャンクに関する情報を入手できるかどうかを確認できます。彼らがそれを削除できれば、私のコードは引き続き機能する可能性があります。