Neue Klänge

OSS/Free - der Linux-Standard-Soundtreiber - hat Konkurrenz bekommen: Das ALSA-Projektteam arbeitet an einem freien Treiber, der zum einen mehr Funktionen bietet und zum anderen sowohl den Benutzern die Installation als auch den Entwicklern die Soundkarten-Programmierung erleichtern soll.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 11 Min.
Von
  • Julia Wunner
Inhaltsverzeichnis

Lange war OSS/Free (Open Sound System) der am häufigsten benutzte freie Soundtreiber unter Linux. In letzter Zeit bemühten sich jedoch mehrere Entwicklergruppen um qualitative Verbesserungen des Sounds und leichtere Handhabung: Sowohl Red Hat als auch die Teams von Enlightenment und KDE modifizierten OSS/Free oder programmierten eigene Treiber. Ernsthafte Konkurrenz entsteht OSS/Free jedoch mit dem ALSA-Treiber (Advanced Linux Sound Architecture) der Gruppe um Jaroslav Kysela.

Alles begann damit, dass sich Kysela über den schlechten OSS/Free-Treiber für seine Gravis UltraSound (GUS) ärgerte. Kurzerhand schrieb er einen Ersatz, den auch andere GUS-Besitzer begeistert nutzten. Aufgrund dieses Erfolgs rief er im August 1998 das ALSA-Projekt ins Leben, das sich zum Ziel gesetzt hat, einen professionellen Linux-Soundtreiber unter der GPL zu entwickeln.

Im Gegensatz zu OSS/Free ist ALSA voll modularisiert und besitzt neben den Mixer-, Digital-Audio- und MIDI- zusätzlich noch Detect- und Control-Schnittstellen. Der Mixer erlaubt dabei eine beliebige Anzahl von Kanälen und den Betrieb im Dezibel-Modus. Die Digital-Audio-Schnittstelle bietet, soweit die Soundkarte dies unterstützt, im Gegensatz zu OSS den unbeschränkten Full-Duplex-Betrieb und besitzt ein unbegrenztes Loopback-Device. In Zukunft soll der ALSA-Treiber sich fast automatisch konfigurieren und Plug&Play-Support bieten. Entwickler können sich über die übersichtlichen Bibliotheken und Kernel-APIs freuen, die das Schreiben von Anwendungen für ALSA und die Unterstützung neuer Soundkarten erleichtern und so beschleunigen. ALSA soll ein Treiber für das professionelle Abspielen und Aufnehmen von Klang und MIDI-Sequencing auf dem Computer werden, wobei er mehr Funktionen als OSS/Free bietet und dennoch ein Open-Source-Projekt bleibt.

Der Ehrlichkeit halber muss erwähnt werden, dass noch nicht alle genannten Punkte realisiert sind, sich aber kurz vor Abschluss oder in der heißen Phase befinden. ALSA ist ein sehr aktives Projekt, das auf der Homepage neben der Dokumentation auch einen Kalender zum aktuellen Stand sowie zu geplanten Aktivitäten bietet. Die aktuelle ALSA-Version 0.3.2 arbeitet bereits mit den meisten gängigen Karten wie Creative SoundBlaster und Gravis UltraSound oder solchen mit dem Yamaha-OPL- und Trident-4D-Wave-DX/NX-Chipsatz. Dabei ist der Betrieb im Full-Duplex-Modus möglich, und die OSS-API-Emulation verspricht zudem die Lauffähigkeit von OSS-Audioprogrammen.

Die stärkste Entwicklung macht gerade die Sequencing-Erweiterung von Frank van de Pol und Takashi Iwai durch. MIDI-Sequencing funktioniert zur Zeit nur mit dem EMU-8000-Synthesizer der AWE-Karten von Creative, soll aber im Herbst dieses Jahres auch für andere Karten fertiggestellt sein und ist bis dahin mit dem MIDI-to-WAV-Renderer Timidity++ möglich. Plug&Play-Karten müssen nach wie vor mit den isapnp-Tools konfiguriert werden, das Hardware-Mixing befindet sich ebenfalls noch in Arbeit.

ALSA verteilt sich auf drei Pakete, die aufeinander aufbauen: driver enthält mit den Kernelmodulen den eigentlichen Treiber, lib umfasst die für die Anwendungen benötigten ALSA-Bibliotheken, und das Anwendungs-paket utils besteht aus Beispielprogrammen, etwa Mixer oder Player.

Der voll modularisierte ALSA-Treiber unterscheidet abstrakte und kartenspezifische Schichten, die hierarchisch angeordnet sind, hier am Beispiel einer Creative SoundBlaster-16-Soundkarte (Abb. 1).

Wie Abbildung 1 zeigt, ist der Treiber wiederum in mehrere Ebenen unterteilt. Auf oberster Ebene befindet sich der ALSA-Soundkernel, der Zugriff auf die abstrakten Hardwareschnittstellen der mittleren Ebene wie Mixer, Sequencer, Timer, MIDI, PCM und hardwareabhängige Komponenten ermöglicht. Eingeschoben zwischen mittlerer und unterer Ebene befinden sich Module für die Kompatibilität mit OSS/Free.

Bei der Entwicklung ging Kyrosela von dem vernünftigen Ansatz aus, alle Audiokomponenten als ‘Karten’ mit verschiedenen Chips zu betrachten. Diese Modularisierung reduziert den Programmcode beträchtlich, da viele Soundkarten gleiche oder ähnliche Chips besitzen. So befindet sich erst auf den untersten Ebenen der kartenspezifische Code für die einzelnen Chipsätze, zum Beispiel die Module snd-mpu401-uart oder snd-sb16. Weitergehende Infos zum Treiberpaket und eine Anleitung zum Schreiben eigener Soundmodule liefert die sehr ausführliche ‘ALSA Developer Documentation’ von Stefan Bartels.

Die ALSA-Bibliotheken erleichtern Entwicklern die Arbeit, weil sie nicht mehr mit den Geräteschnittstellen herumjonglieren müssen, sondern ihre Anwendungen einfach gegen die Bibliotheken linken und dadurch Zugriff auf Funktionen zum Abspielen von digitalem Audio, MIDI, Mixereinstellungen und Timern erhalten.

Zum Arbeiten mit ALSA benötigt man ein lauffähiges Linux-System, die üblichen Entwicklertools wie gcc und make, eine unterstützte Soundkarte und, falls es sich um eine Plug&Play-Karte handelt, die isapnp-Tools. Von der ALSA-Homepage lädt man die oben genannten drei Pakete herunter, wobei die aktuelle Version 0.4.0 nur 2.2er-Kernel unterstützt und die vorhergehende Version 0.3.2 wegen der umgeschriebenen Mixerschnittstelle nur eingeschränkt zu empfehlen ist. Unproblematisch sind dagegen die Versionen alsa-driver-0.3.0-pre4.tar.gz, alsa-lib-0.3.0pre4.tar.gz und alsa-utils-0.3.0-pre3.tar.gz, die sowohl mit den Kernelversionen 2.0.x als auch 2.2.x zusammenarbeiten.

Bei einem Linux 2.0.x dürfen sich neben ALSA keine fremden Soundtreiber und -module im Kernel befinden. Das lässt sich mit lsmod nachprüfen, die gegebenenfalls aufgelisteten Soundmodule kann man per rmmod <module> entfernen. Eventuell muss man auch die sound*.o-Module aus dem Verzeichnis /lib/modules/misc/ löschen. Kernel der Version 2.2 müssen dagegen mit Soundsupport, jedoch ohne Spezifikation einer Soundkarte konfiguriert sein. Nun können die drei ALSA-Pakete in /usr/src/ ausgepackt und in der Reihenfolge driver, lib, utils jeweils mit ./configure, make und make install kompiliert werden, was die verschiedenen Module und Tools wie Mixer erzeugt. Das Skript ./snddevices aus dem alsa-driver-Verzeichnis legt die von ALSA benötigten Sound-Devices wie /dev/snd/pcmC0D0, /dev/snd/mixerC0D0, /dev/snd/controlC0D0 an. Dabei steht C0 für die erste Soundkarte im Rechner und D0 für die erste Geräteschnittstelle auf der Soundkarte.

Soweit dies nicht schon geschehen ist, muss man Plug&Play-Karten nun mit den isapnp-Tools auf die richtigen IO-, IRQ- und DMA-Werte setzen. Das Starten des ALSA-Treibers erfolgt per modprobe snd-<card>, wobei <card> für ein Soundkartenkürzel steht. Beispielsweise lädt modprobe snd-sb16 die für den Creative SoundBlaster 16 benötigten ALSA-Module. Die Datei INSTALL im alsa-driver-Verzeichnis enthält unter anderem eine Liste der Kürzel und optionalen Parameter. Der zusätzliche Befehl modprobe snd-pcm1-oss dient der Emulation von OSS-Geräteschnittstellen und ermöglicht die Lauffähigkeit von OSS-Audiotools unter ALSA. lsmod oder cat /proc/modules sollte nun eine Reihe von Modulen anzeigen und ein cat /proc/asound/cards die Bezeichnung und Einstellungen der erfolgreich erkannten Soundkarte liefern. Bei Problemen hilft das auf der ALSA-Homepage erhältliche ALSA-Sound-Mini-HOWTO weiter.

Vor dem ersten Tontest gilt es, die standardmäßig stummgeschalteten Mixerkanäle zu aktivieren. Das geschieht zum Beispiel mit dem Kommandozeilentool amixer aus dem Anwendungspaket. Dieses kontrolliert im Gegensatz zu OSS-Mixern wie xmixer neben den üblichen Geräteschnittstellen wie PCM, MIC oder Line-in auch die ALSA-eigenen und soundkartenspezifischen Schnittstellen wie Loopback oder 3D-Space. Der einfache Aufruf amixer listet die Schnittstellen auf und zeigt an, ob sie stummgeschaltet (mute/nomute) und aufnahmebereit (rec/norec) sind. amixer master 100 unmute setzt die Ausgabelautstärke auf 100 Prozent, dasselbe macht amixer pcm 100 unmute mit dem digitalen Audiokanal. Der Rechner ist nun bereit für den ersten Audiotest, zum Beispiel mit dem ebenfalls im Anwendungspaket befindlichen Audio-Player und -Recorder aplay und einer beliebigen PCM-Datei (WAV, AU).

Eine weitere nützliche Anwendung ist das mitgelieferte alsactl, mit dem sich Mixereinstellungen mittels alsactl store in der Datei /etc/asound.conf speichern lassen. Durch Einfügen der Zeile post-install snd-<card> /usr/sbin/alsactl restore in die Datei /etc/conf.modules, wobei statt <card> das oben erwähnte Kürzel der Soundkarte steht, startet ALSA beim Laden der Module sofort mit den gewünschten Mixerwerten.

Bis auf wenige Ausnahmen laufen mit dem Modul snd-pcm1-oss alle OSS-Audiotools unter ALSA, sodass für das Abspielen, Aufnehmen und Bearbeiten von Sound eine breite Palette von Anwendungen bereit steht. Die Ausnahmen sind der RealPlayer G2 Alpha und Multitrack 2.2, der aber nach Editieren zweier Dateien ebenfalls funktioniert (siehe ALSA-FAQ).

Mehr Infos

ALSA - die nächste Generation

Wie im Artikel erwähnt befindet sich ALSA in einem Zustand ständiger Veränderung, was bei einer Versionsnummer unter Eins aber auch erlaubt und gewünscht ist. Ein Blick auf die aktuellen CVS-Snapshots zeigt, wohin die Entwicklung geht: Das Modul snd-hwdep ersetzt snd-synth und ist für die hardwareabhängigen Schnittstellen zuständig. Neu hinzugekommen sind die Sequencer-Erweiterungen snd-seq-*. Ebenfalls neu sind die Module snd-pcm1-oss, snd-mixer-oss und snd-seq-oss, die an die Stelle des nicht mehr verwendeten snd-pcm-oss treten. Sinn macht auch die Umbenennung der kartenspezifischen Module von snd-* in snd-card-*.

Mehr Infos

Es existiert jedoch bereits eine Reihe nativer ALSA-Anwendungen und OSS-Programme, die für ALSA umgeschrieben wurden. Hier wäre der umfangreiche AlsaPlayer zu nennen, der von WAV- über MP3- und verschiedene Moduldateien bis Audio-CD alles abspielt und das sowohl mit schicker gtk+-Oberfläche als auch auf der Kommandozeile. Auch die MP3-Player mpg123, XMMS und der Qt-basierte Rasca unterstützen ALSA direkt oder als Plugin. Wer keine Angst vor kniffligen Kompilationen hat, dem steht mit Ecasound respektive QtEcasound sogar ein Player und Harddisk-Recorder mit vielen Effekten zur Verfügung.

Wer trotz aller Vorzüge nicht von ALSA überzeugt ist, entfernt die geladenen snd*-Module mittels rmmod und löscht die Dateien /usr/lib/libasound* und in /lib/modules/misc/ die Dateien isapnp.o, persist.o und snd*, sowie die in /usr/sbin/ beziehungsweise /usr/bin/ installierten Anwendungen.

In der Praxis hat sich gezeigt, dass ALSA ein vollwertiger Ersatz für den herkömmlichen OSS/Free-Treiber ist und sogar mehr Funktionen bietet. Die Installation und Benutzung klappt bei den unterstützten Soundkarten einwandfrei, lediglich Clones und besondere Gegebenheiten wie der gleichzeitige Betrieb mehrerer Soundkarten bereiten eventuell Probleme. Daneben kann es auf Grund des noch nicht hundertprozentig ausgetesteten Treibers manchmal zu unvorhergesehenen Effekten kommen, wenn beispielsweise ein in den Kernel kompilierter Videotreiber wie BTTV den OSS-Mixer blockiert und so den ALSA-OSS-Mixer funktionsunfähig macht.

Abgesehen von solchen Kinderkrankheiten, die in einigen Monaten wohl ausgestanden sind, besitzt ALSA gegenüber OSS/Free eine wohldurchdachte modularisierte Architektur und eine für Entwickler äußerst praktische Bibliothek.

Auch SuSE ist überzeugt: die Nürnberger wollen ALSA in Zukunft als Standardsoundtreiber ihrer Distribution beilegen und das Projekt im Rahmen der kürzlich gegründeten SuSE-Labs finanziell unterstützen. Laut Alan Cox und nach Billigung durch Linus Torvalds soll ALSA Bestandteil des Kernels werden. Aufgrund des frühen Feature-Freeze wird dies beim Kernel 2.4 noch nicht der Fall sein.

JULIA WUNNER
promoviert an der Universität Tübingen im Bereich Technische Informatik über MBone-Videokonferenzsysteme und deren Einsatz in der Hochschullehre.

Mehr Infos

iX-WERTUNG

[+] modularisierte Architektur

[+] Sourcecode unterliegt der GPL

[-] noch nicht vollständig getestet

(avr)