【问题标题】:How to automatically play next song on a list如何自动播放列表中的下一首歌曲
【发布时间】:2019-05-30 17:06:56
【问题描述】:

我正在为我下载的歌曲制作音乐播放器。我可以播放我选择的歌曲,但我希望在上一首歌曲结束后自动开始下一首歌曲。

我尝试过使用 PlayStateChange 事件,但它似乎不起作用,当尝试调试 (F11) 时,它在歌曲结束后什么都不做。

private void lstSongs_SelectedIndexChanged(object sender, EventArgs e)
        {
            index = lstSongs.SelectedIndex;
            axWindowsMediaPlayer1.URL = paths[lstSongs.SelectedIndex];

        }

这是播放所选歌曲的代码

void axWindowsMediaPlayer1_PlayStateChange()
        {
            index++;
            axWindowsMediaPlayer1.URL = paths[lstSongs.SelectedIndex];
        }

这是我尝试的最后一件事,但它只是不执行该代码

我希望它只是转到列表中的下一首歌曲,我没有收到任何错误

【问题讨论】:

  • 您似乎正在修改 index 变量,但从不使用它。
  • 来自PlayStateChange Event 文档:“Windows Media Player 状态不保证以任何特定顺序发生。此外,并非每个状态都必然发生在一系列事件中。您不应该编写依赖于根据国家命令。”

标签: c# playlist windows-media-player


【解决方案1】:

一种方法是为所有歌曲构建一个播放列表,而不是一首一曲播放,这样播放列表中的下一首歌曲将在最后一首歌曲播放完毕后自动播放:

WMPLib.IWMPPlaylist Playlist = axWindowsMediaPlayer1.newPlaylist("MyPlayList", "");
foreach(String song in lstSongs.Items)
{
    Playlist.appendItem(axWindowsMediaPlayer1.newMedia(song));
}
axWindowsMediaPlayer1.currentPlaylist = Playlist;
axWindowsMediaPlayer1.Ctlcontrols.play();

目前尚不清楚您是否会在列表框中进行多项选择,或者是否要播放列表框中的所有条目。

当它改变时,你可以得到当前正在播放的歌曲:

private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
    if (e.newState == 3)
    {
        label1.Text = "Playing: " + axWindowsMediaPlayer1.Ctlcontrols.currentItem.name;
    }    
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多