与this question非常相似,我有网络微控制器,它收集PCM音频(8位,8 kHz)并通过TCP网络套接字将数据作为原始字节流式传输。我能够连接到设备,打开NetworkStream
,并从收集的数据中创建RIFF / wave文件。
我想更进一步,并启用测量的实时回放。到目前为止,我的方法是将传入的数据缓冲到具有适当RIFF标头的多个MemoryStream
中,并且当每个块完成时使用System.Media.SoundPlayer
来播放波形文件段。为了避免高延迟,每个段只有0.5秒长。
我使用这种方法的主要问题是,各段之间通常会有一种独特的弹出声音(因为每个块不一定是零中心或零端)。
问题:
是否有更合适或直接的方法在C#中播放直播PCM音频?
如果没有,是否还有其他步骤可以让多个播放更顺畅地运行?
答案 0 :(得分:0)
我不认为你可以在不使用SoundPlayer弹出声音的情况下进行管理,因为推送缓冲区不会有任何延迟。通常你应该总是有一个额外的缓冲区缓冲。但是SoundPlayer只缓冲一个缓冲区。即使声音播放器发出准备好的事件,你也已经来不及播放新的声音了。
我建议您查看此链接:使用波形音频接口录制和播放声音 http://msdn.microsoft.com/en-us/library/aa446573.aspx
有一些SoundPlayer的例子(跳过那些),但也有如何使用WaveOut。请查看Playing with WaveOut
部分。
SoundPlayer通常用于通知声音。