您好我正在创建一个VOIP客户端和服务器,它比我预期的要好,因为我以为我不会在第一次尝试时听不到任何声音。但实际上我听到自己好一两秒钟,直到我的程序在我创建的类中抛出一个异常,以简化发送音频字节并实时播放它们的套接字过程。以下是代码:
// public function member of class DataArgs
public void PlayRealTimeAudio()
{
WaveOut o = new WaveOut();
o.DeviceNumber = 0;
o.DesiredLatency = 500;
Stream s = new MemoryStream(this.Buffer);
Raw.RawSourceWaveStream raw = new Raw.RawSourceWaveStream(s, new WaveFormat(16000, 2));
o.Init(raw); // Exception throws here after hearing my voice for a brief moment
o.Play();
o.Stop();
o.Dispose();
return;
}
// Within the Form1 class
void listener_Streaming(System.Net.Sockets.TcpClient sender, DataArgs e)
{
byte[] buf = new byte[e.Length];
buf = e.Buffer;
e.PlayRealTimeAudio();
}
如果您需要我显示更多代码,请询问,我很乐意向您展示。
答案 0 :(得分:1)
而不是经常打开和关闭WaveOut设备,正常的方法是让一个WaveOut设备不断播放并从BufferedWaveProvider获取其数据(在最新的NAudio代码中可用)。然后,在listener_streaming
中,您只需将收到的字节添加到BufferedWaveProvider