我使用 naudio 进行网络语音传输。接收一个点的声音回放正常,如果接收多个机器发来的声音流,并不能正常全部回放,结果是嘈杂的声音,失真了,不知道为什么。难道 _BWP.AddSamples 这个函数调用时有什么问题吗?每个声音源需要一个独立的 waveout (WasapiOut )对象单独播放吗?
相关代码如下。
using NAudio.Wave;
using System.Net.Sockets;
using System.Threading;
using System.Net;
//private WaveOut speaker;//音频输出
private WasapiOut speaker;//音频输出
private BufferedWaveProvider _BWP;//接收声音缓冲
private void btn_receive_Click(object sender, EventArgs e)
{
speaker = new WasapiOut(NAudio.CoreAudioApi.AudioClientShareMode.Shared, 10);
WaveFormat wf = new WaveFormat(waverate, wavebit, wavechannel);
_BWP = new BufferedWaveProvider(wf);
speaker.Init(_BWP);
if (receiver.recvMessageEvent == null)
{
receiver.recvMessageEvent += new Action<byte[]>(receive_sound);
}
receiver.Start();//开始接收数据
}
private void receive_sound(byte[] obj)
{
_BWP.AddSamples(obj, 0, obj.Length);//添加到待播放缓存中
}