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

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

预先感谢您的回答。 :) 请帮我。

最佳答案

  • 不要使用BlockAlignReductionStream。无论您看到什么教程,都太过时了。
  • 使用AudioFileReader代替WaveFileReader和WaveChannel32。
  • 完成播放后(例如在PlaybackStopped处理程序中)处置音频文件阅读器
  • 关于c# - 如何多次录制和播放音频,替换音频文件NAdio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20673419/

    相关文章:

    c# - 获取TreeView所选节点的位置

    c# - LINQ Count() until,这样效率更高吗?

    iOS闹钟,保持闹铃播放

    android - 用SOX转换android wav文件

    c# - 流不可写异常的可能原因有哪些?

    c# - naudio WaveOut 没有播放 iSampleProvider 提供的所有数据

    c# - 从两个角度算出顺时针转还是逆时针转

    c# - 将本地时间(10 位数字)转换为可读的日期时间格式

    Android SoundPool只能播放6秒mp3?

    c# - 如何从音频文件(.wav)分离频率