NAudio:我怎么能得到一个告诉我MP3文件到期的事件?

时间:2010-04-03 13:02:26

标签: events mp3 naudio

我试着用这个:

private void CreateDevice()
{
    _playbackDevice = new WaveOut();
    _playbackDevice.PlaybackStopped += PlaybackDevicePlaybackStopped;
}

void PlaybackDevicePlaybackStopped(object sender, EventArgs e)
{
    if (OnPlaybackStopped != null)
    {
        OnPlaybackStopped(this, e);
    }
}

但它从未被援引过。

然后我尝试通过使用计时器轮询属性来使用PlaybackState:

public PlaybackState PlaybackState
{
    get
    {
        if (_playbackDevice == null)
            return default(PlaybackState);

        return _playbackDevice.PlaybackState;
    }
}

但是当歌曲结束时它不会变为“停止”。但是当我手动调用时,它会正确更改。

有人可以帮助我吗?

似乎有一个错误...... http://naudio.codeplex.com/WorkItem/View.aspx?WorkItemId=10726

2 个答案:

答案 0 :(得分:1)

因为NAudio旨在允许您执行比简单播放一个文件更复杂的事情,所以它不一定会停在文件的末尾。决定WaveOut是否会停止的原因是我们是否停止提供数据。 NAudio中的一些WaveStream会在到达文件末尾时停止提供数据,但是其他WaveStream会愉快地从其Read方法返回充满零的缓冲区。所以自动停止很大程度上取决于你构建的WaveStream图。

因此,您可能需要确定何时完成阅读要播放的文件内容的时间。我意识到这不是一个理想的情况,我仍然试图想出一个既适合那些只想玩单个文件又适合那些做更多事情的人的设计。

答案 1 :(得分:0)

试试这个:

在CreateDevice方法中,更改以下行:

_playbackDevice = new WaveOut();

由此:

_playbackDevice = new WaveOut(WaveCallbackInfo.FunctionCallback()