Home   Artikel   Archiv   Forum   Impressum  
Artikel vom 07.02.04
Autor: Ronny Ziegler
Languages: none
Artikel bewerten:

Printer Druckversion
Helfen Sie mit!
 

Embedded Linux MP3 Box

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.


Linux kann alles!

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.

Keine Allzwecklösung...

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).

Hardware

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.

CD-Spieler vor dem Umbau

Sämtliche Innereien des CD-Spielers wurden daraufhin entfernt:

ausgebauter CD-Spieler

und durch ein platzsparendes Bravo-Baby Motherbord mit Intel-Celeron CPU ersetzt.

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.

Netzteil

Der auf dem Bild erkennbare Lüfter wurde später deaktiviert, da das Netzteil kaum Wärme erzeugte. Eine Kombination des Lüfters mit einem Temperaturfühler wäre denkbar.

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.

Infrarotempfänger

Eine genaue Anleitung zum Bau eines Infrarotempfängers findet man im Artikel LIRC - Infrarot Empfänger.

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.

LCD anschliessen

Eine Bauanleitung für das LCD findet man im Artikel LCD-Display.

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):

Taster

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

LCD anschliessen

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 On­Board) 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:

Netzwerkkabel

Audio-In, Audio-Out:
Zusätzlich wurden der Audio-In und Audio-Out des On-Board Soundanschlusses mit der Rückseite des Gehäuses verbunden (siehe auch obiges Bild).
Die Rückseite des MP3-Spielers bietet nun Netzwerkanschluss, Audio-Anschluss und Netzwerkkabel:

Rückseite

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.

Power-Jumper

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.

Software

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:

Software-Kommunikation

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/

Web-Frontend

Links

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




Anmerkungen zu diesem Artikel


Bisher keine Kommentare


Eigene Anmerkung eintragen