如何跟踪媒体播放器播放列表中的文件名并获取当前播放文件的索引。

问题描述 投票:0回答:1

我正在开发一个基于Un4seen Bass音频库的音乐播放器,除了播放列表管理之外,其他一切都很正常,我很难解决这个问题,我的播放列表系统的工作原理如下,我有一个名为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 : The Playlistalt 是一个 List(of string) 因为 Listbox 没有 LastIndexOf methode 也是所有的解决方案,我发现是使用Windows媒体播放器 ,我用了,但它是不够的,我谢谢你^^。

编辑 : 歌曲添加子的代码

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```
vb.net media-player tracking playlist bass
1个回答
0
投票

似乎我发现了一个问题(源于@Idle_Mind的评论),NextBack的代码如下。

 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
© www.soinside.com 2019 - 2024. All rights reserved.