0

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

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

我对这种方法的主要问题是,片段之间通常会出现独特的爆裂声(因为每个块不一定是零中心或零端的)。

问题:

是否有更合适或更直接的方法在 C# 中播放实时流式传输 PCM 音频?

如果没有,我是否可以采取其他步骤来使多个播放运行更顺畅?

4

1 回答 1

0

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

我建议你检查这个链接:Recording and Playing Sound with the Waveform Audio Interface http://msdn.microsoft.com/en-us/library/aa446573.aspx 有一些 SoundPlayer 的例子(跳过那些),但也如何使用 WaveOut。看部分Playing with WaveOut

SoundPlayer 通常用于通知声音。

于 2013-09-14T08:13:32.900 回答