1

こんにちは、私は VOIP クライアントとサーバーを作成しています。最初の試行では何も聞こえないと思っていたので、予想よりもうまくいっています。しかし、実際には、オーディオ バイトを送信してリアルタイムで再生するソケット プロセスを簡素化するために作成したクラス内でプログラムが例外をスローするまで、約 1 秒か 2 秒は正常に聞こえます。以下にコードを示します。

        // 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 に答える