使用NAudio录制到MemoryStream

本文关键字:MemoryStream NAudio 使用 | 更新日期: 2023-09-27 18:26:16

我正在尝试使用NAudio从微型电话进行记录,并将数据保存到MemoryStream。似乎没有明显的方法,每次我尝试从BufferedWaveProvider中读取时,使用WaveOut.Play时录音将不再播放。如果我删除读取尝试,它的录制效果会很好。有没有办法录制到MemoryStream?

这就是我试图将其转换为MemoryStream的方式:

Byte[] stream = new byte[bwp.BufferedBytes]; 
bwp.Read(stream, 0, bwp.BufferedBytes);
wo.Play(); //plays fine only if I comment out the Read line above
MemoryStream ms = new MemoryStream(stream);

使用NAudio录制到MemoryStream

WaveProvider的Read方法只能有一个使用者。我建议在向BufferedWaveProvider添加字节时,也将它们添加到内存流中。另一种选择是从IWaveProvider继承,在Read方法中,从BufferedWaveProvider读取,并在返回之前将读取的内容写入MemoryStream。然后使用WaveProvider给WaveOut。

有一个关于代码项目的链接,以及您可以下载的源代码,以帮助您完成正在尝试的操作。

codeproject上有一个这样做的示例项目:
http://www.codeproject.com/KB/cs/Streaming_wave_audio.aspx
我不知道延迟有多低。

作为一个编解码器,我推荐Speex(至少在语音方面)。它是免费的,开源的,提供低延迟和低带宽。