vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2020
 
zurück
Rubrik: Multimedia & Sound · Audio   |   VB-Versionen: VB4, VB5, VB608.01.02
Vollständiges Auslesen einer .m3u-Datei

Eine .m3u-Datei enthält neben der Liste der MP3-Dateien noch eine weitere Angaben...

Autor:   DartraxBewertung:     [ Jetzt bewerten ]Views:  12.828 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10 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

Dieser Tipp wurde bereits 12.828 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2020 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel