english version -> Home

CDDB Unterstützung für OS/2 CD-Player

Version: 0.34

Kurzanleitung Download Referenz Versionen ToDo weitere Infos Kontakt

Diese Schriftart kennzeichnet alles, was man Eingeben kann.
In kursiv kennzeichnet es Parameter, die durch die entsprechenden Werte zu ersetzen sind.


Kurzanleitung

Voraussetzungen

Man benötigt für dieses Programm entweder eine Internetverbindung oder eine lokale Kopie der freedb Datenbank. Ferner benötigt man die EMX-Runtime Version >= 0.9d.
Kopieen der Datenbank gibt es beispielsweise bei www.freedb.org. Ein lokaler CDDB-Server ist nicht erforderlich. Leider sind diese Datenbanken ziemlich unhandlich. Will heißen: sie bestehen aus einigen -zigtausend Dateien mit einem Gesamtvolumen einigen 100 MB (komprimiert 80 MB).
Alternativ kann über eine Internetverbindung ein CDDB-Server abgefragt werden. Wenn es sich um eine Wählverbindung handelt, können die Abfragen gesammelt und zu einem späteren Zeitpunkt gemeinsam ausgeführt werden.

Konfiguration

über Internet:
Das CMD-Skript sowie die Datei RXMMUTL.DLL in ein beliebiges Verzeichnis kopieren.
Einmalig den CDDB-Server Konfigurieren: CDDBMMCD -w -sServer, wobei Server der Name des CDDB Servers ist.
Anmerkung: Die 'offiziellen' CDDB-Servers akzeptieren keine ihnen unbekannten CDDB Applikationen. www.freedb.org und viele Mirror-Server sind die freie Alternative.
Beispiel: CDDBMMCD -w -sfreedb.freedb.org
oder CDDBMMCD -w -shttp:\\freedb.freedb.org -Pproxyserver hinter einer Firewall
mit lokaler CDDB:
Das CMD-Skript sowie die Datei RXMMUTL.DLL in das Verzeichnis der CDDB-Datenbank (wo die Unterverzeichnisse misc, rock etc. stehen) kopieren.

Anwendung

über Internet Wählverbindung:
mit unbekannter CD im Laufwerk: CDDBMMCD -oc
später, bei aktiver Verbindung: CDDBMMCD -oQou
sonst:
einfach das CMD-Skript bei bedarf bei eingelegter CD aufrufen.
Es empfiehlt sich ein entsprechendes Programm-Objekt auf dem Desktop oder wo auch immer zu erstellen.
Falls der OS/2 CD-Player schon läuft, wird dessen Titelanzeige erst beim nächsten Seek aktualisiert; der CD-Tiltel wird sogar erst beim nächsten CD-Wechsel korrekt angezeigt. In jedem Fall sind die Daten aber permanent gespeichert.
Leider sind die Informationen, die der PM-CD-Player sichert nicht hinreichend, um automatisch alle früher eingelegten CDs aus der CDDB-Datenbank zu holen. Es ist daher unerläßlich, das Programm bei jeder noch unbekannten CD einmal auszuführen.
Erfolglose Anfragen werden vermerkt, und in regelmäßigen Abständen wiederholt. Zukünftige Versionen können die Informationen auch zum Server hochladen, wenn sie in der Zwischenzeit im OS/2 CD-Player eingegeben wurden.


Download

Dieses Programm steht unter der
GNU GENERAL PUBLIC LICENSE.

ZIP-Datei mit Quelltext und Anleitung: Version 0.34


Referenz

Kommandozeile
Beschreibung
Standardwert
-dGerät oder
--device=Gerät
Bestimmtes CD-Audio Gerät (CD-ROM) abfragen. Es können mehrere Geräte durch Komma getrennt angegeben werden. cdaudio
-lPfad oder
--local=Pfad
Pfad auf lokale CDDB. Der Pfad sollte auf das Verzeichnis mit den Unterverzeichnissen rock etc. zeigen. -l- oder --nolocal deaktiviert die lokale CDDB. .
(lokales Verzeichnis)
-tTyp oder
--type=Typ
Typ der lokalen CDDB. S[tandard] oder W[indows] oder [auto].
siehe auch Standard-Version vs. Windows-Version
auto
-fSchwellwert oder
--fuzzy=Schwellwert
Fuzzy-Search durchführen, falls keine exakte Übereinstimmung gefunden wird. Der Schwellwert gibt an, um wieviel Frames die TOC-Einträge abweichen dürfen. -f0 deaktiviert Fuzzy-Search. 41
-sServer oder
--server=Server
Name oder IP-Adresse des CDDB-Servers.
Es können mehrere Server durch Komma (ohne Leerzeichen) getrennt angegeben werden. Das Format der Einträge ist: [Protokoll:\\]Server[:Port][1]. Protokoll ist cddbp (default) oder http, Port ist standardmäßig 8880 (cddbp) bzw. 80 (http). -s- bzw. --noserver deaktiviert den Server-Zugriff.
kein Server
-PProxy oder
--proxy=Proxy
Name oder IP-Adresse des HTTP-Proxy-Servers.
Das Format ist: Proxy[:Port]. Port ist standardmäßig 80.
kein Proxy
-uBenutzer oder
--user=Benutzer
Benutzername für cddb hello. %USER%
-hHost oder
--host=Host
Rechnername für cddb hello. %HOSTNAME%
-cClient oder
--client=Client
Name des CDDB Clients sowie dessen Version für cddb hello. Offizielle Server sind da sehr wählerisch. cddbmmcd/2
-o[+|-]Funktionen oder
--op=[+|-]Funktionen
Gibt an, welche der folgenden Funktionen Ausgeführt werden sollen:
c eingelegte CD überprüfen
C eingelegte CD auch dann in die Abfrageliste übernehmen, wenn bereits Daten in der CDP.INI gespeichert sind.
q CDDB-Abfrage (lokal und/oder Server)
Q Ausführung älterer, verzögerter Abfragen
o erneute Abfrage vor mehr als einem Monat mißglückter Versuche
O erneute Abfrage aller mißglückten Versuche
u noch nicht implementiert!
Upload-Paket erzeugen, falls eine einst erfolglos abgefragte CD mitlerweile im OS/2 CD-Player eingegeben wurde.
U noch nicht implementiert!
Upload-Paket für die momentan eingelegte CD erzwingen (Update).
s noch nicht implementiert!
Upload-Paket(e) an (ersten) Server schicken
Ein vorangestelltes + oder - bedeutet, daß die nachfolgenden Kommandos in der aktuell geltenden Liste hinzuzufügen bzw. zu entfernen sind.
cqQou
-pDatei oder
--profile=Datei
Profildatei für CDDBMMCD .\CDDBMMCD.INI
-w oder
--write
Alle Einstellungen der Kommandozeile (außer -p) als neue Vorgaben in Profildatei übernehmen.

Die aktuellen Optionen ermitteln sich nach folgender Prioritätsliste:

  1. Komandozeilen-Optionen
  2. Abgaben in der Profil-Datei (CDDBMMCD.INI)
  3. Standardwerte

Anmerkungen:

  1. Wegen Eigentümlichkeiten von OS/2 REXX ist es nicht möglich eine URL in der Kommandozeile zu übergeben. REXX bricht bei der Zeichenkette // ab. Daher muß die URL mit Backslash angegeben werden.


Versionen

Version 0.34 Version 0.33
Version 0.32 Version 0.31 Version 0.3 Version 0.21 Version 0.2 Version 0.1 (erste Release)

ToDo

 · Korrekte behandlung von CD-EXTRA
Multisession CDs (CDs mit nachfolgenden Datentracks) werden zwar erkannt, jedoch ist der für die CDDB-Abfrage erforderliche Parameter der Gesamtlänge falsch. Sie werden daher nie in der Datenbank gefunden.
Dies liegt daran, daß OS/2 (und nicht nur dieses) die Tracklängen durch Differenzbildung aus den Anfangpositionen der Tracks bestimmt. Zwischen den zwei Sessions liegen aber etwa 20MB ungenutzter Bereich, weshalb der letzte Titel etwa 2 Minuten zu lang erscheint. Leider ist mir kein Weg bekannt, das tatsächliche Ende des letzten Audio-Tracks via MCI zu erfahren.
CDs mit den in Mode gekommenen 'Kopierschutz' durch illegale TOC-Einträge fallen auch in diese Kategorie.
 · Upload Möglichkeit (in Arbeit)
Wenn in der CDP.INI Daten Vorhanden sind, aber in der CDDB nicht, könnte man ein Upload-Paket schnüren. Dadurch kann man den Editor des PM CD-Players nutzen. Heiße Kandidaten für so etwas wären schon früher fehlgeschlagene CDDB-Abfragen.
 · automatische Programmausführung bei neuer CD
Die Sache wäre natürlich erheblich komfortabler, wenn beim Einlegen einer noch unbekannten CD das Skript automatisch ausgeführt würde. Es ist nicht abwegig, daß SOM dafür durch Subclassing der MMCD-Klasse eine Möglichkeit bietet. Man müßte die Notifikation beim Einlegen einer neuen CD abfangen und prüfen, ob es sich um einen Neuling handelt. Wenn ja, wäre das Skript an der Reihe. Das Skript könnte das natürlich auch selbst prüfen. Wenn man Glück hat, wird dann auch der CD-Titel gleich beim ersten Mal richtig angezeigt. Meine SOM-Kenntnisse enden allerdings bereits nach dessen Namen, weshalb es zumindest auf meinem Mist nicht wachsen wird. Aber wenn sich jemand fit fühlt...
 · Mehrdeutige CDDB-IDs
Die CDDB-IDs sind ein Hash und nicht notwendigerweise Eindeutig. Wenn mir jemand sagt, wie eine CDDB-Datei mit verschiedenen CDs aussieht, implementiere ich die Sache auch. Solche Nameclashes wären natürlich auch auf MMPM-CD Seite denkbar, dagegen ist jedoch kein Kraut gewachsen. Trotz der einfacheren Hash-Struktur ist letzterer Fall allerdings unwahrscheinlicher; wenngleich auch dieser Hash weit von der Perfektion entfernt ist.

weitere Informationen

Funktionsweise von CDDBMMCD

  1. Es öffnet per MCI das CDAUDIO-Device und liest die TOC-Informationen der gerade eingelegten CD aus. Eine eventuell laufende CD-Wiedergabe wird dabei leider vorübergehend unterbrochen.
  2. Es prüft, ob die CD bereits bekannt ist.
    Wenn nein, wird eine CDDB-Abfrage initiiert.
    Wenn ja, wird, falls eine frühere Abfrage der CD erfolglos war, ein Upload Pakek geschnürt.
  3. Die CDDB Abfragen werden zusammengestellt. Dabei werden neben der aktuell geprüften CD auch alle früheren, vor mehr als einem Monat fehlgeschlagenen Abfragen wiederholt.
  4. Falls eine lokale CDDB vorliegt, wird für jede ausstehende Abfrage zunächst der CDDB-Key berechnet. Jetzt wird in allen direkten Unterverzeichnissen des aktuellen Verzeichnisses nach einer pasenden CDDB-Datei gesucht.
    Falls keine passende Datei gefunden wird, startet ein zweiter Suchalgorithmus: Fuzzy-Search. Dabei werden alle Dateien mit logisch ähnlichen CD-IDs gesucht (Hash ±10, Länge ±1). Der TOC wird mit den Angaben jeder gefundenen Datei mit einer Unschärfe von 40 Frames verglichen. Unterschiedlich lange Lead-Ins werden ignoriert. Letzteres Verfahren funktioniert nur bei CDs mit mehr als einem Titel.
  5. Falls CDDB-Server angegeben wurden, werden diese abgefragt.
  6. War die Suche erfolgreich, so wird der MMPM CD-Key berechnet und die Titelinformationen in die Datei CDP.INI übertragen. Die Datei wird automatisch im (gerade aktiven) MMOS/2 Verzeichnis lokalisiert.

Lokale CDDB: Standard-Version vs. Windows-Version

Es gibt 2 Versionen der FreeDB. Das Original sowie eine Windows-Variante (freedb-win*.
Im Original enthält jede Datei Informationen über eine CD. Die Dateienamen bestehen aus einer 8-stelligen Hexadezimalzahl, z.B.: d70b6b11. Dabei entstehen Verzeichnisse mit 70000 Dateien und mehr. Das sprengt alle FAT-Dateisysteme. OS/2 kann auf HPFS damit umgehen, doch man kann natürlich dennoch die Win-Version nehmen.
In der Windows-Variante sind in jedem Unterverzeichnis Dateien mit ähnlichen Anfangsziffern zu einer zusammengefaßt. Die Dateinamen haben die Form 00to01 ...

Originalversion
Windows-Version
+ inkrementelles Update möglich - Update erfordert vollständigen Download[1]
- nicht unerheblicher Filesystem-Overhead
(auch bei HPFS mit 512 Bytes pro Cluster)
+ platzsparend
+ erheblich schnellere Suchzeit - längere Suchzeiten
+ auf FAT-Dateisystem nicht möglich

Anmerkungen:

  1. Es gibt mittlerweile ein Update-Utility für Windows. Ob das unter OS/2 hilft, weiß ich nicht. Möglicherweise läuft es mit ODIN.

Format der MMPM CD-Datenbank

Der MMPM CD-Player speichert seine Informationen in der Datei CDP.INI im MMOS2 Verzeichnis. Diese Datei ist im binären OS/2 Profile-Format.

Die Applikations-Schlüssel entsprechen dabei einem CD-Key, der folgendermaßen aufgebaut ist:

MMSSmmss.ff     Beispiel: 46043612.40
MM
Gesamtlänge der CD, Minuten [00..99]
SS
Gesamtlänge der CD, Sekunden, nicht gerundet [00..59]
mm
Gesamtlänge der CD minus Länge des letzten Tracks, Minuten [00..99]
ss
Gesamtlänge der CD minus Länge des letzten Tracks, Sekunden [00..59]
ff
Gesamtlänge der CD minus Länge des letzten Tracks, Frames (1/75 s) [00..74]
Bei CDs, die nur einen Track haben ist mmss.ff = 0000.00.
Innerhalb dieses Applikations-Keys gibt es folgende Schlüssel:
IMMCDDiscTitle  CD-Titel, ASCII
1 Titel Track 1, ASCII
2 Titel Track 2, ASCII
...

Format der CDDBMMCD Profile Datei

Applikations-Schlüssel: Settings

Wertname
  Bedeutung
  zugehörige Option
CDAudioDevice Liste der CDaudio Gerätenamen (durch Leerzeichen getrennt). -d
LocalCDDBPath Pfad auf lokale CDDB -l
LocalCDDBType Typ der lokalen CDDB -t
CDDBservers Liste der CDDB Server, durch Leerzeichen getrennt -s
ProxyServer Adresse des HTTP Proxys -P
FuzzyThreshold Schwellwert für Fuzzy-Search -f
OperationCodes Liste der auszuführenden Funktionen -o
CDDBType Art der CDDB-Abfragen
L Lokale CDDB abfragen
S CDDB-Server abfragen
LS  Lokale CDDB und CDDB-Server abfragen
-l, -s
CDPiniLocation Pfad auf die CDP.INI Datei des MMPM CD-Playres
Applikations-Schlüssel: PendingCDs
Hier stehen Informationen über bereits früher Abgefragte CDs. Die Einträge deren Name das Inhaltsverzeichnis der jeweiligen CD ist. Der zugewiesene Wert gibt den Status an.

Das Inhaltsverzeichnis ist dabei wie folgt kodiert:
· Anzahl der Tracks
·  Gesamtlänge der CD in Frames
· Startframe Track 1
· Startframe Track 2
...
· Startframe Track n
· Endframe+1 Track n
Die einzelnen Einträge sind jeweils durch Leerzeichen getrennt.

Der Status kann folgende Werte annehmen:
1 CD muß noch abgefragt werden
2 Zeit  CDDB Abfrage war (zuletzt) am angegebenen Zeitpunkt erfolglos
(Unix Zeit Format = Sekunden seit 01.01.1970 0:00)
3 Updatepaket muß noch Hochgeladen werden


Kontakt

Anregungen, Hilfen, Beschwerden (aber nicht zu viele:-) unter: mueller@maazl.de

Homepage dieses Programms: http://www.maazl.de/project/cddbmmcd/ger.html