Заголовок волны поврежден для массива байтов, записанного NAudio.

Я записываю звук с помощью NAudio API, используя Wave в классе, но когда я воспроизвожу записанный массив байтов, он выдает ошибку «заголовок волны поврежден». не могли бы вы указать мне решение.

 waveInStream = new WaveIn();

            writer = new WaveFileWriter(@"C:\Users\Ali\Desktop\abc.wav", waveInStream.WaveFormat);

            waveInStream.DataAvailable += new EventHandler<WaveInEventArgs(waveInStream_DataAvailable);
            waveInStream.StartRecording();

 void waveInStream_DataAvailable(object sender, WaveInEventArgs e)
        {

            writer.WriteData(e.Buffer, 0, e.BytesRecorded);  
//I want to play e.buffer but it gives me error
        }

 public void play_it( MemoryStream s)
        {
//here i convert recorded byte into stream for playing

            using (var wfr = new WaveFileReader(s))
            using (WaveChannel32 wc = new WaveChannel32(wfr) { PadWithZeroes = false })
            using (var audioOutput = new DirectSoundOut())
            {
                audioOutput.Init(wc);

                audioOutput.Play();

                while (audioOutput.PlaybackState != PlaybackState.Stopped)
                {
                    Thread.Sleep(20);
                }

                audioOutput.Stop();
            }
        }

person Ali    schedule 18.03.2013    source источник


Ответы (1)


Этот подход вообще не будет работать - записанный звук не является файлом WAV, и вы не хотите открывать и закрывать устройство вывода несколько раз в секунду. Что вам нужно сделать, так это создать BufferedWaveProvider и поместить в него звук, который вы получаете от WaveIn. Затем создайте один экземпляр DirectSoundOut или WaveOut и инициализируйте его с помощью файла BufferedWaveProvider.

person Mark Heath    schedule 18.03.2013