Gibt es einen netzwerkfähigen und auf Linux basierenden fernbedienbaren
MP3-Spieler, der sich vollständig in einen bereits bestehenden HiFi-Turm
integrieren läßt?
Natürlich! Zumindest, wenn man ihn sich selbst zusammenbaut.
Jedenfalls können wir Linux alles beibringen.
Das Abspielen von MP3-Dateien am PC ist recht angenehm, wenn man während der
Arbeit im Hintergrund etwas Musik hören möchte.
Will man aber seine Zeit nur dem Musikhören widmen, ist der PC eine denkbar
ungeignete Abspielstation. Lüfter und Festplatten erzeugen störende
Nebengeräusche und die Auswahl der Titel ist zumeist lästig. Wer bootet schon
seinen PC, loggt sich ein und startet einen MP3-Player, nur um für eine
halbe Stunde etwas Musik zu hören. Außerdem sind die Zufallsgeneratoren
der MP3-Spieler bei großen MP3-Sammlungen kaum zu benutzen.
Entweder man hört dauernd Lieder, die
man lieber nicht hören würde, oder man sitzt die meiste Zeit des Tages daran,
seine Playlisten zu überarbeiten.
Aus diesem Grund entstand die Idee einen MP3-Spieler zu bauen, der in den eigenen HiFi-Turm integriert werden kann, völlig geräuschlos funktioniert, eine intelligente (weil lernende) Trackauswahl besitzt und über die bestehende HiFi-Fernbedienung steuerbar ist.
Das ganze sollte natürlich auf Linux basieren und mit angemessenen Kosten und Arbeitsaufwand erreichbar sein.
Geplant war mal eine genaue Schritt für Schritt Anleitung, damit auch jemand
mit sehr wenig Linux-Erfahrung das Gerät nachbauen kann. Auch eine
vollständige angepasste Distribution mit Konfigurationstools wurde angedacht.
Allerdings benötigte das Projekt auch so schon genug der nur wenig vorhandenen
Freizeit, und das Erstellen einer speziellen Distribution und einer
Anfänger-sicheren Anleitung würde sehr viel zusätzliche Zeit in Anspruch nehmen.
Lange Zeit sah es so aus, als ob das Projekt niemals fertig werden würde.
Daher habe ich mich nun entschlossen, eine recht kurz gehaltene Anleitung zu verfassen, damit überhaupt jemand anderes eine Idee bekommen kann, was möglich ist, und mit welchen Tools/Software/Hardware dies erreicht werden kann.
Damit richtet sich die Anleitung folglich nicht an den Anfänger, der
beim Löten an guten Tagen noch mit Brandblasen davonkommt und unter
Linux-Konfiguration das Austauschen eines KDE-Themes versteht.
Da das Projekt selbstgebaute Hardware benutzt und stellenweise in
System-Interna eingreift, sind fortgeschrittene Linux-Kenntnisse von Nöten.
Jeder Andere wird wahrscheinlich schnell scheitern und gefrustet aufgeben.
Vielmehr soll dieser Artikel nur einen Lösungsweg aufzeigen, wie man sich einen MP3-Spieler bauen könnte und ist nicht als Referenz für derartige Projekte gedacht. Stattdessen dient der folgende Text anderen Bastlern nur als Hilfe und Ideengeber, um eigene, ähnliche Projekte zu verwirklichen (und ja, es gibt bereits andere Linux-basierende Lösungen dieser Art im Netz).
Gehäuse:
Weil der MP3-Spieler später optisch in den Onkyo-HiFi-Tower passen soll,
ersteigerte ich mir bei e-Bay einen defekten Onkyo-CD Spieler für ca. 7 Euro.
Defekt war nur der CD-Laser, während das Gehäuse noch in einem guten Zustand
war.


Da ein CD-Spieler-Gehäuse nicht sehr hoch gebaut ist, muß man beim Einsetzen und der Auswahl der Hardware etwas aufpassen. Die u.U. benötigten Karten (bei mir Netzwerkkarte und ISA-Soundkarte) dürfen nur sehr schmal gebaut sein, um in das Gehäuse zu passen. Außerdem muß die an jeder Karte befindliche Metallblende abgebaut werden.
Viele Bios-Versionen können auch ohne vorhandene Grafikkarte und Tastatur
gebootet werden, wenn man die entsprechende Option "Halt on Errors" deaktiviert. Während
der Konfiguration des MP3-Spielers kann natürlich eine Grafikkarte noch
eingesetzt werden, um sie später bei einem voll funktionsfähigen System wieder
zu entfernen.
Nachträgliche Konfigurationen finden dann über das Netzwerk statt.
Motherbord:
Das eingesetzte Bravo-Baby
Bord besitzt einen On-Board VGA-Chip, so daß keine Grafikkarte benötigt
wird.
Aber nicht alle Boards benötigen für den Betrieb eine Grafikkarte. Deaktiviert
man im Bios die Option "Halt on Errors", so kann man nach der Installation
der MP3Box die Grafikkarte wieder ausbauen und von da an den Computer
übers Netzwerk konfigurieren.
Außerdem besitzt es eine On-Board Soundkarte, und einen On-Board Joystick-Port der allerdings mit dem eingesetzen Tool "Jslaunch" nicht ansprechbar war. Jslaunch unterstützt nur ISA-Karten, und keine Onboard Chipsätze.
Netzteil:
Weil das Netzteil ohne Lüfter betrieben werden soll, empfiehlt sich ein Modell
mit viel Leistung und guten Kühlkörpern. Die Kühlkörper sollten freigelegt werden
und nicht durch Kabel verdeckt sein. Das Anbringen zusätzlicher Kühlkörper ist
denkbar aber zumeist nicht nötig. Denn der MP3-Player besitzt weder eine
stromschluckende Grafikkarte noch ein Festplatte, so dass die Last auf dem
Netzteil sehr gering bleibt. Trotzdem sollte man anfangs die Temperatur des
Netzteils im Auge behalten.

Temperaturfühler:
Der Einsatz eines oder mehrerer Temperaturfühler ist denkbar, um Netzteil und
CPU automatisch überprüfen zu lassen. Der Temperaturfühler kann über den
seriellen Port und mit der Software digitemp ausgelesen werden.
Dies habe ich bei mir aber nicht eingebaut.
Nähere Angaben zum Bau des Temperaturfühlers findet man im Artikel
Temperaturmessung
mit Linux.
Infrarotempfänger:
Damit der MP3-Spieler später wie die anderen Komponenten des HiFi-Towers
fernbedienbar ist, baut man sich einen Infrarot-Empfänger, der später an
den seriellen Port angeschlossen wird.

LC-Display:
Natürlich benötig der MP3-Player eine Statusanzeige, damit zusätzliche
Informationen wie Titel und Interpret angezeigt werden können. Dies
funktioniert über ein Hitachi-Chipsatz basierendes LCD, welches am
Parallelport angeschlossen wird.

Panel:
Die Steuerung des MP3-Players soll über die 12 am Gehäuse befindlichen
Taster erfolgen. Dafür wurde das Front-Panel des CD-Spielers auf dem sich die 12
Taster befinden ausgebaut (Panel-Vorderseite):

um auf der Rückseite des Panels sämtliche Leiterbahnen zu durchtrennen und mit dem Joystickport zu verbinden:

Dafür nimmt man sich einen defekten Joystick, und ersetzt die dortigen Taster mit denen am Panel, oder nimmt nur ein Joystick-Verlängerungskabel und schließt die Taster an die entsprechenden Pole an:
Zum Auslesen der Taster wird die Software Jslaunch verwendet. Nähere Angaben zu Jslaunch entnimmt man dem Artikel Jslaunch -- PC per Joystick steuern. Jslaunch funktioniert aber nur zusammen mit Joystick-Ports, die auf einer ISA-Soundkarte angebracht sind. Zur Zusammenarbeit mit dem On-Board Joystick-Port konnte Jslaunch nicht überredet werden. Daher war es nötig noch eine ISA-Soundkarte einzubauen, die aber günstig erhältlich sind.
Da ein Joystick normalerweise nur 4 Knöpfe besitzt, wir aber 12 Taster verbinden wollen, nutzen wir die Eigenschaft von JSlaunch auf dem Drücken mehrerer Knöpfe gleichzeitig einen Befehl zuordnen zu können. Dafür müssen die Taster aber mittels Dioden so angeschlossen werden, daß das Drücken einer Taste automatisch mehrere Schaltkreise schließt.
Netzwerkkarte:
Da der MP3-Spieler später übers Netz booten und bedienbar sein soll,
benötigen wir dringend eine Netzwerkkarte (sofern nicht OnBoard) vorhanden.
Da mein häusliches Netzwerk noch auf 10Base-T basiert und Koax-Kabel einfacher
zu verarbeiten ist, besitzt der MP3-Spieler eine RealTek Netzwerkkarte mit 10Base-T
Anschluß. Das Netzwerkkabel wurde auf die Rückseite des Gehäuses geführt, wie auf
dem folgenden Bild erkennbar:

Power-Knopf:
Das ATX-Board kann über einen Jumper ausgeschaltet werden. Da der Power-Knopf
des Onkyo Gehäuses nicht mit einem Taster verbunden war, sondern mit einem
grobmechanischem Schalter, musste von Hand hinter den Power-Knopf des
CD-Spieler Gehäuses ein Taster angebracht werden, der mit einem unterbrochenem
Jumper verbunden wurde. Durch das Drücken des Power-Knopfes am Gehäuse wird nun
der Stromkreis auf dem Board verunden, und der integrierte PC kann booten.

CD-Laufwerk:
Besonderer Clou des Gehäuses, ist es, wenn man anstelle der original CD
Schublade ein PC-CDRom-Laufwerk einbaut. Dafür sollte man die Blende der
vormals integrierten CD-Schublade ausbauen und auf die Frontseite des PC-CDRom
Laufwerkes anbringen.
Man kann nun entweder den Eject-Taster des Gehäuses mit dem Eject-Knopf des
CD-Rom Laufwerks verbinden, und den Gehäuse-Eject-Taster genauso wie alle anderen
Taster mittels jslaunch auslesen und mittelst des Programms eject
http://www.ibiblio.org/pub/Linux/utils/disk-management/eject-2.0.13.tar.gz
auswerfen.
Disketten-Laufwerk:
Wer nicht die Möglichkeit hat, sich ein Eprom selber zu brennen, welches
auf der Netzwerkkarte angebracht für das Netzwerkbooten des Kernels
zuständig ist, kann stattdessen auch ein Diskettenlaufwerk einbauen, und
das Bootrom auf Diskette kopieren. Dies hat zwar den Nachteil, mehr Platz
zu verbrauchen als ein Eprom, ist dafür aber günstiger und wesentlich
flexibler als die Eprom-Lösung.
Das Diskettenlaufwerk wird nur für den Bootvorgang benörigt, und braucht
vom später gestarteten Linux-System nicht gemountet werden.
Während irgenwann mal der Punkt erreicht war, in dem sämtliche Hardware eingebaut wurde, und dieser Arbeitsschritt somit fertig ist, hat die Software den unangenehmen Beigeschmack eigentlich ständig in Entwicklung zu stecken. Irgendwelche Ideen an zusätzlichen Optionen hat man irgendwie immer.
Der Aufbau der Software-Module und deren Kommunikation untereinander sieht vereinfacht folgendermaßen aus:

Wichtigster Bestandteil ist ein Perl-Programm, welches die Gesamten anderen
Software-Module miteinander verbindet.
Das Perl-Programm mp3box_server
ist netzwerkfähig und kann auch von anderen PCs mittels mp3_client_perl
ferngesteuert werden.
Die Benutzung von Perl als alles steuernden Deamon mag aus Geschwindigkeits-
und Speichernutzungs-Sicht ungünstig erscheinen. Ein in C programmierter
Server ist wahrscheinlich wesentlich resourcensparender, jedoch sind meine
Perl Kenntnisse wesentlich besser so daß ich mich für diese Sprache entschieden
habe.
Die Verwaltung der MP3-Dateien erfolgt mittels einer Flat-File Datenbank. Die
Benutzung von SQL hat sich als zu langsam und Resourcenfressend für ein
Minimalsystem herausgestellt.
Wer eine Sammlung von tausend oder mehr MP3-Dateien hat, benötigt einen
intelligenten Algorythmus um sinvolle automatische Songauswahl zu tätigen.
Hierfür benutzt der Server das Perl-Modul
http://cvs.sourceforge.net/viewcvs.py/linuxmp3box/linuxmp3box_server/song_chooser.pm
Dieses vergibt den Songs intern Punkte nach bestimmten Kriterien, und spielt
abhängig von dieser Punktezahl die Songs mit verschiedenen Häufigkeit.
Eine Auswahl eines bestimmten Lieds über die Knöpfe am Gehäuse ist bei tausenden
Titeln sehr mühsam, und wird deshalb nur über das noch in der Entwicklung
befindliche Web-Frontend möglich sein.
Das Auslesen der Gehäuse-Tasten funktioniert mittels jslaunch:
http://sourceforge.net/project/showfiles.php?group_id=9859&package_id=11737
welches beim Booten mittels einen Init-Skriptes gestartet wird.
Zum ansteuern des LCD-Displays wird das lcd-0.151 Kernel-Modul verwendet:
http://sourceforge.net/project/showfiles.php?group_id=9859&package_id=11739
Auch dieses wird beim Booten mit einem Init-Skript geladen, und erstellt
daraufhin ein /dev/lcd Device, welches dann vom Perl-Server angesprochen
werden kann, um Statusinformationen über Song, Interpreter oder mögliche
Tastatureingaben macht.
Der Perl-Server benutzt zum Abspielen der Mp3-Dateien mpg123
(optionales Benutzen von zinf ist für die Zukunft geplant).
Die Standardversion von mpg123 hat aber Probleme die Dateien von
einem NFS-Server zu beziehen, da das Pre-Caching nicht ausreichend
schnell funktioniert. Daher wird eine gepatchte Version von mpg123
eingesetzt, die vor dem Abspielen der MP3-Datei diese zuvor komplett
in den lokalen Speicher kopiert:
http://sourceforge.net/project/showfiles.php?group_id=9859&package_id=13967
Als Mixer zur Ansteuerung der Soundkarte wird aumix verwendet, welches neben einem NCurses-Frontend auch über Konsole steuerbar ist. Dadurch kann es wunderbar auch mittels Web-Frontend oder den Gehäuseknöpfen gesteuert werden: http://sourceforge.net/project/showfiles.php?group_id=9859&package_id=11738
Da die MP3-Box mit einem Kernel 2.2 läuft wurde auch versucht die
Reaktionszeit auf die Buttons mittels des Preemptive Patches zu
verbessern. Der Geschwindigkeitsgewinn war aber, wenn überhaupt vorhanden,
nicht messbar. Viel wichtiger ist es (leider) die Maschine mit hinreichend
Speicher auszurüsten. Da die patch-Version von mpg123 die Dateien immer
komplett in den RAM-Speicher kopiert, werden dadurch die anderen laufenden
Daemons wie die von LIRC oder Jslaunch aus dem Speicher verdrängt und müssen
jedesmal bei bedarf zuerst wieder nachgeladen werden (was bei einem NFS-System
1 bis 2 Sekunden dauern kann).
Daher sollte die Maschine mit ca 64MB Ram ausgerüstet sein, was einen
deutlichen Geschwindigkeitsgewinn gegenüber den vorher benutzten 32MB Ram
brachte.
Als Stand-Alone-Gerät ist die MP3-Jukebox mit obiger Hard- und Software
bereits betriebsbereit, wer die Maschine aber komfortabel fernsteuern
möchte, sollte ein Web-Frontend installieren. Dadurch kann man komfortabler
als über die am Gehäuse angebrachten Taster Einstellungen ändern.
Zugehörige Perl-Skripte befinden sich momentan noch in der Entwicklung:
http://cvs.sourceforge.net/viewcvs.py/linuxmp3box/linuxmp3box_server/web/

Die Hompage des Projektes befindet sich unter www.linuxmp3box.de.