我正在尝试使用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);
WaveProvider的Read方法只能有一个使用者。我建议在向BufferedWaveProvider添加字节时,也将它们添加到内存流中。另一种选择是从IWaveProvider继承,在Read方法中,从BufferedWaveProvider读取,并在返回之前将读取的内容写入MemoryStream。然后使用WaveProvider给WaveOut。
有一个关于代码项目的链接,以及您可以下载的源代码,以帮助您完成正在尝试的操作。
codeproject上有一个这样做的示例项目:
http://www.codeproject.com/KB/cs/Streaming_wave_audio.aspx
我不知道延迟有多低。
作为一个编解码器,我推荐Speex(至少在语音方面)。它是免费的,开源的,提供低延迟和低带宽。