Seite 1 von 1

M3U Playlisten auslesen

Verfasst: 06.06.2008 22:06
von Deluxe0321
Da ich mich z.Z relativ viel mit Sound & Co beschäftige habe ich eben mal einen kleinen Code geschrieben der M3U's ausliest. Mir ist klar das der Code nicht hoch optimiert ist, aber wenn ihr Verbesserungsvorschläge habt; immer her damit! Das Schreiben füge ich später noch bei.

Zudem habe ich eine Frage. Warum liest mir der Code bei diesem Ausschnitt immer Mist aus:
#EXTINF:264,冨田勲 – Boléro
C:\Dokumente und Einstellungen\All Users\Dokumente\Eigene Musik\Titel irgendeinenummer.mp3
Nicht das ich probiert hätte die Datei in Unicode, oder UTF-8 auszulesen, aber dann bekomme ich an dieser Stelle "Fragezeichenbrei".


Code: Alles auswählen

Structure M3U
  M3U_Lenght.l
  M3U_Tags.s
  M3U_File.s
EndStructure

NewList M3UData.M3U()

Enumeration
#EXTM3U
#M3U
#M3U_FileList
EndEnumeration

Procedure.s CheckLineFeed(RString.s)
  If Not FindString(RString.s,#CRLF$,1)
    If FindString(RString.s,Chr(10),1)
      LF.s = Chr(10)
    ElseIf FindString(RString.s,#CR$,1)
      LF.s = #CR$
    EndIf
  Else
  LF.s = #CRLF$
  EndIf
  
  ProcedureReturn LF.s
EndProcedure

Procedure AddEXTM3UData(RString.s,M3UData.M3U(),FileID=0)
  If RString.s
    
    If Not FileID = 0
      Debug FileID
      RString2.s= ReadString(FileID)
      RString.s + #CRLF$ 
      RString.s + RString2.s
    EndIf
    
    AddElement(M3UData())
    M3UData()\M3U_Lenght.l = Val(Mid(RString.s,FindString(RString.s,"#EXTINF:",1)+8,(FindString(RString.s,",",1))-(FindString(RString.s,"#EXTINF:",1)+8)))
    M3UData()\M3U_Tags.s   = Mid(RString.s,FindString(RString.s,",",1)+1,(FindString(RString.s,#CRLF$,1))-(FindString(RString.s,",",1)+1))
    M3UData()\M3U_File.s   = Mid(RString.s,FindString(RString.s,#CRLF$,1)+2,Len(RString.s)-(FindString(RString.s,#CRLF$,1)+1))
    
  EndIf
EndProcedure

Procedure LoadM3U(FileName.s,M3UData.M3U())
 Protected FileSize.l,FileID.l,RString.s
  If FileName.s
    FileSize.l = FileSize(FileName.s)
    If Not FileSize < 0
     
      FileID.l=ReadFile(#PB_Any,FileName.s)
      If FileID.l
        RString.s=ReadString(FileID.l)
        If FindString(RString.s,"#EXTM3U",1)
          DataWay.l = #EXTM3U
          LF.s=CheckLineFeed(RString.s)
          If Not LF.s
            RString.s = ReadString(FileID.l)
            LF.s=CheckLineFeed(RString.s)
          EndIf
        ElseIf FindString(RString.s,"#M3U",1)
          DataWay.l = #M3U
          LF.s=CheckLineFeed(RString.s)
          If Not LF.s
            RString.s = ReadString(FileID.l)
            LF.s=CheckLineFeed(RString.s)
          EndIf     
        Else
          DataWay.l = #M3U_FileList
          LF.s=CheckLineFeed(RString.s)
        EndIf
      EndIf
      
      If Not FL.s = #CR$ And Not FL.s = Chr(10)
          If DataWay.l = #EXTM3U
            
            If Not FindString(RString.s,"#EXTINF",1)
              RString.s = ReadString(FileID)
            EndIf
            AddEXTM3UData(RString.s,M3UData(),FileID)
            
            While Eof(FileID) = 0  
              RString.s = ReadString(FileID) + #CRLF$ + ReadString(FileID)
              AddEXTM3UData(RString.s,M3UData())
            Wend
            
          ElseIf DataWay.l = #M3U
            
            If FindString(RString.s,"#M3U",1)
              RString.s = ReadString(FileID)
            EndIf
            
            
            AddElement(M3UData())
              M3UData()\M3U_File.s = RString.s
            
            While Eof(FileID) = 0
              RString.s = ReadString(FileID)
              AddElement(M3UData())
                M3UData()\M3U_File.s = RString.s
            Wend
          
          ElseIf DataWay.l = #M3U_FileList
            
              AddElement(M3UData())
                M3UData()\M3U_File.s = RString.s
            
            While Eof(FileID) = 0
              RString.s = ReadString(FileID)
              AddElement(M3UData())
                M3UData()\M3U_File.s = RString.s
            Wend
          
          EndIf
        
        Else
       
      EndIf    
    EndIf
  EndIf
EndProcedure

File.s="DATEIANGEBEN!"
LoadM3U(File.s,M3UData())
Debug CountList(M3UData())
ResetList(M3UData())
While NextElement(M3UData())
  Debug M3UData()\M3U_Lenght.l
  Debug M3UData()\M3U_Tags.s
  Debug M3UData()\M3U_File.s
  Debug ""
Wend
M3u zum Testen

Code: Alles auswählen

#EXTM3U
#EXTINF:221,Queen - Bohemian Rhapsody
Titel 1.mp3
#EXTINF:473,Dire Straits - Walk Of Life
Pop\Meine Auswahl\Titel 2.mp3
#EXTINF:264,Test – Boléro
C:\Dokumente und Einstellungen\All Users\Dokumente\Eigene Musik\Titel irgendeinenummer.mp3
#EXTINF:504,Bob Marley - Buffalo Soldier
http://www.seite.de/musik/titel4.mp3