内存样本中的Naudio播放会在声音中产生延迟和不美观的间隙

时间:2015-06-16 10:21:41

标签: c# audio naudio waveout

使用 BufferedWaveProvider 播放存储在数据库中的double[]

音频样本
 _bufferedWaveProvider = new BufferedWaveProvider(Format)
                                {
                                    DiscardOnBufferOverflow = true,
                                    BufferDuration = TimeSpan.FromSeconds(5)
                                };

public void Consume(double[] samples, int offset, int count)
{
   samples.Paginate<double, float>(offset, count)
          .ForEach(x =>
          {
            byte[] consumeBuffer = x.ToBytes(ref _consumeBuffer);

            _bufferedWaveProvider.AddSamples(consumeBuffer, 0, _consumeBuffer.Length);
           });
}

播放时的音频会产生声音间隙。样本在Consume()方法内每隔100ms发送一次。是否存在WaveOut()比我们调用Consume()方法更快的问题?我们如何同步这种阅读和回放。

1 个答案:

答案 0 :(得分:0)

此处更好的选择是RawSourceWaveStream而不是BufferedWaveProvider,这样您就可以直接从包含完整音频的MemoryStream播放。