当我从.wav文件的字节数组播放音频时,Naudio库中的Naudio Buffer Full Exception

时间:2018-01-05 05:59:22

标签: exception buffer naudio

  

当我设置延迟20但在某些带有Windows 10的系统中wav文件缓慢播放时,它的工作正常。

private static void waveSourceAgent_DataAvailable(object sender, WaveInEventArgs e)
    {
        int delay = 10; 
        recordedMsgBuffer = RECORDING_BUFFER[0].recordedMsgBuffer;
        int iterations = recordedMsgBuffer.Length / 320;
        int remainingBytes = recordedMsgBuffer.Length % 320;
        byte[] buffer = new byte[320];
        for (int i = 0; i < iterations; i++)
        {
            byte[] tempbuff = new byte[320];
            for (int j = 0; j < 320; j++)
            {
                tempbuff[j] = recordedMsgBuffer[(i * 320) + j];
            }
            if (waveProviderReciever != null)
                waveProviderReciever.AddSamples(tempbuff, 0, tempbuff.Length);
            Thread.Sleep(delay);
    }

1 个答案:

答案 0 :(得分:0)

看起来您正试图通过将其放入DataAvailable来播放正在接收的数据(但不确定如何 - 您未使用BufferedWaveProvider args)

这项工作的秘诀在于音频放入缓冲区的速度应与读出的速度相匹配。如果记录和回放的WaveFormat匹配(它们需要它们才能工作),那么缓冲区永远不应该填满,除非回放意外停止。

如果您接收数据的速度比播放速度快得多(例如,您正在下载预先录制的音频文件),那么您需要增加缓冲区大小,或者不要将任何新数据放入缓冲区,直到那里可用空间更大。