如何多次录制和播放音频,替换音频文件NAdio

时间:2013-12-19 04:22:46

标签: c# audio naudio recording

我在这里有我的代码形式各种NAudio教程。我做了一个简单的录音机。其中有一个录制按钮,停止录制按钮然后播放按钮。对于第一次录制它完全正常,我甚至可以播放我的音频。但每当我再次开始录制时,它会显示一个错误,其中我的文件名被另一个进程使用。我不知道应该停止什么过程。

这是我的代码

    public void recorUser()
    {
        waveInStream = new WaveIn();
       // writer = null;
        writer = new WaveFileWriter(@"D:\2.wav", waveInStream.WaveFormat);
        waveInStream.DataAvailable += new EventHandler<WaveInEventArgs>(waveInStream_DataAvailable);
        waveInStream.StartRecording();
    }
    void waveInStream_DataAvailable(object sender, WaveInEventArgs e)
    {
        writer.Write(e.Buffer, 0, e.BytesRecorded);
    }
    public void stopRecordUser()
    {
        waveInStream.StopRecording();
        waveInStream.Dispose();
        waveInStream = null;
        writer.Close();
        writer = null;
    }
    public void playRecordedUser()
    {
        pcm = new WaveChannel32(new WaveFileReader(@"D:\2.wav"));
        //.PadWithZeroes = false;
        reductionStream = new BlockAlignReductionStream(pcm);
        waveOutDevice = new DirectSoundOut();
        waveOutDevice.PlaybackStopped += new EventHandler<StoppedEventArgs>(audioOutput_PlaybackStopped);
        waveOutDevice.Init(reductionStream);
        waveOutDevice.Play();
        // pcm.Close();
        // waveOutDevice.Dispose();
    }

提前感谢你的激光。 :)请帮帮我。

1 个答案:

答案 0 :(得分:0)

  1. 不要使用BlockAlignReductionStream。无论你看到什么教程,都是非常过时的。
  2. 使用AudioFileReader而不是WaveFileReader和WaveChannel32。
  3. 完成播放后处理音频文件阅读器(例如,在PlaybackStopped处理程序中)