AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Eigene Playlist entwickeln?!

Eigene Playlist entwickeln?!

Ein Thema von Cyberaxx · begonnen am 7. Sep 2007 · letzter Beitrag vom 13. Sep 2007
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
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
7. Sep 2007, 19:05
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Multimedia" verschoben.
Es geht um Delphi.
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#3

Re: Eigene Playlist entwickeln?!

  Alt 7. Sep 2007, 22:01
Hau einfach die Daten in eine Datenbank, dann muss du dir um die Punkte Speichern/Laden und Suchen keine sorgen machen, das macht alles die DB für dich.


mfg, Björn
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Benutzerbild von argonix
argonix

Registriert seit: 28. Feb 2007
257 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Eigene Playlist entwickeln?!

  Alt 7. Sep 2007, 22:14
Mein Musikplayer Merkur Player macht genau das. (mit ID3-Tag usw.) Dabei werden die Daten in einer XML-Datenbank gespeichert. Das geht mit wenig Aufwand (es gibt hier im Forum irgendwo auch ein gutes Tutorial dazu). XML ist enorm flexibel und (meißtens) auch sehr schnell.
Warum schreibst du die Daten zur Anzeige nicht in ein Listview? Das geht doch viel einfacher!

[edit]Unsinn entfernt[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

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

Re: Eigene Playlist entwickeln?!

  Alt 7. Sep 2007, 22:33
Na das wäre ja ein wenig zu einfach

Die frage ist wie die Performans ausschaut und das aktualisieren der Daten.
Ist eine Datenbank, muss ja eine Lokale sein wirklich schneller?
Jemand ändert nen Eintrag oder den Namen. Beim Name wäre das ja ok, ist der Name nicht vorhanden einfach löschen aber beim ändern, das heisst ich muss jede Datei eh noch einmal aufrufen um zu sehen ob die Daten nicht stimmen.

Im Visuellen habe ich ja eine Listwiev.
Da wird halt nur Visuell dargestellt für die Suche, ich will intern ja dennoch die gesamte Liste haben und nur die Anzeigen die im Suchergebnis enthalten sind. Genau das ist ja bisher auch nur das Problem gewesen, habe nur den Dateinamen übergeben und nicht noch das Objekt angehängt.
Mit der DB wäre ne Idee, aber da ja wie gesagt was schneller geht.
Ich würde ungerne auf eine XML zurück greifen, gerade was mal eben von einigen Tausend Dateien angeht.
Ich gehe hier auch nicht von einem Mediaplayer aus was die Playlist angeht sondern eher ein Verwaltungstool der Dateien.
Die Suche soll ja nicht alles an dem Konstrukt sein.

[Edit]Was ist bei die die Grundlage für Aidio und Video? Nutzt Du eine Komponente oder mehrere?[/Edit]
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
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#6

Re: Eigene Playlist entwickeln?!

  Alt 8. Sep 2007, 10:52
Grade bei vielen Datensätzen würde ich eine DB vorziehen, durch SQL Abfragen kann man schnell die gesuchten Datensätze anzeigen lassen. Natürlich könnte man es von Hand etwas schneller machen, aber in dem DBMS stecken schon sehr viele Optimierungen drin, ich sehe ich das es ein vertretbarer Aufwand wäre, es von Hand selbst zu machen, zumal ich bezweifle das du es schneller hin bekommst als eine DB.

mfg, Björn
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

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

Re: Eigene Playlist entwickeln?!

  Alt 8. Sep 2007, 14:26
Abgesehen von XML was wäre denn eine nette Datenbank, die Lokal läuft und die ich ohne weitere Installationsvorraussetungen nutzen kann unter Windows sowie unter Linux?
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
Benutzerbild von Cyberaxx
Cyberaxx

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

Re: Eigene Playlist entwickeln?!

  Alt 10. Sep 2007, 16:38
Habe mich nun für ein Datenbank Konzept entschieden.
Ist vllt. nicht die beste Wahl aber ich denke dafür geniügen die Ansprüche, ist nun eine SQLite Datenbank.
Hier habe ich wenigstens den Vorteil, das man durch die SQL Syntax auch andere Datenbanken nutzen kann und entsprechend auch erweitern kann ohne viel Aufwand. Hoffe das die Zugriffszeigen recht gut sind.

@argonix
Habe deinen Rat befolgt und alles in eine TreeView rein gesetzt, macht Optisch schon mehr her.
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
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Eigene Playlist entwickeln?!

  Alt 10. Sep 2007, 19:43
wie währe es denn mit einer such Funktion für Dateien ?
also Praktisch ein eigens "dir" wenn du so möchtest.... kannst du folgend ?

Bei bedarf kann man die Dateien auch noch öffnen und per FMod oder so die Tags Rauslesen wenn man möchte !
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

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

Re: Eigene Playlist entwickeln?!

  Alt 10. Sep 2007, 19:57
@mimi
Zum ersten Teil nicht so ganz, Suchfunktion ist ja bereits in der NonDB Version drin, da bisher aber auch nur nach Dateinamen, da ich damit jemanden Delphi ein wenig näher bringen will, und ich noch keine Lust hatte ihm die Jedis auf der Turbo Version zum laufen zu bringen.

Mit der DB allerdings geht das suchen noch schneller und ich kann auch direkt nach mehreren Kreterien suchen.
Abspielbar soll das alles nachher per BASS.DLL oder aber playlist -> WinAmp sein.
Was mir immernoch fehlt ist etwas um WinAmp bzw NSV Dateien abzuspielen... Falls da wer etwas hat, her damit
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
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:27 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