Как автоматически воспроизвести следующую песню в списке - PullRequest
0 голосов
/ 30 мая 2019

Я создаю музыкальный проигрыватель для своих скачанных песен. Я получил его для воспроизведения выбранных песен, но я хотел бы, чтобы следующая песня запускалась автоматически после окончания предыдущей.

Я пытался использовать событие 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];
        }

это последнее, что я пробовал, но он не выполняет этот код

Я ожидал, что он просто перейдет к следующей песне в списке, я не получаю никаких ошибок

1 Ответ

0 голосов
/ 30 мая 2019

Один из способов состоит в том, чтобы создать список воспроизведения из всех песен, вместо того, чтобы воспроизводить их одну за другой, таким образом, следующая песня в списке воспроизведения будет автоматически воспроизводиться после завершения последней:

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;
    }    
}
...