【问题标题】:Wave header corrupted for an NAudio recorded array of bytesNAudio 记录的字节数组的波头损坏
【发布时间】:2013-03-19 01:03:46
【问题描述】:

我通过在类中使用 Wave 使用 NAudio API 录制声音,但是当我播放录制的字节数组时,它会给出错误“波头已损坏”。 能否请您指出解决方案。

 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();
            }
        }

【问题讨论】:

    标签: c# naudio


    【解决方案1】:

    这种方法根本行不通 - 录制的音频不是 WAV 文件,您不希望每秒多次打开和关闭输出设备。您需要做的是创建一个BufferedWaveProvider 并将您从WaveIn 收到的音频放入其中。然后创建DirectSoundOutWaveOut 的单个实例并使用BufferedWaveProvider 对其进行初始化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多