1

嗨,我正在创建一个 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();
        }

PS如果您需要我显示更多代码,请询问,我很乐意向您展示。

4

1 回答 1

1

与其不断打开和关闭 WaveOut 设备,正常的做法是让单个 WaveOut 设备不断播放并从 BufferedWaveProvider(在最新的 NAudio 代码中可用)获取其数据。然后,在 中listener_streaming,您只需将接收到的字节添加到 BufferedWaveProvider

于 2011-04-14T06:13:25.773 回答