Hallo
Was man hier sieht ist eine Darstellung meiner CD-Kartei. Aus Interesse an der Programmierung von Datenbanken hatte ich Ende der 80er Jahre damit angefangen, meinen Bestand an CDs auf dem Computer zu erfassen. Zuerst als lineare dBase Liste, was aber bald an die Grenzen stiess. Deswegen kam es dann zu einem Umstieg auf eine relationale Datenbank. Die Datenbank selber war - und ist bis heute - Paradox von der Fa. Borland. Das Front-End war anfänglich ObjectVision von Borland, eine Speziallösung, die bald vom Markt verschwand. Da bot sich der Umstieg auf Delphi an. Und dabei ist es bis heute geblieben.
Relativ schnell wuchs die Sammlung, und der Überblick ging irgendwie verloren, zumindest in meinem Kopf. Beim Jagen und Suchen in den Läden kam es immer wieder vor, dass ich mit einer Aufnahme nach Hause kam, um festzustellen, dass ich sie schon hatte. Nur hatte der Vertrieb oder der Verlag oder wer auch immer das Cover für die Wiederveröffentlichung neu designed. Deswegen die Suche nach einer Möglichkeit, die Kartei mitzunehmen, um gleich nach Aufnahmedatum und sowas nachschlagen zu können. Der Papierstapel war deftig. Aber zur gleichen Zeit kam mein erster Organizer: ein Psion. Konnte nur lineare Datenbanken, aber eine geschickte SQL Abfrage in Paradox erzeugte die notwendige Tabelle.
Leider zog sich dann Psion vom Organizer-Markt zurück, und der gute Psion fing an zu zerbröseln, die flexiblen Leiterbahnen im Scharnier .... Nachfolger: von Palm. System war ähnlich, also eigentlich weiter so wie bisher. Nur hatte der einen Schlitz für Secure Digital Karten. Speicherplatz ohne Ende, das reizte. Es gibt für Palm relationale Datenbanksysteme, aber noch ein Programm mehr, dafür bekommt man auch 5 CDs und so kam der Gedanke, ein sowieso vorhandenes Programm zu nutzen: den Mobipocket Reader. Ein eBook Reader, der auch Nachschlagewerke unterstützt. Zum Erstellen von Büchern gibts ein - für Privatanwendungen kostenloses - Programm, das als Input ein Word-Dokument oder HTML akzeptiert. Also das Ausdruckprogramm für den Papierausdruck auf die GDI Schnittstelle umgestrickt, ein paar HTML Befehle anstatt GDI Anweisungen, fertig war das mitnehmbare Buch "All My CDs" auf dem Palm.
Wie bei so vielem im Computerbereich wurde auch der Webspace immer billiger, die Flatrate mit DSL war da, und der alte Vertrag wurde beim Provider durch einen Neueren ersetzt: 250 anstatt 30MB Webspace - zu geringeren Kosten. Was soll man nur damit anfangen? Du hast da einen automatischen HTML Generator, der macht dir die Inhalte. Ein bisschen Navigation drum herum gestrickt, also los. Das mit der Navigation war dann doch nicht so einfach, man sieht es den Seiten auch an. Sie sind von Hand gemacht, kein Web-Editor, sie nutzen Frames - was nicht so ganz zeitgemäss und genial ist, aber schön einfach zu schreiben. An manchen Ecken ist es auch nicht optimal zu navigieren - ich weiss - und mit allen möglichen Browsern hab ich auch nicht getestet.
Erster Rückschlag: Auf dem Rechner lokal hatte alles funktioniert, aber dann auf dem Server: Ätsch! Ursache: Gross/Kleinschreibung. Alles noch mal nachbessern. Dann kam der zweite Rückschlag: die Dateigrössen. Vieles besteht aus Tabellen, wie nicht anders bei der Abbildung einer Datenbank zu erwarten. Und in HTML muss man jedes Feld neu formatieren, es gibt keinen Schiften-Tag, der "über alles" wirkt. Das führt dazu, dass teilweise nur ein Drittel Inhalt und ganze zwei Drittel Formatierungsanweisungen waren. Ladezeit über Modem: vergiss es. Als Lösung habe ich CSS genommen: Cascading StyleSheets. Nach einigem vergeblichem Rumprobieren, den Informationen von http://de.selfhtml.org/, viel Programmierarbeit und dem endlichen Verstehen "wie's geht", dank dem Buch CSS-Praxis von Kai Laborenz - Verlag Galileo Computing (mein Urteil zum Buch: sehr empfehlenswert), kam dann was IMHO Brauchbares raus. Nicht wundern, dass die Style-Anweisungen im Dokumentenkopf stehen, und nicht als verlinktes Stylesheets eingebunden sind. Es gibt sie handgemacht trotzdem nur ein einziges Mal und der ganze Salat wird beim Erstellen per meiner Delphi Procedure tFormMain.MachHeaderLines(...); automatisch eingebunden. Irgendwann stell' ich das vielleicht noch mal um.
Ich kann von Unterwegs via Internet nachschlagen, alles Andere ist nur zum Spass und sollte gar nicht in Stress ausarten.
Viel Spass beim Stöbern!
Update 25. März 2008
Schon seit einiger Zeit befindet sich auch in meinem Besitz so ein kleiner portabler Audioplayer. Da mir die ganze iTunes-Geschichte nicht wirklich behagt - zu viele Restriktionen - einen iRiver (H320) und als Fileformat OGG Vorbis (*.ogg). Die Klangqualität ist laut meinen Ohren der von Standard MP3 mit konstanter Bitrate überlegen und vor allem, die ganze Sache ist Public Domain und Open Source, da kann einem keiner irgendwelche Rechte nachträglich entziehen. Wer näheres zu OGG Vorbis nachlesen möchte bitte hier lang zur Homepage von Vorbis .
Dann kam noch eine bezahlbare externe 320GiB-USB-Festplatte dazu und eine Soundkarte, die per SPDIF Digitalverbindung den Wandler im CD-Player der HiFi-Anlage direkt speisen kann. Da lag einfach die Idee eines Audioservers nahe. Zuerst ganz einfach nur als Baum abgelegt, Pfad und Dateiname:
[X]:\[Dateiformat]\[Alphabet]\[Interpret]\[Album]\[TitelNr.]&sdot[TitelName].[Erweiterung Dateiformat]
Die Struktur ermöglicht gleich bei der Umwandlung von *.wav in *.ogg per oggDropXPD ein automatisches Tagging der komprimierten Files. Relativ schnell war ein kleines Tool selbst geschrieben, dass die Titelnamen aus der Datenbank übernahm und die vom PlexTools Professional erzeugten Dateien Track[nn].wav automatisch umbenennt. Aber der Appetit kommt mit dem Essen, so auch hier zwei Wünsche:
Für Punkt 1 war nun eine Erweiterung der Datenbankstruktur notwendig. Am einfachsten wäre es gewesen, zu jedem Datensatz der Tabelle Takes.db 4 Felder für die vier genannten Dateiformate hinzuzufügen und in jedem den kompletten Dateinamen abzulegen. Aber zwei gravierende Nachteile: Der Platzbedarf wäre heftig, was weniger eine Frage des Plattenplatzes ist, aber der Zugriffsgeschwindigkeit. Wichtiger: das Laufwerksmapping und die Verzeichnisse hätten nie ohne komplexen Umstellungsaufwand geändert werden können. Deswegen eine auf den ersten Blick etwas kompliziertere Lösung. Pro Datensatz in Takes.db vier zusätzliche boolsche Felder OGG, WAV, MP3 und AAC. Boolsche Felder sind sehr klein und enthalten nur die Information JA oder NEIN, also hier >Datei im Format soundso vorhanden< oder eben nicht. Zusätzlich ein Feld namens FileName mit Inhalt [TitelNr.]&sdot[TitelName]. Dies ist notwendig, weil die TitelNr fortlaufend ist und nicht wie in Takes.db zweiteilig aus CDNr plus TitelNr zusammengesetzt wird und weil in vielen Titelnamen Sonderzeichen vorkommen, die nicht als Dateinamen zulässig sind. Der Pfad [X]:\[Dateiformat]\[Alphabet]\[Interpret]\[Album]\ wird in zwei Teile geteilt: Der vordere Teil [X]:\[Dateiformat]\ wird als lokales Wurzelverzeichnis auf jedem Rechner abgelegt, auf dem ein Datenbank Client installiert ist. Somit kann jeder PC für die externe Festplatte sein eigenes lokales Mapping verwenden und diese kann gegebenenfalls problemlos schnell und einfach geändert werden. Der hintere Teil [Alphabet]\[Interpret]\[Album]\ wird zu jeder CD einmal in der Tabelle CDDaten.db im Feld FilePath abgelegt. Der Datenumfang reduziert sich so auf rund ein Viertel.
Ein weiterer Trick ermöglicht das parallele Handling mehrerer Dateiformate ohne zusätzliche Felder in parallelen Strukturen. Taucht im Pfad ein Verzeichnis OGG, WAV, MP3 oder AAC auf, so wird dort nur ein * abgespeichert, dass beim Aufruf wieder automatisch durch das jeweils gewählte Dateiformat ersetzt wird. Beispielsweise wird so als lokales Wurzelverzeichnis M:\CDs\*\ abgelegt, was somit zwei getrennte Verzeichnisbäume beschreibt: M:\CDs\WAV\ für WAVE-Dateien und M:\CDs\OGG\ für komprimierte OGG Vorbis Dateien.
Beim Punkt 2, dem Abspielen, war ich etwas fauler. Einen kompletten Mediaplayer selber schreiben sowieso nicht, der Borland Delphi Media Player kann von haus aus *.wav, um die Formate *.ogg und *.mp3 hätte man ihn wohl erweitern können, aber schon bei *.aac wäre Ende der Fahnenstange. Und richtig komfortabel ist er sowieso nicht. Deswegen ein anderer Weg. Ich benutze schon lange als Audio-Player auf dem PC WinAmp von Nullsoft Inc.. Der lässt sich ganz gut über Kommandozeile steuern. Zum Beispiel kann man per Aufruf des Programms >C:\Programme\Winamp\winamp.exe< per Parameter >/ADD "Dateiname"< eine beliebige Audiodatei der aktuellen Playlist anhängen (Die doppelten Hochkomma " sind wichtig, sonst mag er kein Leerzeichen im Dateinamen). Somit ist aus der CD-Kartei heraus nicht nur ein indirektes Abspielen möglich (ein mehrfacher Aufruf von WinAmp.exe startet keine weitern Instanzen, sondern hängt die weitern Dateien einfach hinten an, nur beim ersten Aufruf wird das Programm gestartet), sondern auch das einfache Zusammenstellen von Playlists geht nun!
Somit war eine komplette Integration der neuen Funktionen an den paar Osterfeiertagen möglich, inklusive Registrierung aller rund 300 schon auf dem Audioserver vorhandener Alben. Um ein Album zu registrieren, wählt man es in der CD-Kartei an, um dann per Datei-Öffnen-Dialog einmalig alle zugehörigen Audio-Dateien um Unterverzeichnis auszuwählen. Die Dateien werden dann automatisch nach der TitelNr sortiert, entsprechend zugeordnet und das Format identifiziert.
Bild 1: Darstellung der vollständigen Paradox-Datenbankstruktur:
Bild 2: Screenshot des Datenbank Clients (Borland Delphi 4 bis 7):
Update 21. August 2008
Man sieht es nicht, aber es hat sich was geändert. Die Frames sind nicht mehr in "HTML 4.0 Transitional" geschrieben, sondern sind jetzt <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">! Anlass war die Überprüfung der Seiten auf korrekte Syntax mittels Tidy und dem Markup Validation Service von w3c. Dabei wurden einige Fehler gefunden deren Beseitigung sinnvoll war. Es ergab sich, dass gar nicht so viel zur Variante "strict" fehlte. Ein Schritt in Richtung XHTML. Das eigentliche Frameset bleibt logischerweise in der Variante "Frameset".
Ärger machten mal wieder die verschiedenen Browser. IE lässt leere Absätze <p></p> einfach weg, macht also keine Leerzeile. Bei der automatischen Generierung muss das Programm also jedesmal überprüfen, ob das Datenbankfeld überhaupt einen Inhalt hat. Wenn nicht, dann darf es keinen Leerstring, also "Nichts" in den Absatz schreiben, sondern muss stattdessen ein geschütztes Leerzeichen <p> </p> einbauen, auch nicht gerade elegant.
Als Belohnung darf sich die CD-Kartei jetzt mit den Prüfsiegeln schmücken:
Frameset: | |
Strict: | |
CSS: |
Update 18. April 2011
Man sieht es auch diesmal kaum, aber es hat sich wieder was geändert. Der Fortschritt lässt sich manchmal nicht aufhalten, diesmal in Form von neuer Hardware. Ein nettes kleines Netbook, und da war dann Windows 7 drauf installiert. Und das hatte seinen eigenen Kopf. Das gute alte Delphi 7 von Borland war unter dem Betriebssystem nicht wirklich hinreichend zum Laufen zu bewegen. Da half alles rumfummeln und klagen nichts, es musste eine neue Entwicklungsumgebung her. Embarcadero Delphi XE nennt sich das jetzt, das ist immerhin abwärtskompatibel, der alte Borland-Quellcode wird beim ersten Öffnen konvertiert. Allerdings kommt dann eine lange Liste Fehlermeldungen. Allerdings fast immer relativ verständlich und von der Natur, dass dieser Befehl veraltet ist und man besser das moderne .NET-Objekt XYZ verwenden soll. Der Umstellungsaufwand war im Endeffekt nicht so schlimm, trotz deutlich über 12500 Zeilen Quellcode. Was sich über die Jahre nicht so alles ansammelt.
Die andere Änderung war der Bildschirm. Das NetBook hat einen mit 1366x768 Pixel, das bedeutet 16 zu 9, also Breitbildformat. Da war es doch vorteilhafter, die Formulare ein wenig zu verändern, In Richtung breiter, dafür nicht so hoch. Zusammen mit ein paar kleineren Anpassungen wegen der Fenster-Rahmen kam dann das dabei heraus:
Bild 3: Screenshot des Datenbank Clients (Embarcadero Delphi XE unter Windows 7):
Update 7. April 2018
Es waren über die Jahre ein Haufen kleine Änderungen. So ist WinAmp tot, aber ich hatte vorher schon eine Anbindung an foobar2000 implementiert, Glück gehabt. Das Netbook ist irgendwann auch den Weg alles Irdischen gegangen, das Displayscharnier gebrochen, der Akku fertig, die Tastatur malade, also kam als Ersatz ein Ultrabook. Genügend Rechenleistung, dass selbst bei Wiedergabe von High Resolution Audiodateien gleichzeitig Surfen und Arbeiten mit der CDKartei möglich ist, ohne dass es stottert.
Ja, und musikalisch hat sich immer mehr der Direktvertrieb von Musikern durchgesetzt und dann war es sogar soweit, dass Aufnahmen nur noch als Download angeboten worden sind, nicht mehr auf einem Datenträger. Diese Dateien sollten dann auch mit rein in die CD-Kartei. Eigentlich ist es jetzt also mehr eine Digitale-Musik-Kartei, aber den alten Namen behalte ich bei. Erstes Problem: Einige reine Downloads haben keine Nummer mehr, z.B. bei Greenleaf Music, die über bandcamp.com vertreiben. Die Nummer ist aber in der Datenbank der zentrale Index, der alle Informationen zu einer Aufnahme zusammen hält. Lösung zur Zeit: Ich vergebe selber die Bestell-Nummer Download[xxxx], wobei xxxx einfach eine fortlaufende Nummer ist. Zweites Problem: Wie kennzeichne ich Downloads? Erste provisorische Lösung war das Wort Download im Feld Bemerkung, zusammen mit Auflösung und Abtastrate. Das ist aber blöde zu filtern, also musste eine endgültige Lösung her.
Es gibt das Feld CDs für jede Bestell-Nummer, das war gedacht, um die Anzahl CDs zu notieren, also z.B. 2 für Doppelalben. Damit war der erste Punkt relativ einfach: Downloads bekommen im Feld CDs die Zahl 0, eben einfach "keine CD". Zwei neue Felder kamen dazu, Bit für die Auflösung in Bit und Abtastrate für ebendiese in kHz, beides Datentyp Numerical, also alles was da noch an Auflösung und Abtastraten kommen mag möglich. Bei den Takes gibt es weiterhin das Feld CD (ohne s hinten), um festzuhalten, auf welcher CD der Track liegt. Das mache ich bei Downloads aber nicht zur Null. Normalerweise lasse ich es einfach bei 1, aber es gibt ein paar Spezialfälle, da ist es sehr nützlich. Im Jazz ist es in Clubs üblich, Musiker über mehrere Abende zu engagieren, dabei mehrere Sets pro Abend zu spielen. Bie Mitschnitten benutze ich das Feld CD, um das Set einzutragen. CD: 3, Titel: 5 bedeutet also, es war das 5. Stück im 3. Set. Siehe z.B. Brazen Heard Live At Jazz Standard von Dave Douglas, 4 Tage a 2 Sets, 8 Stunden 21 Minuten 53 Sekunden Live-Mitschnitt (Und das mit 24 bit 88,2 kHz, das war ein heftiger Download, da glühte die Leitung).
Um das Ganze unter Windows 10 zum laufen zu bringen muss man etwas tricksen. BDEAdmin muss man mit Adminrechten laufen lassen, vor allem aber nicht auf C: installieren, sondern irgendwo, wo man immer volle Schreibrechte hat und keine virtuellen Ordner verwenden, sondern nur reale.
Bild 4: Screenshot des Datenbank Clients (Embarcadero Delphi XE3 unter Windows 10):
Update 16. Februar 2024
Nichts wirklich Neues. Kleinkram. Da die CDs mittlerweile von Downloads fast vollständig verdrängt wurden habe ich in MP3Tag einen Exportschema erzeugt, dass die Informationen aus dem Tagging ausliest und in der Zwischenablage als Import für die CD Kartei bereit stellt - soweit vorhanden. Kleines Problem am Rande: Die Bestellnummer. Wird ganz selten mitgeliefert. Im Zweifelsfall nehme ich die von der CD - gibt es meistens bei www.discogs.com. Wenn gar nichts hilft, dann Download[4-stelliger Zähler]. Außerdem kann man beim Abspielen via foobar2000 jetzt bestimmen, in welche Playlist es gepackt werden soll. Die Zoomfunktion des neuen Laptopbildschirms machte außerdem ein paar Anpassungen bei den sichtbaren Elementen notwendig, Position und so.
Zwischendrin noch eine Bemerkung zum Thema Download. Meine Hauptquelle ist jetzt www.bandcamp.com
Die Hardware-Ausstattung ist jetzt bei Gigabit-Kabelanschluss, WiFi 6 und i7 Prozessor mit 10 Kernen angelangt. Das flutsch jetzt alles ziemlich flott. Highlight ist ein ADI-2 Pro FS von RME in München. Die nennen das Ding selber »High-Performance 768 kHz 2-Kanal ADAT.SPDIF.AES/EBU AD/DA Wandler«, was es noch nicht wirklich alles beschreibt. Die Kiste ist eierlegende Wollmilchsau an der Schnittstelle zwischen Digital und Analog, Kopfhörerverstärker, Digicheck Analysetool, etc. Das Manko an der Sache: man kann alles irgendwie einstellen, aber dafür gibt es über 250 Parameter einzustellen. RME hat nachträglich und kostenfrei eine ADI-2 Remote Software nachgeschoben, grafische Bedienoberfläche via PC, damit wird's einigermaßen erträglich.
Bild 5: Screenshot des Datenbank Clients (Embarcadero Delphi XE3 unter Windows 11):
Update 29. Februar 2024
Wenn man schon mal angefangen hat, dann packt es einen doch weiter zu machen. Mit der Ablage von vom Datum war ich immer mehr unzufrieden. Speziell das Problem »Datum ab ... bis ...« war mit 2 Datensätzen hintereinander suboptimal (siehe Bild 4). Deswegen eine Strukturänderung: Anstatt der 3 Felder Tag, Monat, Jahr jetzt 6 Felder TagA, MonatA, JahrA, TagB, MonatB, JahrB (A für ab, B für bis). Und wenn schon, denn schon. Eine Info, die bis jetzt nur in der Bemerkung der Tabelle CDDaten auftauchte war der spezielle Ort am Ort. Also z.B. welche Bühne, welches Festival, welches Tonstudio, welcher Club, etc.. Deswegen auch noch ein Feld mehr: Orga (was Besseres ist mir als übergreifende Beschreibung nicht eingefallen). Screenshot des Datenbank Clients spare ich mir, das Fenster »Aufnahmeort und -datum» ist jetzt einfach etwas breiter.
Dann stürzte das Programm, das die HTML-Dateien erzeugt heute ab. Delpi XE 3 Debugging-Mode angeworfen. Die Seite »Die Neuzugänge« war die Ursache. Hat ein bisschen gedauert, bis die Erleuchtung kam, warum. Die Liste stellt ein Jahr zurück dar; und welches Datum war am 29.2.2024 ein Jahr zurück? ...
Bild 6: Neue Struktur der Datenbank:
Update 8. Oktober 2024
Ja, die Zeiten ändern sich, und man muss sich anpassen. Mittlerweile sind selbst die Aufnahmen von John Zorns Label TZADIK als Download erhältlich (bei www.qobuz.com). www.HighResAudio hat auch im Jazz ein breites Angebot. Vor allem der Zugang zu Musik, die bei keinem Label zu finden ist und vom Musiker selber produziert wurde ist dank www.bandcamp.com jetzt einfach. Also immer mehr Downloads, eigentlich sogar nur noch...
Bild 7: Entwicklung von der CD zum Download
Aber trotzdem vermisse ich die alten Zeiten etwas. Mir fehlt das Booklet aus der CD. Das Cover ist immer beim Download dabei oder separat erhältlich, das Booklet und die Rückseite aber nur manchmal. Und wenn, dann gibt es PDF, JPEG, PNG, WEBP, ... Als Ersatz habe ich mir angewöhnt, im Web nach Infos zu der Aufnahme zu suchen. Besprechungen, Artikel, Bilder, finde ich was interessantes, dann lade ich es runter und stelle ggf. sogar mein eigenes Booklet in Word zusammen. Aufgrund der Formatvielfalt ist eine Darstellung im Programm zu aufwendig. Leichter zu verwirklichen war eine Funktion [Zusatzinfo öffnen] vom Standard-Typ TFileOpenDialog, der die Dateien im Ordner zu der Aufnahme anzeigt und man die gewählte Datei per Klick mit dem zugehörigen Programm öffnet.
Bild 8: Bedienoberfläche 7.1
Ralf Wacker
Im Wiesental zwischen Basel und Feldberg, den 9. Oktober 2024