Rubrik: Multimedia & Sound · Audio | VB-Versionen: VB4, VB5, VB6 | 08.01.02 |
Vollständiges Auslesen einer .m3u-Datei Eine .m3u-Datei enthält neben der Liste der MP3-Dateien noch eine weitere Angaben... | ||
Autor: Dartrax | Bewertung: | Views: 15.689 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
In dem Tipp Auslesen einer .m3u-Datei wurde Ihnen gezeigt, wie Sie die Liste der MP3-Dateien einer Playlist in ein Array einlesen. Dabei wurde eine mehr oder weniger nützliche Angabe einfach "übergangen": Nämlich die Angabe, wie lang die MP3-Datei ist. Dieses Beispiel listet alle MP3-Dateien in der Liste inkl. der Tracklänge in einem Listview auf.
Hier der Code:
' Liest eine Playlist (m3u-Datei) in ein ListView-Control Function ReadM3U(ByVal sFilename As String, _ LV_Playlist As ListView) As Boolean Dim Textzeile As String Dim Zeile As Long Dim Wrong As Boolean Dim LastZeile As String Dim strLVText As String Dim stred As Long Dim Laenge As String Dim Laenge_Text As String Dim FileTitle As String Dim FileExt As String Dim Laenge_tmp Dim F As Integer On Error GoTo ErrHandler With LV_Playlist ' ListView-Spalten erstellen .Sorted = False .View = lvwReport .ColumnHeaders.Clear .ColumnHeaders.Add , , "Titel / Dateiname", .Width - 1600 .ColumnHeaders.Add , , "Länge", 1000, 1 ' ListView-Einträge löschen .ListItems.Clear ' Playlist auslesen Zeile = 0 F = FreeFile Open sFilename For Input As #F ' Schleife bis Dateiende Do While Not EOF(F) Zeile = Zeile + 1 ' Zeile in Variable einlesen. Line Input #F, Textzeile If Zeile = 1 And Textzeile <> "#EXTM3U" Then Wrong = True End If If Left$(LastZeile, 8) = "#EXTINF:" Then ' zusätzliche Infos der zuletzt eingelesenen ' Zeile auswerten strLVText = Right$(LastZeile, Len(LastZeile) - 8) ' Länge (Spieldauer) ermitteln stred = InStr(strLVText, ",") If stred > 0 Then Laenge = Left$(strLVText, stred - 1) Laenge_Text = Format(Laenge / 60, "00.00") Laenge_Text = ReplaceM(Laenge_Text, ",", ":", ".", ":") strLVText = Right$(strLVText, Len(strLVText) - stred) Laenge_tmp = "": stred = 0 stred = InStr(Laenge_Text, ":") If stred > 0 Then Laenge_tmp = Right$(Laenge_Text, Len(Laenge_Text) - stred) Laenge_tmp = Format((Laenge_tmp / 99) * 60, "0") Laenge_tmp = Format(Laenge_tmp, "00") Laenge_Text = Left$(Laenge_Text, stred - 1) & ":" & Laenge_tmp End If End If ' Titel FileTitle = GetFileFromPath(Textzeile) FileExt = GetFileExt(FileTitle) If FileExt <> "" Then FileExt = "." & FileExt FileTitle = Left$(FileTitle, Len(FileTitle) - Len(FileExt)) ' Aktuellen Titel im ListView anzeigen If FileTitle <> strLVText Then .ListItems.Add , , strLVText & " - [" & Textzeile & "]" Else .ListItems.Add , , strLVText End If .ListItems(.ListItems.Count).SubItems(1) = Laenge_Text End If LastZeile = Textzeile Loop ' Datei schließen. Close #F End With ErrHandler: If Err > 0 Then Wrong = True ReadM3U = (Wrong = False) End Function
Hilfsfunktionen:
' Hilfsfunktion: String-Ersetzen Function ReplaceM(ByVal FromStr As String, _ ParamArray varReplacements() As Variant) As String Dim intMacro As Integer Dim strResString As String Dim nFrom As Integer Dim nTo As Integer Dim strMacro As String Dim strValue As String On Error Resume Next strResString = FromStr ' Für jedes übergebene Makro/Wert-Paar... nFrom = LBound(varReplacements) nTo = UBound(varReplacements) For intMacro = nFrom To nTo Step 2 strMacro = varReplacements(intMacro) strValue = varReplacements(intMacro + 1) On Error GoTo 0 ' Ersetzen aller vorkommenden strMacro ' durch strValue Dim intPos As Integer Do intPos = InStr(strResString, strMacro) If intPos > 0 Then strResString = Left$(strResString, intPos - 1) & _ strValue & Right$(strResString, _ Len(strResString) - Len(strMacro) - intPos + 1) End If Loop Until intPos = 0 Next intMacro ReplaceM = strResString On Error GoTo 0 Exit Function End Function
' Hilfsfunktion ' Ermittelt die Dateierweiterung eines Dateinamens Function GetFileExt(Pfadname As String) Dim Dateinamen As String Dim Länge As Integer Dim n As Integer Dim Position As Integer Länge = Len(Pfadname) Do n = InStr(n + 1, Pfadname, ".") If n = 0 Then Exit Do Position = n Loop If Position <> 0 Then GetFileExt = StrConv(Right$(Pfadname, _ Länge - Position), vbUpperCase) End If End Function
' Hilfsfunktion ' Ermittelt den Dateinamen aus Pfad+Datei Function GetFileFromPath(Pfadname As String) Dim Dateinamen As String Dim Länge As Integer Dim n As Integer Dim Position As Integer Länge = Len(Pfadname) Do n = InStr(n + 1, Pfadname, "\") If n = 0 Then Exit Do Position = n Loop GetFileFromPath = Right$(Pfadname, _ Länge - Position) End Function
Beispiel:
Erstellen Sie ein neues Projekt, fügen dem Projekt die Microsoft Windows Common Controls hinzu und ziehen dann ein ListView-Control auf die Form1.
Fügen Sie obigen Code in das Codefenster der Form1 ein. Beim Starten der Form soll dann eine bestimmte Playliste ausgelesen und angezeigt werden:
Private Sub Form_Load() ' Playlist anzeigen ReadM3U "MyPlaylist.m3u", ListView1 End Sub