Einzelnen Beitrag anzeigen

Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#1

Eigene Playlist entwickeln?!

  Alt 7. Sep 2007, 18:48
Hallo,

was besseres viel mir leider gerade nicht als Thema ein.

Es geht darum ein eigenes Playlist-System zu erstellen, ähnlich der MediaLibrary von Winamp.
Ich weiß nicht ob Winamp dafür eine Datenbank benutzt aber das ist gerade wengier wichtig.

Ich wurde von einem Bekannten angesprochen ob ich nicht etwas bauen könnte damit er eine interaktive Suche für seine Musik hat.
Er hat also alle Seine Musik und möchte nun nach einem Lied suchen, dessen genauen Namen er nicht mehr kennt, aber einen Teil von ihm.

Hatte es auch zum Teil schon fertig gehabt aber nicht direkt mit dem Erfolg den ich wollte.
Beim erstellen der "Liste" übergibt man Quellverzeichnis und eine Liste vom Typ TStrings(für die Visualisierung).
Das Verzeichnis inkl. aller Unterverzeichnisse wird durchsucht und für jede gefundene Datei ein CollectionItem angelegt.
Darin enthalten sind bisher nur Pfad und Dateiname. Später sollen dort aber auch noch ID3 Tag, Länge usw. drin enthalten sein.
Nachdem alle Dateien hinzugefügt werden, wird einfach nur der Dateiname an die Liste angehängt.
Intern nutze ich nur TStrings, da ist mir schon aufgefallen das es dort ja keine Eigenschaft ItemIndex gibt, was natürlich nicht so toll ist. Bin dann erstmal über IndexOf(S: String) gegangen aber was passiert wenn öfter eine Datei vorkommt. Dann würde er immer die erste nutzen.
Sie suche ansich funtioniert recht einfach. die liste wird gesäubert und es werden alle CollectionItems durchgegangen und wenn der Suchtext passt, wird er zur liste hinzugefügt. Da hab ich dann eben gemerkt wenn im Verzeichnis /xy/lied.mp3 liegt und direkt darunter im Verzeichnis /xx/lied.mp3 und ich klicke letzteres an er eben das erste nehmen würde.
Somit dachte ich ok übergibst halt auch das eigentliche Objekt bei der Suche und gehst dann direkt über das Objekt in der Liste.
Es wäre jetzt die Frage die ich hier stelle, ob es eine bessere Lösung gebe sowohl in der Umsetzung und Aufwand.


Das ist jetzt noch der Original Code ohne übergabe des Objektes an die Liste
Delphi-Quellcode:
type
  TAudioItem = class(TCollectionItem)
  private
    FFilename: String;
    FDirectory: String;
    procedure SetDirectory(const Value: String);
    procedure SetFilename(const Value: String);
  public
    property Filename: String read FFilename write SetFilename;
    property Directory: String read FDirectory write SetDirectory;
  end;

type
  TAudioItems = class(TCollection)
  private
  public
    constructor Create;
    constructor Destroy;
    function Add(Directory, Filename: String): TAudioItem;
    function GetAudioItem(Index: Integer): TAudioItem;
  end;

type
  TPlayList = class(TObject)
  private
    FList: TStrings;
    FAudioItems: TAudioItems;
    FCount: Integer;
    procedure GetFiles(aDirectory: String; const FileMask: String; SubDirs: Boolean);
  public
    constructor Create(List: TStrings);
    destructor Destroy; override;
    procedure AddDirectory(ADirectory: String);
    procedure FileEntry(S: String; var Directory: String; var Filename: String);
    procedure Search(S: String);
    function Count: Integer;
    function SelectedItem: Integer;
  end;

procedure TPlayList.AddDirectory(ADirectory: String);
  var
    SR: TSearchRec;
    I: Integer;
begin
  GetFiles(ADirectory, '*.mp3', True);

  for I := 0 to FAudioItems.Count - 1 do
    FList.Add(FAudioItems.GetAudioItem(I).Filename);

end;

procedure TPlayList.FileEntry(S: String; var Directory, Filename: String);
  var
    AItem: TAudioItem;
    I: Integer;
begin
  for I := 0 to FAudioItems.Count - 1 do
    if (FAudioItems.GetAudioItem(I).Filename = S) then
      begin
      AItem := FAudioItems.GetAudioItem(I);
      break;
      end;

  Directory := AItem.Directory;
  Filename := AItem.Filename;
end;
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat