从网络流中实时播放PCM(波)音频

时间:2013-09-14 04:20:42

标签: c# streaming wav networkstream

this question非常相似,我有网络微控制器,它收集PCM音频(8位,8 kHz)并通过TCP网络套接字将数据作为原始字节流式传输。我能够连接到设备,打开NetworkStream,并从收集的数据中创建RIFF / wave文件。

我想更进一步,并启用测量的实时回放。到目前为止,我的方法是将传入的数据缓冲到具有适当RIFF标头的多个MemoryStream中,并且当每个块完成时使用System.Media.SoundPlayer来播放波形文件段。为了避免高延迟,每个段只有0.5秒长。

我使用这种方法的主要问题是,各段之间通常会有一种独特的弹出声音(因为每个块不一定是零中心或零端)。

问题:

是否有更合适或直接的方法在C#中播放直播PCM音频?

如果没有,是否还有其他步骤可以让多个播放更顺畅地运行?

1 个答案:

答案 0 :(得分:0)

我不认为你可以在不使用SoundPlayer弹出声音的情况下进行管理,因为推送缓冲区不会有任何延迟。通常你应该总是有一个额外的缓冲区缓冲。但是SoundPlayer只缓冲一个缓冲区。即使声音播放器发出准备好的事件,你也已经来不及播放新的声音了。

我建议您查看此链接:使用波形音频接口录制和播放声音 http://msdn.microsoft.com/en-us/library/aa446573.aspx 有一些SoundPlayer的例子(跳过那些),但也有如何使用WaveOut。请查看Playing with WaveOut部分。

SoundPlayer通常用于通知声音。