1
private unsafe static void AudioStreamCallback(IntPtr buff, Int32 size) 
{
    byte[] samples = new byte[size];
    Marshal.Copy(buff, samples, 0, size);

    waveProvider.AddSamples(samples, 0, size);
    bytes_played += size;
}

上記のコードでbuffは、 で記述されたネイティブ dll から返されCます。ロギングのために、サンプルに追加されたバイト数を出力しました。このログに基づくと、約 2.4 Mb のサンプルを再生した後、以下のエラーが表示されます。

未処理の例外: System.InvalidOperationException: NAudio.Wave.BufferedWaveProvider.AddSamples (Byte[] バッファー、Int32 オフセット、Int32 カウント) でバッファーがいっぱいです

新しいサンプルを追加する前に、バッファを解放するか、古いエントリを確実にフラッシュする必要がありますか? ソースコードを見ましたが、バッファサイズに関連するものは見つかりませんでした。私は何かが欠けていますか?

ご協力いただきありがとうございます。

4

1 に答える 1

3

BufferedWaveProvider固定サイズの循環バッファによって支えられています。いっぱいになると、例外がスローされます(NAudioの新しいバージョンでは、例外をスローするか、オーディオをサイレントに破棄するかを構成できます)。BufferDuration最新のコードでは、最初の呼び出しの前にAddSamples、バッファサイズをデフォルトの5秒相当のオーディオから増やすように設定することもできます。

于 2011-07-22T06:57:21.990 に答える