поэтому я разрабатываю музыкальный проигрыватель на основе аудиобиблиотеки 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```
index
, которое вы можете увеличивать всякий раз, когда добавляете новую песню. Чтобы добавить песню в список, просто выполнитеPlaylist.Items.Add(instanceOtSongClass.Name)
. Также сохраните где-нибудь переменнуюcurrentSong
, которая отслеживает текущий экземпляр воспроизводимой песни. Чтобы получить следующую песню, просто выберитеPlaylist.Items(currentSong.Index + 1)
. Удачи! - person preciousbetine   schedule 12.06.2020