Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Hohe "Ladezeit" bei vielen MP3 Dateien (FindAllFiles) (https://www.delphipraxis.net/94755-hohe-ladezeit-bei-vielen-mp3-dateien-findallfiles.html)

strange-t 26. Jun 2007 13:47


Hohe "Ladezeit" bei vielen MP3 Dateien (FindAllFil
 
Hi,
ich habe eine Art JukeBox programmiert.
Man kann auswählen welche Ordner man zur Auswahl der MP3's "freigibt".
Ich durchsuche die Ordner dann mit FindAllFiles aus der CodeLib auf Dateien mit der Endung "*.mp3".

Bei einigen GB an Dateien dauert das allerdings ewig. :-/
Wie könnte ich das denn anders machen damit es schneller geht? Vielleicht was anderes als FindAllFiles oder so...

Notfalls hab ich mir auch schon überlegt dieses Durchsuchen einmal nach dem "Freigeben" durchrattern zu lassen und alle gefundenen MP3 Dateien dann in TXT Dateien (z.B.) schreiben zu lassen.

Später würde ich dann nur auf diese TXT Dateien zugreifen.
Aber ich weiss nicht ob das so einfach geht bzw. ob das nicht jedesmal genau so lange dauert...


Bin für jede kleine Idee dankbar! :)

Gruß
Torsten

bigg 26. Jun 2007 14:02

Re: Hohe "Ladezeit" bei vielen MP3 Dateien (FindAl
 
Das reine Auflisten von 500-1000 Dateien in einem einzelnen Verzeichnis dauert nicht sehr lange. In unter 1 Sekunde sollte das erledigt sein. Durchsucht du allerdings sehr viele Verzeichnisse dauert das Suchen unter Umständen sehr lange, je nach Verzeichnistiefe und Anzahl enthaltender Dateien etc.

Liest du dann zusätzlich noch deren ID3-Tags aus, dauert es in jedem Fall sehr lange. Ich vermute mal, das du das sogar tust. Hier dürfte dann auch das Hauptproblem zu finden sein.

Aber bevor ich hier noch alle restlichen Fälle aufmale, poste doch mal eine kleine Demo deines Programms.

laserflor 26. Jun 2007 14:05

Re: Hohe "Ladezeit" bei vielen MP3 Dateien (FindAl
 
Hallo Torsten,

Dein Vorhaben in allen Ehren .. aber Jukebox-Programme gibts doch wie Sand am Meer :???:

Guck Dir mal MediaMonkey an. Das ist das, was mir bisher am besten gefallen hat :angel2:

Gruß Rolf

strange-t 26. Jun 2007 14:33

Re: Hohe "Ladezeit" bei vielen MP3 Dateien (FindAl
 
ui, das geht ja schnell hier ;)

@bigg:
hast recht, ich lese die ID3 Tags aus. Voll vergessen zu erwähnen. :oops:
Ich werde das mal weglassen und schauen ob es schneller geht. Dann weiss ich ja wo ich dran arbeiten muss!
DANKE!!! :)


@laserflor:
Ja, hast recht. Da gibt es wirklich tausende. Habe auch schon viele getestet und nicht eine hat mir wirklich zugesagt.
MediaMonkey war natürlich auch dabei. Das war zwar für mich die zweitbeste aber immernoch nicht das was ich wollte *ggg*.
Deshalb schreib ich mir halt ne eigene. :mrgreen:
Funzt ja auch schon einigermaßen. Hauptproblem ist eben das mit der Ladezeit.
Trotzdem danke für deinen Hinweis.


LG
Torsten

Ghostwalker 26. Jun 2007 14:52

Re: Hohe "Ladezeit" bei vielen MP3 Dateien (FindAl
 
Einfach so als Anregung:

Speicher doch die Daten in einer DB. Das dauert dann zwar einmal sehr lange, aber dafür läufts danach schnell und du kanns sogar sehr schnell nach Titel, Intepret usw. suchen. :)

Nachteil:

Wenn neue MP3's dazu kommen mußt du natürlich die DB aktuallisieren.

laserflor 26. Jun 2007 15:55

Re: Hohe "Ladezeit" bei vielen MP3 Dateien (FindAl
 
@Ghostwalker:
Datenbank ist ein guter Ansatz :)
Ich habe mich auch jahrelang mit dem Thema MP3-Katalog beschäftigt und bin dabei darauf gekommen, dass die BDE bei über 4.000 Datensätzen (die hatten so ca. 500 Byte pro Datensatz und über 100 Byte pro Index) fast in eine Art Schlafmodus fällt .. also extrem langsam wird.

@strange-t:
Das einzige, was mir einfallen würde, was ich zusätzlich bräuchte:
Eine Analyse der Titel, damit ich sie nach Sprachen einordnen kann.. Immerhin kann IMHO in MySQL sogar Soundex als Index benutzen.. :?: Ich überlege, ob ich da noch was investiere :twisted:
Als Tipp: Nimm gleich Interbase oder FireBird .. oder halt MySQL.
Ein gutes Tutorial zum Thema findest Du hier Interbase
(Ich hoffe, dass "Fremdwerbung" nicht unerwünscht ist, sonst müsste mir der Moderator eine PN schicken.)

Gruß Rolf

bigg 26. Jun 2007 16:19

Re: Hohe "Ladezeit" bei vielen MP3 Dateien (FindAl
 
Liste der Anhänge anzeigen (Anzahl: 1)
Häh, Datenbank? :shock:
Ist das nicht etwas überdimensoniert?

Eine TList in Verbindung mit Mergesort ist alles was man für die Verwaltung der Daten benötigt. Anschließend könnte man sich Reports für Excel oder HTML-Tabellen erstellen lassen.

Ist man dazu auch noch zu faul nimmt man wie ich das VT und lässt die Liste dort anzeigen. Und um die Performance der Anwendugn zu optimieren, liest man nicht alle Dateien in einem Rutsch aus, sondern nur die die auch im VT oder in einer Listview momentan angezeigt werden.

strange-t 26. Jun 2007 17:38

Re: Hohe "Ladezeit" bei vielen MP3 Dateien (FindAl
 
so, wenn ich das ID3 Tag auslesen weg lasse, geht das wirklich richtig schnell...

an eine datenbank hab ich auch schon gedacht. allerdings kenne ich mich da noch gar nicht aus.
aber was nicht ist, kann ja noch werden. :zwinker:

@bigg:
nur auslesen was auch in der listview angezeigt wird geht leider nicht so ganz,
da in der listview nunmal der komplette ordnerinhalt angezeigt werden muss *ggg*.
was du mit TList und Mergesort meinst, weiß ich grad net... :gruebel: sorry

ich habe das jetzt allerdings erstmal weg gelassen und in der listview wird wirklich nur das angezeigt was auch durch eine manuelle sucheingabe gefunden wurde. das geht dann recht flott, auch mit ID3 Tags.
muss mich dann mal mit DB befassen oder eine andere lösung finden.
weiss nicht zufällig jemand wie das z.B. in mediamonkey gespeichert wird?
da muss man ja auch einmal alles einlesen und danach gehts auch recht schnell wenn ich mich richtig erinnere.

@laserflor:
danke für die tips und den link! kann ich gut gebrauchen wenn ich mich für ne DB entscheide :zwinker:


so, dann werd ich mal sehen wie's weitergeht lol

danke schonmal für die antworten.
falls es noch weitere ideen, tips oder hilfe gibt, nur zu... :mrgreen:

lg
torsten

bigg 26. Jun 2007 18:08

Re: Hohe "Ladezeit" bei vielen MP3 Dateien (FindAl
 
Haste schonmal gesehen wie das der Windows-Explorer macht unter XP? :???:
Dieser liest nur die Infos, die der Benutzer auch tatsächlich sieht ein und speichert sie zwischen.

Du kannst ja deine Einträge mit dem Dateinamen eintragen und beim runterscrollen
liest du dann die einzelnen Dateien ein. Ein Flag kennzeichnet dann, ob die Datei schonmal
eingelesen wurde. Macht Winamp und Co. ebenso.

strange-t 26. Jun 2007 18:18

Re: Hohe "Ladezeit" bei vielen MP3 Dateien (FindAl
 
hey, stimmt!!!
daran hab ich noch gar net gedacht. das is die idee schlechthin lol
danke!!! :)

öööhhhh, aber wie funzt das??? lol

hast du da n beispiel-programm oder so?
ich arbeite mit ner listview im vsReport-Style.
in der caption hab ich den Pfad und in den anderen teilen eben Interpret, Titel usw.

THX!!!!

lg

bigg 26. Jun 2007 18:38

Re: Hohe "Ladezeit" bei vielen MP3 Dateien (FindAl
 
Beispiele habe ich nicht, aber so schwer ist es nicht. :???: Du benötigst wie ich schon erwähnt habe eine TList. In dieser Liste speicherst du mit Hilfe von Strukturen/Klassen/Records deine Infos (Eine Liste mit Pointern). Die Listview dient ausschließlich zum Darstellen der Infos. Da das Suchen der Dateien recht flott ist, legst du auch genauso viele Einträge wie die Anzahl gefundener Dateien an, das gilt für die Listview, als auch für die TList. Mit einem zusätzlichen Thread könnte man dann die TList auf Nachfrage füllen. Ist ein gültiger Eintrag vorhanden, so wird er auch gleich gezeichnet.

Um das Zeichnen müssest du dich dann selbst kümmern. Wie man das macht, findest du ebenfalls hier im Forum.

Ghostwalker 26. Jun 2007 18:39

Re: Hohe "Ladezeit" bei vielen MP3 Dateien (FindAl
 
Zitat:

Zitat von bigg
Häh, Datenbank? :shock:
Ist das nicht etwas überdimensoniert?

Nein. Es ist alles eine Frage, was man damit machen will und wie groß die Datenmengen sind

Zitat:

Eine TList in Verbindung mit Mergesort ist alles was man für die Verwaltung der Daten benötigt. Anschließend könnte man sich Reports für Excel oder HTML-Tabellen erstellen lassen.
Also, das möcht ich nicht mit ner einigermaßen guten Sammlung machen (10.000 MP3++). :)

strange-t 26. Jun 2007 19:01

Re: Hohe "Ladezeit" bei vielen MP3 Dateien (FindAl
 
ohje, das ist mir doch irgendwie zu hoch :(
werd mich mal bissl damit beschäftigen aber falls jemand lust hat n kleines beispiel dazu zu machen, is das natürlich viel besser. dann könnte ich anhand des codes etc. auch richtig sehen wie was funzt etc.

naja, mal abwarten und tee trinken bzw. rumprobieren :zwinker:


@ghostwalker:
die sammlung hat bestimmt auch mal über 10.000 dateien jenachdem wer die jukebox dann benutzt :zwinker:
ist die methode von bigg dann nicht zu empfehlen oder wie soll ich das verstehen? :gruebel:

bigg 26. Jun 2007 19:02

Re: Hohe "Ladezeit" bei vielen MP3 Dateien (FindAl
 
10.000 sind ja nicht grade sehr viel. In einer Excel-Tabelle nimmt das ja nicht mal 1/6 des verfügbaren Platzes ein. Ein Kumpel verwaltet so zum Beispiel seine Video-Sammlung. Ziemlich abenteuerlich, aber es funktioniert. :)

Ich schätze, wenn ich mal irgendwann ein Musikportal entwickeln sollte, wo man mehrere Millionen Titel katalogisieren müsste, würde ich auch zu einer DB greifen, aber so. Sind ja nur eine handvoll Songs. :cheers:

dominikkv 26. Jun 2007 19:24

Re: Hohe "Ladezeit" bei vielen MP3 Dateien (FindAl
 
so, bin auch grad drann an nem musik-katalogisierungsprogramm zu schreiben xD
dabei benutze ich meine eigene "datenbank"
einfach nen record definieren:
Delphi-Quellcode:
  TTabelle = Record
    Interpret, Album, Titel, Pfad: String[255];
    // und was du hier halt noch speichern willst
  end;
dann noch ne variable
Delphi-Quellcode:
  Tabelle = Array of TTabelle;
zum laden und speichern einfach

Delphi-Quellcode:
function TDatenbank.SaveToFile(Dest: string): Boolean;
var f: file of TTabelle;
    I: Cardinal;
begin
  result := true;
  if high(tabelle) > 1 then
  try
    assignFile(f, Dest);
    reWrite(f);
    for I := 1 to high(Tabelle) do
      write(f, Tabelle[i]);
    closeFile(f);
  except
    result := false;
  end; // try
end;

function TDatenbank.LoadFromFile(Source: string): Boolean;
var f: file of TTabelle;
begin
  result := True;
  try
    try
      assignFile(f, Source);
      reset(f);
      SetLength(Tabelle, 0);
      SetLength(Tabelle, FileSize(f)+1);
      C := 0;
      while not eof(f) do
        begin
          Inc(C);
          read(f, Tabelle[C]);
        end;
    finally
      closeFile(f);
    end;
  except
    result := false;
  end; // try
end;
end;
bei ca 18.500 musikfiles brauch das laden und speichern ca 1 sekunde, und das suchen und anzeigen in meiner "datenbank" ne halbe sekunde^^

eine ListView würde ich nicht zum anzeigen empfehlen, eher ein VirtualTreeView

strange-t 30. Jun 2007 23:24

Re: Hohe "Ladezeit" bei vielen MP3 Dateien (FindAl
 
danke dominik, werde das bei gelegenheit mal ausprobieren.
is im moment aus zeitgründen eher schlecht. ;(

gruß
torsten


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:13 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