使用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);
});
}
播放时音频在声音中产生间隙。每 100 毫秒在方法内发送一次Consume()
样本。是否存在WaveOut()
播放速度比我们所说的方法快的问题Consume()
?我们如何同步这种读取和播放。
这里更好的选择是 RawSourceWaveStream
而不是 BufferedWaveProvider
,这将允许您直接从包含完整音频的MemoryStream
播放。