Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi PLS Playlisten speichern und öffnen (https://www.delphipraxis.net/66939-pls-playlisten-speichern-und-oeffnen.html)

robinWie 6. Apr 2006 17:09


PLS Playlisten speichern und öffnen
 
Hallo,
Ich habe ich mir mal Funktionen für das Speichern und Öffnen Playlist im .pls Format geschrieben.
Ich denke die kann sicher jemand brauchen :-D

Delphi-Quellcode:
uses {...} ,IniFiles;
//...
function OpenPLS(const FileName: string; var Playlist: TStringList): Boolean;
var
 PLS: TIniFile;
 i,c: integer;
 File_N: string;
begin
  Playlist:=TStringList.Create;
  try
  //Datei oeffnen
   PLS:=TIniFile.Create(FileName);

  //Anzahl der Dateien auslesen
   c:=PLS.ReadInteger('playlist','NumberOfEntries',-1);

  //Dateien in die Stringliste eintragen
   for i:=1 to c do
    begin

     //Dateinamen auslesen
     File_N:=PLS.ReadString('playlist','file'+IntToStr(i),'');

     //Datei auf Gültigkeit überprüfen
     if FileExists(File_N) then

      //Wenn Datei existiert Datei Hinzufuegen
      Playlist.Add(File_N);

    end;
   Result:=True;

  //Beim Fehler "False" ausgeben
  except
   Result:=False;
  end;

  //Speicher Freigeben
  PLS.Free;
end;

function SavePLS(const FileName: string; Playlist: TStringList): Boolean;
var
  PLS: TIniFile;
  i: integer;
  File_N: string;
begin
  //Ueberpruefen ob die Playlisten "verbunden" sind
  if not Assigned(Playlist) then
   begin
    Result:=False;
    Exit;
   end;
  try

    //Datei erstellen
    PLS:=TIniFile.Create(FileName);

    //Anzahl der Dateien schreiben
    PLS.WriteInteger('playlist','NumberOfEntries',Playlist.Count-1);

    //Dateien schreiebn
    for i:=1 to Playlist.Count-1 do
     begin

      //Gesamten Dateinamen schreiben
      PLS.WriteString('playlist','file'+IntToStr(i),Playlist.Strings[i]);

      //Dateinamen Extrahieren und schreiben
      File_N:=ExtractFileName(Playlist.Strings[i]);
      PLS.WriteString('playlist','title'+IntToStr(i),File_N);
     end;
  Result:=True;

  //Beim Fehler "False" ausgeben
  except
    Result:=False;
  end;

  //Speicher Freigeben
  PLS.Free;
end;

Gausi 6. Apr 2006 18:05

Re: PLS Playlisten speichern und öffnen
 
Ich hab vor kurzem auch ein solche Funktion geschrieben, und habe daher ein paar Anmerkungen:

Anstelle für den Titel den Dateinamen zu schreiben, ist es in der Regel üblich, dafür das Format "Artist - Titel" zu wählen. Wenn man im Rahmen eines mp3-Players diese Funktion benutzen möchte, und sowieso die ID3-Tags besorgt, kann man das da verwenden.
Außerdem gibts noch
Delphi-Quellcode:
Dauer := Ini.ReadInteger('playlist','Length'+IntToStr(i),0);
für die Länge des einzelnen Liedes - könnte man dann auch einbauen.
Das geht natürlich nur, wenn man diese Daten schon hat, oder eine geeignete Struktur in seinem Programm nutzt. Aus der übergebenen Stringlist müsste man dann eher eine Objectlist machen, deren Objekte die einzelnen Info-Felder besitzen.

Weswegen ich das hier aber hauptsächlich schreibe ist, dass hier die relativen Pfade fehlen ;-) In einer *.pls gibt es nämlich durchaus die Möglichkeit, die Pfade relativ zu speichern. Das sollte da auf jeden Fall mit rein.
Die Funktionen ExpandFilename und ExtractRelativePath sind da recht hilfreich ;-)

robinWie 7. Apr 2006 12:33

Re: PLS Playlisten speichern und öffnen
 
Den Titel habe ich nicht als ID3, weil es sich ja nicht umbedingt um MP3s handelt. Es können ja auch Waves sein.
Zitat:

Weswegen ich das hier aber hauptsächlich schreibe ist, dass hier die relativen Pfade fehlen Wink In einer *.pls gibt es nämlich durchaus die Möglichkeit, die Pfade relativ zu speichern. Das sollte da auf jeden Fall mit rein.
Die Funktionen ExpandFilename und ExtractRelativePath sind da recht hilfreich Wink
Diese möglichkeit kenne ich gar nicht :oops: . Mal sehen wenn ich Zeit habe werde ich mich damit beschäftigen

Wishmaster 23. Apr 2006 06:33

Re: PLS Playlisten speichern und öffnen
 
Hi

Zitat:

//Datei auf Gültigkeit überprüfen
if FileExists(File_N) then
das funzrt nicht überall, zbw. winamp Speicher seine CD-Tracks nicht als lesbare date ab sondern als Laufwerk + Track Nr. (cda://L,1) du solltest das überprüfen und umwandeln
(L:\Track01.cda) damit auch andere Programme damit zurecht kommen.

Und was ist mit Internet Streams (http://, ftp://, mms://)


Ich benutze in meiner Funktion auch TIniFile um die Playlist (.pls) auszulesen aber ich habe gemerkt das einige Playlists kommen ohne die folgenden Parameter wie ([playlist], NumberOfEntries=, File1=, Title1=, Length1= oder (cda://L,1) ) da werden nur die links Angegeben wie

Zitat:

C:\...\bla bla.mp3
C:\...\test.mp3
C:\...\123 123.mp3
C:\...\....!
Da wehre es sicher Stringlisten(TStringList) zu nutzen!



Zitat:

[playlist]
File1=cda://L,1
Title1=Artist - Track 1
Length1=211
Zitat:

[playlist]
NumberOfEntries=1
File1=http://160.79.128.40:7010
Title1=D I G I T A L L Y - I M P O R T E D - EuroDance channel!
Length1=-1

Aike 29. Mai 2007 22:08

Re: PLS Playlisten speichern und öffnen
 
Wie sieht denn ein möglicher Funktionsaufruf aus?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz