Попытка сервера VOIP и клиента потерпела неудачу - PullRequest
1 голос
/ 10 апреля 2011

Привет! Я создаю 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();
        }

P.S Если вы хотите, чтобы я показал больше кода, пожалуйста, спросите, я буду рад показать вам.

1 Ответ

1 голос
/ 14 апреля 2011

вместо того, чтобы постоянно открывать и закрывать устройство WaveOut, нормальный способ сделать это - постоянно воспроизводить одно устройство WaveOut и получать его данные из BufferedWaveProvider (доступного в последнем коде NAudio).Затем в listener_streaming вы просто добавили бы полученные байты в BufferedWaveProvider

...