不在类中调用的方法

时间:2014-05-14 23:05:30

标签: c# naudio

我正在使用NAudio库并且在调用方法时遇到问题。我创建了一个用于播放音频文件的类,并为按钮点击指定了bool值。一切正常,除了我的代码的IF部分将运行,直到调用方法(if代码的行)。没有生成错误,它只是没有进入OnPlaybackStopped方法。我也在输出一些文本,所以我可以确认这一点,并且在两种情况下都看到PlaybackStopped是真实的。 ELSE部分运行没有问题,并且一旦到达文件末尾,实际上调用该方法没有问题。有什么想法吗?我知道我可能只是错过了一些简单的东西,只需要另一组眼睛来告诉我我做错了什么。

namespace AudioTool
{
    public class Playback
    {
        private IWavePlayer _audioPlayback { get; set; }
        private AudioFileReader _audioReader { get; set; }
        private WaveViewer _waveViewer { get; set; }
        private Button _playButton { get; set; }
        private Button _stopButton { get; set; }
        private bool _stopButtonClick { get; set; }

        public Playback(IWavePlayer audioPlayback, AudioFileReader audioReader, WaveViewer waveViewer, Button playButton, Button stopButton, bool stopButtonClick)
        {
            _audioPlayback = audioPlayback;
            _audioReader = audioReader;
            _waveViewer = waveViewer;
            _playButton = playButton;
            _stopButton = stopButton;
            _stopButtonClick = stopButtonClick;
        }

        public void CreateAudioPlayback(string audioPath)
        {
            string fullAudioPath = (audioPath);
            _audioPlayback = new WaveOut();
            _audioReader = new AudioFileReader(fullAudioPath);
            _audioPlayback.Init(_audioReader);

            if (_stopButtonClick == true)
            {
                Console.WriteLine(_stopButtonClick);
                Console.WriteLine(_audioPlayback.PlaybackState);
                _audioPlayback.PlaybackStopped += new EventHandler<StoppedEventArgs>(OnPlaybackStopped);
            }

            else
            {
                // Get file path and playback
                _audioPlayback.PlaybackStopped += new EventHandler<StoppedEventArgs>(OnPlaybackStopped);
                _audioPlayback.Play();


                // View the waveform of the report
                _waveViewer.WaveStream = new WaveFileReader(fullAudioPath);
            }
        }

        private void OnPlaybackStopped(object sender, StoppedEventArgs e)
        {
            _waveViewer.WaveStream.Dispose();
            _audioPlayback.Stop();
            _audioPlayback.Dispose();
            _audioReader.Dispose();
            _waveViewer.WaveStream = null;
            _audioPlayback = null;
            _audioReader = null;
            _playButton.Enabled = true;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

弄清楚发生了什么。当我点击一个课程上的“播放”按钮时(我们将其称为main.cs),它开始通过一个音频流中的WaveOut播放音频。然后,当我单击main.cs中的停止按钮时,它试图停止新的音频流。因此,与音频相关的功能(例如停止)似乎没有任何影响,因为他们总是试图阻止没有播放任何内容的音频流。

我解决这个问题的方法是在main.cs中添加几行代码,以便在那里定义WaveOut,然后每个Play和Stop按钮都会引用该类,其余的代码。