Как автоматически воспроизводить следующий файл в списке воспроизведения, когда файл закончился?

Я сделал свой собственный музыкальный проигрыватель в С# WPF. Но я не могу заставить его автоматически воспроизводить следующий файл в списке воспроизведения, когда песня закончилась. У меня есть ползунок, показывающий ход воспроизведения, флажок и кнопки «следующий-предыдущий».

Вот код кнопки «Далее»:

private void btnNext_Click(object sender, RoutedEventArgs e)
{
    if (listBox.SelectedIndex < listBox.Items.Count - 1)
    {
       listBox.SelectedIndex = listBox.SelectedIndex + 1;
       TagLib.File tagFile = TagLib.File.Create((listBox.SelectedValue).ToString());
       string album = tagFile.Tag.Album;
       string artist = tagFile.Tag.FirstAlbumArtist;
       string title = tagFile.Tag.Title;
       uint year = tagFile.Tag.Year;
       string genre = tagFile.Tag.FirstGenre;
       lblName.Content = artist + " - " + title;
       lblAlbum.Content = album;
       lblArtist.Content = artist;
       lblTitle.Content = title;
       lblYear.Content = year;
       lblGenre.Content = genre;
       lblBit.Content = tagFile.Properties.AudioBitrate + " kbps";
       lblTime2.Content = tagFile.Properties.Duration.ToString(@"mm\:ss");
       mediaPlayer.Open(new Uri((listBox.SelectedValue).ToString()));
       mediaPlayer.Play();
       btnPlay2.Visibility = Visibility.Hidden;
       btnPause.IsEnabled = true;
    } 
}

А вот коды для слайдера:

private void sliProgress_DragStarted(object sender, DragStartedEventArgs e)
{
    userIsDraggingSlider = true;
}

private void sliProgress_DragCompleted(object sender, DragCompletedEventArgs e)
{
    userIsDraggingSlider = false;
    mediaPlayer.Position = TimeSpan.FromSeconds(sliProgress.Value);
}

private void sliProgress_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
    lblTime.Content = TimeSpan.FromSeconds(sliProgress.Value).ToString(@"mm\:ss");
}

Я попытался реализовать процедуру на кнопке «Далее» в этом флажке при нажатии, сравнивая, когда максимальная продолжительность песни/файла (lblTime2) и продолжительность выполнения (lblTime) равны:

private void radioAll_Checked(object sender, RoutedEventArgs e)
    {
        if (lblTime.Content.ToString() == lblTime2.Content.ToString())
        {
            if (listBox.SelectedIndex < listBox.Items.Count - 1)
            {
                listBox.SelectedIndex = listBox.SelectedIndex + 1;
                TagLib.File tagFile = TagLib.File.Create((listBox.SelectedValue).ToString());
                string album = tagFile.Tag.Album;
                string artist = tagFile.Tag.FirstAlbumArtist;
                string title = tagFile.Tag.Title;
                uint year = tagFile.Tag.Year;
                string genre = tagFile.Tag.FirstGenre;
                lblName.Content = artist + " - " + title;
                lblAlbum.Content = album;
                lblArtist.Content = artist;
                lblTitle.Content = title;
                lblYear.Content = year;
                lblGenre.Content = genre;
                lblBit.Content = tagFile.Properties.AudioBitrate + " kbps";
                lblTime2.Content = tagFile.Properties.Duration.ToString(@"mm\:ss");
                mediaPlayer.Open(new Uri((listBox.SelectedValue).ToString()));
                mediaPlayer.Play();
            }
        }
    }

К сожалению, это может вообще не сработать. Я что-то пропустил? Что я должен делать?


person Steven Aldo    schedule 01.09.2017    source источник


Ответы (1)


Подпишитесь на событие MediaPlayer.MediaEnded и обработайте его соответствующим образом.

MSDN:

Происходит, когда носитель закончил воспроизведение

e.g.

mediaPlayer.MediaEnded += OnMediaEnded;

mediaPlayer.Open(new Uri((listBox.SelectedValue).ToString()));
mediaPlayer.Play();
.
.
.

private void OnMediaEnded(object sender, EventArgs e) 
{
    // play next song
}    
person MickyD    schedule 01.09.2017
comment
Спасибо за помощь, мне помогло! - person Steven Aldo; 01.09.2017
comment
Я прочитал этот поток чтобы помочь мне больше. Теперь я тоже могу непрерывно повторять файл. - person Steven Aldo; 01.09.2017