Autor Beitrag
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Sa 23.07.11 14:29 
Ich möchte meinen Player um eine bessere CD-Audio-Unterstützung erweitern. Also nicht nur .cda-Dateien öffnen lassen, die man bei reinen Audio-CDs findet und über den normalen Datei-Öffnen-Dialog abspielen lassen kann. Das geht nämlich nicht bei diesen Enhanced-Mix-CDs (heißen die so :gruebel:), wo auch ein Video oder Software drauf ist. Und sowas wie CD-Text oder cddb-Unterstützung wäre ja auch nett.

Ein Problem, was ich dabei habe, ist dann das speichern der Playlists. In meinem Spezial-Format ist das kein Problem, da kann ich ja machen, was ich will. Aber bei m3u sieht das etwas doof aus. Habs grade mal ausprobiert, wie das andere so machen, und das ist irgendwie doof. :?

Winamp macht das so:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
#EXTM3U
#EXTINF:236,Track 1
cda://G,1
#EXTINF:228,Track 2
cda://G,2
#EXTINF:211,Track 3
cda://G,3
#EXTINF:228,Track 4


Der VLC so:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
#EXTM3U
#EXTINF:236,<Artist> - <Title> (aus CD-Text ausgelesen, aber die CD ist mir peinlich *g* )
#EXTVLCOPT:cdda-first-sector=0
#EXTVLCOPT:cdda-last-sector=17761
#EXTVLCOPT:cdda-track=1
cdda://G:\
#EXTINF:228,<Artist> - <Title>
#EXTVLCOPT:cdda-first-sector=17761
#EXTVLCOPT:cdda-last-sector=34873
#EXTVLCOPT:cdda-track=2
cdda://G:\
#EXTINF:211,<Artist> - <Title>
#EXTVLCOPT:cdda-first-sector=34873
#EXTVLCOPT:cdda-last-sector=50761
#EXTVLCOPT:cdda-track=3
cdda://G:\
#EXTINF:228,<Artist> - <Title>
#EXTVLCOPT:cdda-first-sector=50761
#EXTVLCOPT:cdda-last-sector=67894
#EXTVLCOPT:cdda-track=4
cdda://G:\


Der MPC kann mit solchen CDs nichts anfangen (bei Audio-CD-öffnen packt der .cda-Dateien rein, die gar nicht da sind), der WMP kann das nicht speichern (Menüpunkt ist disabled). Wenn ich die VLC-Liste mit einem anderen Player öffne, versagt bei allen getesteten der Parser, d.h. die Liste ist nur für den VLC lesbar.

Winamp ist mir da sympathischer, weil es mir näher am m3u-Standard erscheint. Ich persönlich würde ja gerne noch eine CD-ID dazu schreiben (z.B. die, die man für CDDB auch nimmt), um zu testen, ob beim Laden der Playlist noch dieselbe Audio-CD im Laufwerk ist.

Habt ihr noch ein paar andere Player in Verwendung? Wie machen die das? Oder habt ihr geniale Ideen, wie man das am geschicktesten machen könnte?

_________________
We are, we were and will not be.
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Sa 23.07.11 21:38 
Was hindert dich daran, es genau wie der Standard zu machen? Dann kannst du wenigstens auf die anderen zeigen. Ich würde mich da an deiner Stelle nicht von anderen beeinflussen lassen. Schließlich sollen die Dateien hauptsächlich in deinem Player abgespielt werden. Und falls es doch zu einem Austausch kommt, dann musst du auf den Standard verweisen. Wenn du jetzt eine Version nachbaust, dann schließt du die Player aus, die sich daran halten.

Edit: Ich würde aber an deiner Stelle ein Parsen von Winamp und VLC und anderen Playern rein programmieren. So bist du wenigstens unabhängig.
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Sa 23.07.11 23:01 
Das Problem ist ja, dass m3u für Dateilisten gedacht ist. CDDA kommt da eigentlich gar nicht vor. ;-)

Daher versuche ich rauszufinden, was da so üblich ist.

_________________
We are, we were and will not be.
rushifell
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 306
Erhaltene Danke: 14



BeitragVerfasst: So 24.07.11 11:37 
Hallo Gausi,

Bei mir sieht die Playlist einer normalen Cd ohne Schnickschnack folgendermaßen aus:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
#EXTM3U
#EXTINF:124,Track 1
F:\Track01.cda
#EXTINF:196,Track 2
F:\Track02.cda
...

Das schöne ist, wenn ich eine Enhanced-Audio-Cd mit Video einlege, dann funktioniert diese Playlist ebenfalls, die Zeit der einzelnen Tracks wird natürlich an die neue Cd angepasst. Die Anzahl der Titel stimmt logischerweise nicht ;-) Vielleicht könntest Du die Playlist in dieser Form speichern.

Das Laufwerk spielt dabei ja keine Rolle. Du könntest im Prinzip einfach nach dem Laufwerk suchen, in dem eine Audio-Cd eingelegt ist und bei Bedarf den Laufwerk-Buchstaben ändern.

gausi hat folgendes geschrieben:
Ich persönlich würde ja gerne noch eine CD-ID dazu schreiben (z.B. die, die man für CDDB auch nimmt), um zu testen, ob beim Laden der Playlist noch dieselbe Audio-CD im Laufwerk ist.

Die Disc-Id musst Du nicht unbedingt speichern. Ich würde das ganze über die Berechnung der Fuzzy-Disc-Id machen, wie das bei mp3's üblich ist. Die Fuzzy-Disc-Id wird aus der Tracklänge und Reihenfolge der Tracklist berechnet. Das Programm Mp3tag nutzt u.a. dieses Feature um die Daten aus der freedb zu ermitteln. Die Fuzzy-Disc-Id weicht natürlich, wie auch schon der Name sagt, von der original Disc-Id ab. Also, dadurch nicht verwirren lassen. Die Abfrage der Daten in der freedb funktioniert trotzdem!

Die Implementierung der Berechnung für die Fuzzy-Disc-Id ist sehr einfach. Ist zwar schon ein paar Jahre her, aber wenn Du Fragen dazu hast, dann kram ich meine alten Quellcodes raus.

Die Wahrscheinlichkeit, dass die Tracklänge und Reihenfolge zweier Audio-Cd's absolut identisch ist, ist sehr, sehr, sehr, sehr ;-) gering.

Gruß Richard
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mo 25.07.11 12:14 
Hm, bei mir klappen solche Playlists nicht mit Enhanced-CDs. Die .cda-Dateien werden dann nämlich nicht gefunden. Wenn das bei deinem Player funktioniert, dann wird der wohl aus der Info "Track02.cda" auslesen, dass der 2. Track auf der CD gewünscht ist, und das entsprechend anleiern. Das plane ich bei mir jetzt auch so - das "normale" Bass_StreamCreateFile klappt in dem Fall leider nicht, was ich bisher verwende.

Mit der Disc-ID meinte ich auch den Wert, der für die cddb- oder auch freedb-Abfrage verwendet wird. Code dafür brauche ich nicht, das erledigt die bass_cd.dll für mich. Wär halt schön, wenn der Player merkt, dass anstelle der Kuschelrock-CD jetzt was Slayer im Laufwerk liegt, auch wenn das Szenario arg an den Haaren herbeigezogen ist. :mrgreen:

Aber in der DP ist jemand auf der Suche nach Code, wie man diese ID ohne dlls berechnen kann. Vielleicht kannst du dem ja weiterhelfen. ;-) www.delphipraxis.net...ne-wnaspi32-dll.html

_________________
We are, we were and will not be.
rushifell
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 306
Erhaltene Danke: 14



BeitragVerfasst: Mo 25.07.11 16:58 
@Gausi: You lost me ;-)
Gausi hat folgendes geschrieben:
Mit der Disc-ID meinte ich auch den Wert, der für die cddb- oder auch freedb-Abfrage verwendet wird.

Die Disc-Id lass ich mir natürlich auch von der bass_cd.dll geben.

Die Fuzzy-Disc-Id wird aus den mp3's eines Albums berechnet und zwar aus Anzahl, Länge und der Reihenfolge der mp3's. Mit dieser Fuzzy-Disc-Id, die logischerweise oft von der normalen "Cd"-Disc-Id abweicht, können auch die Daten aus der freedb abgerufen werden. So ist es möglich, die mp3's ohne eingelegte Audio-Cd zu taggen.

Beim Programm Mp3Tag wäre das "Tag Quellen - freedb - Auf Basis der ausgewählten Dateien ermitteln".

Ich meinte nur, dass Du die Disc-Id nicht zwangsläufig in der Playlist speichern musst. Du solltest lediglich die Anzahl der Tracks und die Längen der einzelnen Tracks miteinander abgleichen. Dazu musst Du nicht einmal die Fuzzy-Disc-Id berechnen. Die Wahrscheinlichkeit, dass zwei Audio-Cd's die gleiche Anzahl an Tracks mit gleicher Reihenfolge und gleicher Tracklänge haben, ist sehr gering.

Gausi hat folgendes geschrieben:
Aber in der DP ist jemand auf der Suche nach Code, wie man diese ID ohne dlls berechnen kann.

Wie geschrieben, das meinte ich nicht. Man kann sich das Leben auch unnötig schwer machen. Aber eigentlich ist das, zumindest in der Theorie, auch recht einfach.

Gruß Richard
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mo 25.07.11 17:07 
Ah, ok. Dann haben wir etwas aneinander vorbei geschrieben. Dein Verfahren wird bei mir aber nicht funktionieren, da ich nicht unbedingt die ganze CD in der Playlist haben will, sondern auch nur einzelne Tracks, und das gemischt mit Dateien und/oder Webstreams. Dann kann ich eine solche Fuzzy-ID nicht sinnvoll bestimmen, da mir die Daten dazu fehlen. ;-)

_________________
We are, we were and will not be.
rushifell
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 306
Erhaltene Danke: 14



BeitragVerfasst: Mo 25.07.11 17:27 
Mal ne doofe Frage: Nutzt Du so etwas wirklich? Also ich zieh meine Cd's grundsätzlich erstmal auf Platte und wenn ich mal 'ne Cd im Laufwerk höre, dann komplett.

Wenn das Speichern der Disc-Id nicht funktioniert, könntest Du immerhin die Länge der einzelnen Tracks mit der Länge des entsprechenden Tracks in der m3u-Liste vergleichen. Wenn's dann immer noch die falsche Cd ist, Pech. Woher soll den der Benutzer wissen, welche Audio-Cd er einlegen muss??? Kann der Album-Titel in der m3u-Liste gespeichert werden?

Für diesen Beitrag haben gedankt: Gausi
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mo 25.07.11 17:59 
Ich vielleicht nicht, aber ich bin ja nicht der einzige, der den Player nutzt. Ich nutze auch überwiegend mp3-Dateien, aber CDs abspielen zu können und dabei mehr als "Track X" anzuzeigen, finde ich schon ein nettes Feature. ;-)

Da einfach Tracknummer und Tracklänge abzugleichen ist natürlich eine fantastische Idee :zustimm:. Ich hab da wohl mal wieder zu kompliziert gedacht.

_________________
We are, we were and will not be.