Was ist CDDB-Expect?
CDDB-Expect ist mein kleines Software-Sammelsurium für den
Zugriff auf CDDB.
Warum das Ganze?
Ein Problem bei großen Teilen der CD-Player- und CD-Archiv-Software
die CDDB unterstützt ist, daß sie entweder für Windows
entwickelt wurde oder
daß sie für jede neue CD eine Einzelabfrage an CDDB startet.
Letzteres ist in einem Land (= Deutschland) in dem Ortsgespräche
(= Modemzugang ins Internet) immer noch Geld kosten keine
gute Idee.
Ersteres ist dann ein Problem, wenn man seine Tonträger
(das sind ja bekanntlich nicht nur CDs) bereits unter
einem anderen System verwaltet. Außerdem habe ich schon genug
CD-Spieler außerhalb des Rechners und werde als
ordnungsliebender und Datenbank-versierter Musikfreund
eine anständige Musik-Datenbank immer der Minimal-CD-Verwaltung
diverser CD-Player vorziehen.
Was macht CDDB-Expect?
CDDB-Expect erweitert eine CDDB-Datei
ohne Titelinformationen durch Abfrage von CDDB in eine mit Titelinformationen.
In der Anfangsdatei evtl. enthaltene Titelinformationen werden nicht beachtet.
Auf welchen Systemen läuft CDDB-Expect?
Um alle Komponenten zu nutzen braucht es folgendes:
Es gibt auch eine expect-Variante die sich mit
#include <expect.h>
direkt in C-Programm einbinden
läßt, diese steht mir aber leider nicht zur Verfügung.
Die Lösung mit dem "stand-alone"-expect hat außerdem
den Vorteil, daß die Aufgabenverteilung einfacher ist:
Da mir expect bisher nur unter Unix untergekommen ist (ich lasse mich da gerne eines besseren belehren) kann dieser Rechner unter jedem Betriebsystem laufen, für das ein C-Compiler vorhanden ist (ziemlich viele!). Da die C-Programme nichts anderes tun, als mit Textdateien hin- und herzujonglieren ist die Implementierung auf anderen Wegen natürlich auch möglich evtl. sogar einfacher.
Compilieren
Die C-Quellen wurden getestet mit EMX-GCC unter OS/2 Warp 3 und
GCC unter HP-UNIX irgendwas.
OS/2: | [G:\src\c\cddb]gcc cddb2query.c |
HP-UNIX: | [coxo] cddb > gcc cddb2query.c -o cddb2query |
Falls unter UNIX das aktuelle Verzeichnis (mit den CDDB-Expect Programmen) nicht
in der PATH=
Variable enthalten ist, kann der Aufruf mit
[coxo] cddb > ./cddb2query
erfolgen.
Für die anderen Programme
query2expect
,
log2read
,
read2expect
,
log2cddb
,
cdb2query
und log2cdmax
gilt natürlich selbiges.
Was mir bereits Probleme bereitet hat, ist die unterschiedliche
Darstellung des Zeilenendes bei verschiedenen Systemen und Compilern.
Ein und die selbe Eingangsdatei wird dadurch unterschiedlich
interpretiert, weil der eine Compiler "\n" anders
umsetzt als ein anderer. Zuverlässig ist deshalb nur die direkte
Abfrage in der Form ((c==0x0a) || (c==0x0d))
. Hat zumindestens
bis jetzt die Probleme, die der Mischbetrieb unter OS/2 und UNIX mit sich
bringt, behoben.
Export von CDDB-Daten aus Feurio!
Da Feurio! keinen Export im CDDB-Format unterstützt, habe ich eine
zweite Version des query-Konverters geschrieben, der die Feurio! .cdb-Dateien
nach .query konvertiert (cdb2query
).
Der Konverter kann alle .cdb-Dateien konvertieren, und das obwohl
die Parameter P:...
und B:...
ihren Wert nicht
über alle Dateien beibehalten. Das Programm erkennt jedoch
welche "Mutation" von P:...
und B:...
vorliegt und verarbeitet die Zahlenwerte entsprechend.
Import von CDDB-Daten in CDmax
Für CDmax mußte ich den (Rück-)Konverter ins CDDB-Format
etwas angepassen. Außerdem scheint es notwendig
zu sein, die Einträge nach disc ID sortiert abzuspeichern.
Das läßt sich (provisorisch) am einfachsten erledigen,
indem man test.query
vor der
Weiterverarbeitung zeilenweise sortiert.
Sammelsurium v1.0
Alle kursiven
Parameter im der angegebenen Aufrufreihenfolge sind
derzeit noch direkt im Programmtext festgelegt.
Aufrufreihenfolge
cddb2query
test.cddb test.query |
cddb-Datei -> query-Informationen |
Alternative Version zum verarbeiten von Feurio! .cdb-Dateien: | |
cdb2query
feurio.cdb feurio.query |
.cdb-Datei -> query-Informationen |
query2expect
test.query query.expect |
query-Informationen -> expect cmdfile |
expect query.expect >query.log |
telnet-Dialog: cddb query |
log2read
query.log test.read |
log-Datei -> read-Informationen |
read2expect
test.read read.expect |
read-Informationen -> expect cmdfile |
expect read.expect >read.log |
telnet-Dialog: cddb read |
log2cddb
read.log data.cddb |
log-Datei -> cddb-Datei |
Alternative Version zum erzeugen CDMax-tauglicher CDDB-Dateien: | |
log2cdmax
read.log data.cdmax |
log-Datei -> cddb-Datei mit CDMax-Zusatzeinträgen |