Playlist Converter

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

StepTiger

Betreff: Playlist Converter

BeitragSa, Dez 16, 2006 12:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit dem folgenden Code kann man PLS Dateien in M3U Dateien und umgekehrt umwandeln.

Bald folgt noch WPL, wenn ich herausfinde, was die tid macht. Weiß es jemand von euch?

Code: [AUSKLAPPEN]
Type musik
   Field pfad$
   Field num
   Field name$
End Type

file$="E:\korsikaurlaub\dadada.pls"
save$="E:\korsikaurlaub\dadada.m3u"

ending$=Right$(file$,3)
sending$=Right$(save$,3)

fl=ReadFile(file$)
fl2=WriteFile(save$)
tnum=0

If ending$="pls"
   
   While Not Eof(fl)
      
      d$=ReadLine$(fl)
      
      pos=Instr(d$,"=")
      
      If pos
         
         num=Len(d$)-pos
         tnum=tnum+1
         
         ttex$=Right$(d$,num)
         
         Print ttex$
         
         ttex2$=ttex$
         While Instr(ttex2$,"\")
            
            pos=Instr(ttex2$,"\")
            num=Len(ttex2$)-pos
            ttex2$=Right$(ttex2$,num)
            
         Wend
         
         r.musik=New musik
         r\pfad$=ttex$
         r\num=tnum
         r\name$=ttex2$
         Print r\name$
         
      EndIf
      
   Wend
   
EndIf

If ending$="m3u"
   
   While Not Eof(fl)
      ReadLine fl
      ReadLine fl
      ttex$=ReadLine$(fl)
      ttex2$=ttex$
      
      tnum=tnum+1
      
      While Instr(ttex2$,"\")
         
         pos=Instr(ttex2$,"\")
         num=Len(ttex2$)-pos
         ttex2$=Right$(ttex2$,num)
         
      Wend
      
      r.musik=New musik
      r\pfad$=ttex$
      r\num=tnum
      r\name$=ttex2$
      Print r\name$
   Wend
EndIf

Print sending$
If sending$="m3u"
   
   WriteLine fl2,"#EXTM3U"
   For r.musik=Each musik
      
      If r\name$<>""
         
         WriteLine fl2,"#EXTINF:0,"+r\name$
         WriteLine fl2,r\pfad$
         WriteLine fl2,""
         
      EndIf
      
   Next
   
   WriteLine fl2,""
   
EndIf
If sending$="pls"
   
   For r.musik=Each musik
      
      If r\name$<>""
         WriteLine fl2,"File"+r\num+"="+r\pfad$
      EndIf
      
   Next
   
EndIf

WaitKey
End
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

AMY

BeitragSa, Dez 16, 2006 13:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Wozu brauchst du einen Konverter?
Ich habe einige Funktionen geschrieben die verschiedene Playlisten auslesen. Unter anderem auch m3u, pls, wpl und noch mehr. Zusätzlich habe ich noch eine Funktion geschrieben die später sämtliche playlisten auslesen soll. Ist schon fast fertig. Kann ich ja mal posten wenn ich es mal wiederfinde.
Mein 'Playlisten-Reader' arbeitet mit einem DimFeld und ein paar Globalen. Finde ich übersichtlicher muss aber jeder selber wissen. Bis spätestens morgen dürfte ich es haben.
Projekte: www.amyscbi.de
I never comment my sourcecode. What's HARD to write must be HARD to read!

StepTiger

BeitragSa, Dez 16, 2006 13:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Dim Felder und Globalen sind übersichtlicher als Types???
Ich denk mir jetzt meinen Teil.



Der Konverter ist für den Windows Media Player, da der keine PLS Dateien abspielt. War etwas, was ich mir eben in 10 Minuten gebastelt habe.

Poste bitte deinen Code.
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

AMY

BeitragSa, Dez 16, 2006 19:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Diese Funktionen benutze ich in meinem MediaCenter. Als Oberfläche von BlitzBasic benutze ich VisualBlitz. Die Funktionen kann man da zusammenfassen, und es wirkt dadurch sehr viel übersichtlicher. Falls jemand fragen oder anregungen hat kann sie mir doch bitte mitteilen. Freue mich über jede Kritik oder Verbesserungsvorschläge. Das Komplette MediaCenter wird wahrscheinlich erst im Februar hier im Forum als OpenSource erscheinen. Bis dahin will ich doch noch etwas daran verbessern. Im Moment Bin ich dabei Skins in das MediaCenter zu integrieren.
Hier mal die Playlisten Funktionen:

Code: [AUSKLAPPEN]

Dim MultiMediaFile$(1):Dim Zahlen(0):Dim ICIB$(0,0)
Global Size,Anzahl%
Global I,J

Function ReadM3U(filename$)
    t=ReadFile(filename)
    Repeat
      lines=lines+1
      ReadLine(t)
    Until Eof(t)
    CloseFile t
file=ReadFile(filename)
Dim MultiMediaFile$(lines)
For I=1 To lines
test$=ReadLine(file)
If Len(test)=0 Then MultiMediaFile$(I)=ReadLine(file) Else MultiMediaFile$(I)=test
If Instr(MultiMediaFile$(I),"#EXTINF:")>0 Then MultiMediaFile$(I)=ReadLine(file):size=size+1
If Instr(MultiMediaFile$(I),":")=2 Then MultiMediaFile$(I)=MultiMediaFile$(I) Else MultiMediaFile$(I)=Left$(Filename,3)+MultiMediaFile$(I)
Next
Return Size
End Function
Function ReadPLS(filename$)
 t=ReadFile(filename)
    Repeat
      size=size+1
      ReadLine(t)
    Until Eof(t)
    CloseFile t
file=ReadFile(filename)
Dim MultiMediaFile$(size)
For I=1 To size/3
.RepeatRL
a$=ReadLine(file)
If a="" Then Exit
If Left$(a,4)="File" Then MultiMediaFile$(I)=Mid$(a,Instr(a,"=")+1):Anzahl=Anzahl+1 Else Goto RepeatRL
If Instr(MultiMediaFile$(I),":")=2 Then MultiMediaFile$(I)=MultiMediaFile$(I) Else MultiMediaFile$(I)=Left$(Filename,3)+MultiMediaFile$(I)
Next
Return Anzahl
End Function
Function ReadWPL(filename$)
t=ReadFile(filename)
    Repeat
      size=size+1
      ReadLine(t)
    Until Eof(t)
    size=size-12
    CloseFile t
file=ReadFile(filename)
Dim MultiMediaFile$(size)
For I=1 To size
.RepeatRL
a$=ReadLine(file)
If a="" Then Exit
If Instr(a,"            <media src=")>0 Then MultiMediaFile$(I)=Mid$(a,Instr(a,"=")+2,Len(a)-3-(Instr(a,"=")+1)):Anzahl=anzahl+1 Else Goto RepeatRL
If Instr(MultiMediaFile$(I),":")=2 Then MultiMediaFile$(I)=MultiMediaFile$(I) Else MultiMediaFile$(I)=Left$(Filename,3)+MultiMediaFile$(I)
Next
Return Anzahl
End Function
Function ReadASX(filename$)
   t=ReadFile(filename)
   Repeat
     sizeL$=ReadLine(t)
     size=size+1
     If Instr(sizeL,"SourceURL")>0 Then Files=Files+1
   Until Eof(t)
file=ReadFile(filename)
Dim MultiMediaFile$(size+1)
For I=1 To Files
.RepeatRL
a$=ReadLine(file)
If Instr(a,"SourceURL")>0 Then MultiMediaFile(I)=Mid$(a,Instr(a,"=",Instr(a,"SourceURL"))+3,Len(a)-4-(Instr(a,"=",Instr(a,"SourceURL"))+2)):Anzahl=anzahl+1 Else Goto RepeatRL
If Instr(MultiMediaFile$(I),":")=2 Then MultiMediaFile$(I)=MultiMediaFile$(I) Else MultiMediaFile$(I)=Left$(Filename,3)+MultiMediaFile$(I)
Next
Return Anzahl
End Function
Function ReadUniPLS(filename$);siehe Kommentare erweitern
;;;;!!!Relative Pfadangaben gehen immer von der Playlist aus!!!
t=ReadFile(filename)
Repeat
 size=size+1
 ReadLine(t)
Until Eof(t)
CloseFile t

;Hinzufügen (Komplette Pfadangabe, dann relativ), z.B.:  'C:\Ordner\Bild1.bmp' dann 'Bild2.bmp' bei Ordnerwechsel wieder komplett(oder relativ)
;Falls mehrere Formen davon in einer Datei, dann For I=I to size; und I bei fund der ersten datei auf eins setzen

;(Komplette Pfadangabe oder Relative Pfadangabe), z.B.:  'C:\Ordner\Bild.bmp' oder 'Ordner\Bild.bmp'
file=ReadFile(filename)
Dim MultiMediaFile$(size)
For I=1 To size
.RepeatRL1
MultiMediaFile(I)=ReadLine(file)
If Eof(file) Then Exit
If FileType(MultiMediaFile(I))=1 Then MultiMediaFile(I)=MultiMediaFile(I) ElseIf FileType(MultiMediaFile$(I)=Left$(Filename,3)+MultiMediaFile$(I))=1 Then MultiMediaFile$(I)=Left$(Filename,3)+MultiMediaFile$(I):Files1=Files1+1 Else Goto RepeatRL1
Next
CloseFile(file)

;(Komplette Pfadeingabe in Text eingebaut), z.B.:  'UnbekannterStringc:\ordner\bild.bmpmitnochmehrtext'
file=ReadFile(filename)
Dim MultiMediaFile$(size)
For I=1 To size
.RepeatRL2
a$=ReadLine(file)
If Eof(file) Then Exit
If Instr(a,":")>0 Then If FileType(Mid$(Instr(a,":")-1,Instr(a,".",Instr(a,":")+1)+4))=1 Then MultiMediaFile(I)=Mid$(Instr(a,":")-1,Instr(a,".",Instr(a,":")+1)+4):Files2=Files2+1 Else Goto RepeatRL2
Next
CloseFile(file)

;(Relative Pfadangabe in Text eingebaut), z.B.:  'UnbekannterString\ordner\bild.bmpmitnochmehrtext'
file=ReadFile(filename)
Dim MultiMediaFile$(size)
For I=1 To size
.RepeatRL3
a$=ReadLine(file)
If Eof(file) Then Exit
If Instr(a,"\")>0 Then
  FirstBackslash=Instr(a$,"\")
  Repeat
   LastBackslash=BackSlashESC+1
   BackSlashESC=Instr(a$,"\",LastBackslash)
  Until BackSlashESC=0
   LastBackslash=LastBackslash-1
   FirstPoint=Instr(a$,".")
  Repeat
   LastPoint=PointESC+1
   PointESC=Instr(a$,".",LastPoint)
  Until PointESC=0
  LastPoint=LastPoint-1
  Texte$=Mid$(a,FirstBackslash,LastPoint-FirstBackslash+4)
  If FileType(Left$(Filename,2)+Mid$(a,FirstBackslash,LastPoint-FirstBackslash+4))=1 Then
    MultiMediaFile(I)=Left$(Filename,2)+Mid$(a,FirstBackslash,LastPoint-FirstBackslash+4):Files3=Files3+1
  Else
    Files3=Files3
  EndIf
Else
  Goto RepeatRL3
End If
Next
CloseFile(file)
FilesAll=Files1+Files2+Files3
Return FilesAll
End Function


Und für mehrere Dateien gibt es auch noch das:

Code: [AUSKLAPPEN]

commandliner$=CommandLine()
Repeat
Last34=C34+1
C34=Instr(CommandLine(),Chr$(34),Last34)
If C34>0 Then Count34=count34+1
Until C34=0
If Count34>2 Then Files=Count34/2:Anzahl=MultiSelect(Files,Commandliner):If RandomPlay=1 Then PlayRandom(delayer) Else Play(delayer)
If Count34=2 Then Commandliner1$=Mid$(Commandliner$,2,Len(commandliner)-2) Else Commandliner1$=Commandliner
If Count34<2 Then Commandliner1=Commandliner

Function MultiSelect(files,commandliner$)
Dim MultiMediaFile$(Files)
For Bitches=1 To Files
Start=Instr(Commandliner,Chr(34),Ende+1)+1
Ende=Instr(Commandliner,Chr(34),Start+1)
BackUp$=Mid$(commandliner,start,ende)
MultiMediaFile(Bitches)=Left$(BackUp,Instr(BackUp,Chr(34))-1)
Next
Return Files
End Function
Function Play(dela,J=0)
screenx=GraphicsX
screeny=GraphicsY
If J>Anzahl And RepeatPlay=1 Then J=0
If J>Anzahl And RepeatPlay=0 Then End
For J=J+1 To Anzahl
   Repeat
      Select Lower$(Right$(MultiMediaFile$(J),3))
         Case "ogg","mp3"
            If NoAudioSkinMode=1 Then
               ViewSound(MultiMediaFile(J),J,VersionsNummer)
            Else
               ViewSoundSkinned(MultiMediaFile(J),J,VersionsNummer)
            EndIf
         Case "jpg"
            Graphics GraphicsX,GraphicsY,32,GraphicsMode
            readimg=LoadImage(MultiMediaFile(J));+1))
            x=ImageWidth(readimg)
            y=ImageHeight(readimg)
            div_x#=Float#(GraphicsX)/Float#(x)
            div_y#=Float#(GraphicsY)/Float#(y)
            If div_x=>div_y Then
               tpixx=(GraphicsX-(x*div_y))/2
               tpixy=(GraphicsY-(y*div_y))/2
            Else
               tpixx=(GraphicsX-(x*div_x))/2
               tpixy=(GraphicsY-(y*div_x))/2
            End If
            If x>screenx Or y>screeny Or x>screenx And y>screeny Then
               ScaleImageFast(readimg,FrontBuffer(),tpixx,tpixy,GraphicsX,GraphicsY)
            Else
               drawy=(screeny-y)/2
               drawx=(screenx-x)/2
               DrawImage readimg,drawx,drawy
            End If
              start=MilliSecs()
               Repeat
                   AppTitle dela+" Millisecs "+MultiMediaFile$(Zahlen(J));+1))
                   If KeyDown(203) Then dela=dela-1:If KeyDown(205) Then dela=dela+1
                   Ende=MilliSecs()
               Until ende-start=>dela
              Exit
      End Select
   Forever
Next
End
End Function
Function PlayRandom(dela,J=0)
screenx=GraphicsX
screeny=GraphicsY
If J>Anzahl And RepeatPlay=1 Then J=0
If J>Anzahl And RepeatPlay=0 Then End
SeedRnd MilliSecs()
For JR=JR+1 To Anzahl
   Repeat
SeedRnd MilliSecs()
JR=Rand(1,Anzahl)
      a$=""
      a$=MultiMediaFile(JR)
      If Lower$(Right$(MultiMediaFile$(JR),3))="jpg" Then
         Graphics GraphicsX,GraphicsY,32,GraphicsMode
         readimg=LoadImage(MultiMediaFile(JR))
         x=ImageWidth(readimg)
         y=ImageHeight(readimg)
         div_x#=Float#(GraphicsX)/Float#(x)
         div_y#=Float#(GraphicsY)/Float#(y)
         If div_x=>div_y Then
            tpixx=(GraphicsX-(x*div_y))/2
            tpixy=(GraphicsY-(y*div_y))/2
         Else
            tpixx=(GraphicsX-(x*div_x))/2
            tpixy=(GraphicsY-(y*div_x))/2
         End If
         If x>screenx Or y>screeny Or x>screenx And y>screeny Then
            ScaleImageFast(readimg,FrontBuffer(),tpixx,tpixy,GraphicsX,GraphicsY)
         Else
            drawy=(screeny-y)/2
            drawx=(screenx-x)/2
            DrawImage readimg,drawx,drawy
         End If
           start=MilliSecs()
         Repeat
            AppTitle dela+" Millisecs "+MultiMediaFile$(JR)
            If KeyDown(203) Then dela=dela-1:If KeyDown(205) Then dela=dela+1
            Ende=MilliSecs()
         Until ende-start=>dela
         Exit
      End If
       If Lower$(Right$(MultiMediaFile$(JR),3))="ogg" Then ViewSound(MultiMediaFile(JR),JR,VersionsNummer)
       If Lower$(Right$(MultiMediaFile$(JR),3))="mp3" Then ViewSound(MultiMediaFile(JR),JR,VersionsNummer)
   Forever
Next
End
End Function
Projekte: www.amyscbi.de
I never comment my sourcecode. What's HARD to write must be HARD to read!

Eingeproggt

BeitragMo, März 12, 2007 22:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Schon wieder einer, der nen alten Thread ausgräbt... Smile

StepTiger hat Folgendes geschrieben:

Bald folgt noch WPL, wenn ich herausfinde, was die tid macht. Weiß es jemand von euch?


Hast du es schon herausgefunden? oder jemand anderer? Interessiert mich nämlich seit Neuestem auch.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

StepTiger

BeitragMo, März 12, 2007 22:46
Antworten mit Zitat
Benutzer-Profile anzeigen
hab mich nicht wieder damit befasst. Ich schau mal demnächst.
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

Eingeproggt

BeitragDo, März 29, 2007 16:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Es interessiert mich noch immer Smile

Auf Wotsit findet man kein WPL, auch nach einer ausgedehnten Google-Suche blieb ich erfolglos. Weiss denn wirklich niemand Bescheid?
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group