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

поэтому я разрабатываю музыкальный проигрыватель на основе аудиобиблиотеки Un4seen Bass. Он все делает правильно, за исключением управления списком воспроизведения, которое мне трудно исправить, моя система списков воспроизведения работает следующим образом, у меня есть класс с именем Playlist, он содержит все функции для управления списками воспроизведения (добавление, удаление, отслеживание (вот проблема) ... и т. д.), он содержит список в качестве списка воспроизведения и таймер, отвечающий за отслеживание нулевого индекса текущего воспроизводимого файла в классе проигрывателя на главном Форма, если я активирую режим без дубликатов в классе Playlist, он отлично отслеживает текущий воспроизводимый файл, и я могу правильно получить индекс, но если я деактивирую режим без дубликатов и предположим, что у меня есть (назовем его сейчас Song1) Song1 как первый файл в списке воспроизведения, и у меня он также является десятым файлом в списке воспроизведения. Список воспроизведения будет передавать проигрывателю имена файлов для запуска, и, поскольку функция IndexOf списка воспроизведения получает первое совпадение в списке, когда она доходит до десятого файла, который называется Song1, она возвращается к первому файлу в списке и начинает зацикливать только те 9 песен, я пытался использовать `LastIndexOf, но все равно не работает правильно, я хотя и использую уникальные имена файлов, но я получаю, что файл не существует на IO.File.Exists, можете ли вы мне помочь? Вот мой код:

Private Sub IndexTimer_Tick(sender As Object, e As EventArgs) Handles IndexTimer.Tick
        Try
            If My.Forms.Form1.Visible = True Then
                If My.Settings.Playlist_Tracking = My.Forms.Settings.PlaylistTracking.FirstIndex Then
                    Index = Playlist.Items.IndexOf(My.Forms.Form1.P1.sourceURL)
                ElseIf My.Settings.Playlist_Tracking = My.Forms.Settings.PlaylistTracking.LastIndex Then
                    Index = Playlistalt.LastIndexOf(My.Forms.Form1.P1.sourceURL)
                End If
            End If
        Catch ex As Exception
            Console.WriteLine(My.Computer.Clock.LocalTime.ToShortTimeString & ": " & ex.Message)
        End Try
    End Sub

PS: Playlistalt - это List(of string), потому что Listbox не имеет метода LastIndexOf
Кроме того, все решения, которые я нашел, используют Windows Media Player, который я использовал, но мне этого недостаточно
Спасибо ^^

Редактировать: код для добавления песни

Public Sub Add(song As String)
        If IO.File.Exists(song) Then
            If My.Settings.Playlist_RemoveOnAdd = False AndAlso My.Settings.Playlist_Tracking <> My.Forms.Settings.PlaylistTracking.FirstIndexAdvanced Then
                Playlist.Items.Add(song)
                Playlistalt.Add(song)
            ElseIf My.Settings.Playlist_RemoveOnAdd = False AndAlso My.Settings.Playlist_Tracking = My.Forms.Settings.PlaylistTracking.FirstIndexAdvanced Then
                Playlist.Items.Add(song)
                Playlistalt.Add(song)
                RemoveDuplicates(True)
            ElseIf My.Settings.Playlist_RemoveOnAdd = True AndAlso My.Settings.Playlist_Tracking <> My.Forms.Settings.PlaylistTracking.FirstIndexAdvanced Then
                Playlist.Items.Clear()
                Playlist.Items.Add(song)
                Playlistalt.Clear()
                Playlistalt.Add(song)
            ElseIf My.Settings.Playlist_RemoveOnAdd = True AndAlso My.Settings.Playlist_Tracking = My.Forms.Settings.PlaylistTracking.FirstIndexAdvanced Then
                Playlist.Items.Clear()
                Playlist.Items.Add(song)
                Playlistalt.Clear()
                Playlistalt.Add(song)
                RemoveDuplicates(True)
            End If
            RaiseEvent PlaylistItemsChanged()
        Else
            Console.WriteLine(My.Computer.Clock.LocalTime.ToShortTimeString & ": " & "Please check if your file exists then add it to the playlist")
        End If
    End Sub```

person Anes Hamdani    schedule 11.06.2020    source источник
comment
Как музыкальные файлы добавляются в список воспроизведения? Можно ли изменить этот код?   -  person preciousbetine    schedule 11.06.2020
comment
Я добавил код к вопросу, см. редактирование, и что FirstIndexAdvanced не имеет большого значения, это просто попытка, которую я пытался решить эту проблему.   -  person Anes Hamdani    schedule 11.06.2020
comment
Не видя больше кода, мой первый вопрос будет... почему вы ИЩИТЕ следующую песню с помощью IndexOf() и LastIndexOf()? Если у вас есть индекс, просто увеличьте его на 1 (один) и получите песню в этой позиции (конечно, проверив верхнюю границу).   -  person Idle_Mind    schedule 11.06.2020
comment
@Idle_Mind, если вы правы, это означает изменение 50% кода моего приложения TT, но я рискнул и попробовал ваше решение, на удивление, я обнаружил, что уже сделал 25% и сдался (я не знаю почему) так что я закончил остальные вещи, я проведу несколько тестов и посмотрю, решит ли это проблему, я сделаю это как ответ   -  person Anes Hamdani    schedule 11.06.2020
comment
Почему бы не создать класс песни? При добавлении песни вы создаете новый экземпляр класса, тогда, возможно... у класса есть свойство index, которое вы можете увеличивать всякий раз, когда добавляете новую песню. Чтобы добавить песню в список, просто выполните Playlist.Items.Add(instanceOtSongClass.Name). Также сохраните где-нибудь переменную currentSong, которая отслеживает текущий экземпляр воспроизводимой песни. Чтобы получить следующую песню, просто выберите Playlist.Items(currentSong.Index + 1). Удачи!   -  person preciousbetine    schedule 12.06.2020
comment
@preciousbetine Я уже нашел обходной путь (возможно, исправление) для моей проблемы, я отказался от использования IndexOf, потому что он не будет работать, когда есть два имени файла с одинаковым именем, поэтому я просто добавил Index += 1 и Index -= 1 , как на NextSong, так и на PrevSong Subs, и, кажется, работает правильно, я бы не сказал, что у него нет ошибок, но пока он работает   -  person Anes Hamdani    schedule 12.06.2020


Ответы (1)


Кажется, я нашел вопрос (полученный из комментария @Idle_Mind), код для «Далее/Назад» приведен ниже.

 Public Function Next_s()
        Try
                Index += 1
            RaiseEvent Next_song()
            Return Playlist.Items.Item(Index)
        Catch ex As Exception
            Console.WriteLine(My.Computer.Clock.LocalTime.ToShortTimeString & ": " &
ex.Message)
            Try
                    Index = 0
                RaiseEvent Next_song()
                Return Playlist.Items.Item(0)
            Catch ex2 As Exception
                Console.WriteLine(My.Computer.Clock.LocalTime.ToShortTimeString & ":  " & ex2.Message)
            End Try
        End Try
    End Function
Public Function Prev_s()
        Try
                Index -= 1
            Return Playlist.Items.Item(Index)
            RaiseEvent previous_song()
        Catch ex As Exception
            Console.WriteLine(My.Computer.Clock.LocalTime.ToShortTimeString & ": " & ex.Message)
            Try
                    Index = Playlist.Items.Count - 1
                RaiseEvent previous_song()
                Return Playlist.Items.Item(Index)
            Catch ex2 As Exception
                Console.WriteLine(My.Computer.Clock.LocalTime.ToShortTimeString & ": " & ex2.Message)
            End Try
        End Try
    End Function
person Anes Hamdani    schedule 12.06.2020