как записывать и воспроизводить аудио несколько раз, заменяя аудиофайл NAdio

У меня есть код из различных руководств по 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();
    }

заранее спасибо за ансеры. :) пожалуйста, помогите мне.


person user3098141    schedule 19.12.2013    source источник


Ответы (1)


  1. Не используйте BlockAlignReductionStream. Какой бы учебник вы ни видели, он ужасно устарел.
  2. Используйте AudioFileReader вместо WaveFileReader и WaveChannel32.
  3. Удалите средство чтения аудиофайлов, когда закончите воспроизведение (например, в обработчике PlaybackStopped)
person Mark Heath    schedule 23.12.2013