ich möchte die Tags von zig Audio-Formaten (zum Beispiel .mp3,.wav,.wma,.aiff,.aif,.ogg) auslesen. Ich verwende FMOD als Audiobibliothek, die das kann und Lazarus. Es gibt nur ein sehr ätzendes Problem: die Geschwindigkeit ist inakzeptabel bei Playlisten mit >1000 Liedern. Ich habe dazu schon einmal eine Frage im FMOD-Forum erfolglos gestellt: http://www.fmod.org/forum/viewtopic.php?t=10042. Wenn ihr mir dabei helfen könntet, wäre das sehr gut.
Falls nicht, habe ich hier im Anhang etwas für die FPC-Benutzer: Der Code verwendet die TntControls, lohnt es sich, die TntControls (Unicodeunterstützung) durch Lazarus'-Unicode zu ersetzen und statt einem TntFileStream einen normalen FileStream zu nehmen ? Die Methode im Anhang ist übrigens schneller als die von FMOD. Der Unterschied ist übrigens: Wenn ich mit den zig Units die Tags lese, wird es ein einziges mal (und das auch noch schneller als FMOD es kann) geladen und danach muss es nicht nochmal geladen werden - es ist sozusagen schon da und müllt soweit ich weiß nicht mal den Speicher zu. Der Anhang funktioniert scheinbar aus mehreren Parserproblemen nur mit Delphi. Abgesehen davon scheint es sowieso sinnlos die Tnts drinnen zu lassen.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Wie hast du das laden der Tags organisiert? Lädst du nur, wenn ein Lied in den Sichtbaren Bereich der Liste kommt (oder gestartet wird) und bisher keine Informationen geladen wurden oder lädst du immer alles?
Hier kann es sich auszahlen, die relevanten Tags immer im Cache zu behalten und nur zu laden, wenn ein Lied sichtbar wird, wo noch keine Infos zu geladen wurden. Dann sollte das eigentlich (fast) nicht auffallen.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Nun die Frage ist ja: Wenn ich nun die Lieder in mein eigenes Playlistenformat speichere, kann ich Artist und Titel locker angeben - von mir aus auch Länge. Wenn ich nun eine M3U öffne, ginge das auch, aber es gibt Formate, die da etwas Schwierigkeiten machen könnten - eine simple M3U unterstützt nämlich soweit ich weiß keine Artist- und Titel-Angabe. Ich erinnere mich gerade an irgendein Programm, dass ich sau lange unter Linux benutzen musste, weil mein Player erst bald benutzbar und unter Linux verfügbar sein wird, welches neu hinzugefügte Titel erst lädt, wenn sie in den sichtbaren Scrollbereich kommen und sie dann speichert. Das ist gut. Hättest Du dafür einen ordentlichen Lösungsvorschlag, ich wüsste eben nicht, was ich bei irgendwelchen simplen Playlistenformaten tun sollte.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Naja, du musst ja die Informationen nicht zwangsweise in die Datei speichern. Du kannst sie ja, wenn das Format es nicht unterstützt, auch einfach nur im Speicher halten und dann halt nach dem Programmneustart wieder neu einlesen, das ist dann halt so. Oder für die aktuelle Playlist eine Informationsdatei im Programmverzeichnis oder so ablegen. Das halte ich sowieso für sinnvoll, damit eine Playlist nicht immer gespeichert sein muss, um auch nach einem Programmneustart noch verfügbar zu sein (siehe Verhalten von Winamp an dieser Stelle).
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Naja beim Start neu einlesen ist irgendwie auch nicht so gut. Ich bin ein Programmierer der seinen Benutzern immer gewisse Möglichkeiten offenlässt. Von daher könnte man das so ja auch einbauen, aber die aktuelle Playlist speichere ich sowieso grundsätzlich. Ich denke bloß an die Benutzer die mehrere Playlisten haben, ich habe eine riesige und sonst keine, die ich benutzen würde und da ginge das so eigentlich nur, solange die Playlist in meinem Format mit allen Infos gespeichert würde.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Naja gut, aber selbst wenn das Format die Titel und Autor Infos nicht speichern kann, kannst du halt dann immernoch on-the-fly die aktuell sichtbaren Titel auslesen, das sollte ja nicht so lange dauern. Wenn du das ganze dann auch noch in einem Thread auslagerst, kann der Benutzer solange auch schon anderes machen, während aus den ganzen "Filename.mp3" Datei für Datei ein "Artist - Title" wird. Du brauchst halt nur einen Cache und ein zuverlässiges System, die den Thread immer wieder zurücksetzt, wenn sich am Aufgabengebiet (also dem aktuell sichtbaren Listenteil) etwas ändert.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.