MP3播放与NAudio - 停止问题()

时间:2011-09-08 10:20:11

标签: naudio

我刚刚开始使用NAudio(1.4)专门用于MP3播放。我一直在处理样本的文档和源代码。目前我在课堂上有这个:

    IWavePlayer waveOutDevice;
    WaveStream mainOutputStream;
    WaveChannel32 volumeStream;

    public AudioPlaybackService() : base() {
        waveOutDevice = new WasapiOut(AudioClientShareMode.Shared, 100);    
    }

    public bool LoadTrack(string trackPath, float volume)
    {
        if (!File.Exists(trackPath))
            return false;
        try
        {
            mainOutputStream = new Mp3FileReader(trackPath);
            volumeStream = new WaveChannel32(mainOutputStream);
            volumeStream.Volume = volume;
            waveOutDevice.Init(mainOutputStream);
        }
        catch (Exception e)
        {
            Logger.Error("Failed to load track for playback {0} :: {1}", trackPath, e.ToString());
            return false;
        }
        return true;
    }

    public bool PlayTrack()
    {
        if (waveOutDevice == null || waveOutDevice.PlaybackState == PlaybackState.Playing)
            return false;
        waveOutDevice.Play();
        return true;
    }

    public bool StopTrack()
    {
        if (waveOutDevice == null || waveOutDevice.PlaybackState == PlaybackState.Stopped)
            return false;
        waveOutDevice.Stop();
        mainOutputStream.CurrentTime = TimeSpan.Zero;
        return true;
    }

这会加载并播放我的测试轨道,我的问题是使用Stop()函数。首先,我应该在调用Stop()后重置CurrentTime属性吗?目前它更像是一个暂停按钮,即它在“停止”的同一个地方重新开始播放。如果我确实需要重置当前时间我现在有一个问题,如果我点击停止,轨道停止,但如果我之后再次点击播放,我会在轨道重新开始之前得到一些剩余的噪音。

查看其中一个样本的源代码,只需调用Stop()。

1 个答案:

答案 0 :(得分:0)

our use of naudio中,我们永远不会停止音频。任何类似停止的功能都会导致静音波形(零)被输入波形。这主要是由于naudio在停止和启动太频繁时不稳定,但它也阻止了“剩余缓冲”问题。