25.2 Audio 

Das erste praktische Multimedia-Thema, dem wir uns widmen wollen, ist das Thema »Audio«. Beginnen wollen wir mit der Konfiguration der Soundkarte. Um die Unterstützung des Kernels für diese Ressource zu aktivieren, muss man wissen, wie die Sound-Unterstützung des Kernels aussieht. [Bevor Sie weiterlesen: Testen Sie einfach mal, ob Ihre Soundkarte nach der Installation nicht schon automatisch erkannt wurde. Auch wenn Sie keinen Ton hören, reicht es vielleicht aus, einfach die Lautstärkeregler aufzudrehen.]
25.2.1 Bis Kernel 2.6 – OSS 

Open-Sound- System
Die Kernel der 2.4er-Entwicklungsreihe waren die letzten, die standardmäßig mit OSS, dem Open-Sound-System, als Unterstützung für Soundkarten ausgeliefert wurden; einige solcher Systeme sind nach wie vor im Einsatz. Man unterscheidet dabei zwischen der OSS-API, einem Interface zu Audiotreibern, das neben Linux auch noch von vielen anderen Unix-Varianten unterstützt wird, und den OSS-Treibern, die eben dieses Interface für den Kernel implementieren.
Der Grund, warum OSS heutzutage [Kernel 2.6!] immer noch ein Thema ist, besteht in der weiten Verbreitung der OSS-API. So wird die OSS-API beispielsweise auch von den FreeBSD- und OpenBSD-Soundtreibern unterstützt. OSS bildet damit den kleinsten gemeinsamen Nenner der Unix-Sound-APIs.
Treiber laden
Die Vorbereitungen bei der Kernel-Konfiguration sehen bei OSS so aus, dass zuerst die entsprechenden Treibermodule mit dem Kernel kompiliert werden müssen. Die Unterstützung für eine Karte wird dann durch das Laden der entsprechenden Kernel-Module aktiviert. Nach einem Laden mit modprobe sieht man dann meist eine Ausgabe wie die folgende: |
# lsmod ... es1370 30348 1 gameport 1388 0 [es1370] soundcore 3428 4 [es1370] ...
Listing 25.1 OSS im Kernel
In diesem Beispiel wurde eine Ensoniq-1370-kompatible Soundkarte benutzt, deren Modul noch das soundcore-Modul als Basis sowie die Gameport-Unterstützung nachgeladen hat.
Wenn der Treiber erfolgreich geladen ist, wird das entsprechende Device /dev/dsp aktiviert. Wurde aber der falsche Treiber geladen, schlägt dies fehl und eine entsprechende Meldung wird ausgegeben:
# modprobe i810_audio /lib/modules/2.4.22/kernel/drivers/sound/i810_audio.o: init_module: No such device ...
Listing 25.2 Ein Treiber für die falsche Karte wird geladen.
Man kann auf diese Weise also auch eine einfache Form der Hardwareerkennung durchführen: einfach so lange alle Treibermodule laden, bis kein Fehler mehr auftritt. Eine Alternative zu dieser brutalen Methode bietet das Programm lspci:
$ lspci ... 0000:00:06.0 Ethernet controller: Accton Technology Corporation SMC2-1211TX (rev 10) ... 0000:00:11.5 Multimedia audio controller: VIA Technologies, Inc. VT8233/A/8235/8237 AC97 Audio Controller (rev 10) 0000:01:00.0 VGA compatible controller: nVidia Corporation NV17 [GeForce4 MX 440] (rev a3)
Listing 25.3 Die gefundenen PCI-Karten
Aus diesem Output kann man schon einen relativ guten Anhaltspunkt für alle benötigten Treiber gewinnen. Eine Alternative bieten automatische Tools wie sndconfig (siehe Abbildung 25.1).
Alles automatisch
Dieses Tool stammt ursprünglich aus der RedHat-Distribution, ist aber mittlerweile auch für andere Distributionen wie Debian verfügbar.
Test der Konfiguration
Eine hübsche Spielerei zum Testen einer funktionierenden Soundinstallation ist die sogenannte voice of god:
# cat /vmlinuz > /dev/dsp
Listing 25.4 voice of god
Bei diesem Beispiel leiten wir einfach die binären Daten des Kernels per Ausgabeumleitung auf die Soundkarte – wenn Sie nun ein lautes Rauschen hören, funktioniert Ihre Soundkarte, – und Sie wissen, wie sich der Kernel anhört.
Abbildung 25.1 sndconfig
25.2.2 Ab Kernel 2.6 – ALSA 

ALSA steht für Advanced Linux Sound Architecture, ist seit Kernel 2.6.0 standardmäßig enthalten und hat damit das Open-Sound-System ersetzt. ALSA bietet folgende Vorteile:
- guter Support für alle Arten von Audioschnittstellen wie normale Soundkarten oder professionelle Multichannel-Soundkarten
- modularisierte Soundtreiber
- ein multiprozessor- und threadsicheres Design
- eine Userspace-Bibliothek (alsa-lib), die die Anwendungsentwicklung vereinfacht und eine höhere Funktionalität bietet
- Unterstützung für das alte OSS-Interface zwecks Kompatibilität mit den meisten OSS-Programmen
Darüber hinaus klingen ALSA-Treiber oft auch besser als ihre entsprechenden OSS-Varianten.
Die Konfiguration von ALSA läuft dabei gar nicht so anders als die von OSS ab. Sie müssen auch hier die entsprechenden Module samt Parametern laden. Damit man die ALSA-Module von ihren entsprechenden OSS-Äquivalenten unterscheiden kann, haben diese alle ein snd- vor ihrem Namen.
# lsmod Module Size Used by ... snd_via82xx 25184 3 snd_seq_oss 34560 0 snd_seq_midi_event 7936 1 snd_seq_oss ... snd 52516 17 ...
Listing 25.5 ALSA im Kernel
Ausführliche Hilfen
Die Module per Hand zu laden, ist recht umständlich. Bei den meisten Distributionen wird die entsprechende Hardware jedoch bereits bei der Installation erkannt und eingebunden. In jedem Fall hilft jedoch die Webseite des Projekts, http://www.alsa-project.org, bei Problemen weiter. Dort erfahren Sie, ob Ihre Karte unterstützt wird, und Sie finden zudem im Problemfall noch Installationshinweise speziell für Ihre Hardware und Distribution!