C# 从网络流实时播放PCM(波形)音频

C# 从网络流实时播放PCM(波形)音频,c#,streaming,wav,networkstream,C#,Streaming,Wav,Networkstream,非常类似于,我有一个联网微控制器,它收集PCM音频(8位,8 kHz),并通过TCP网络套接字将数据作为原始字节流传输。我能够连接到设备,打开网络流,并用收集的数据创建RIFF/wave文件 我想更进一步,实现测量的实时回放。到目前为止,我的方法是使用适当的RIFF头将传入数据缓冲到多个MemoryStream,并在每个块完成后使用System.Media.SoundPlayer播放波形文件段。为了避免高延迟,每个段只有0.5秒长 我对这种方法的主要问题是,片段之间通常会有一种独特的弹出声(因为

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

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

我对这种方法的主要问题是,片段之间通常会有一种独特的弹出声(因为每个片段不一定是零中心或零结束的)

问题:

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


如果没有,我是否可以采取其他步骤使多个回放运行得更平稳?

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

我建议您检查此链接:使用波形音频接口录制和播放声音 这里有一些SoundPlayer的示例(跳过这些),但也有一些如何使用WaveOut的示例。请看玩WaveOut的部分

SoundPlayer通常用于发出通知声音