Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
ALSA , die Advanced Linux Sound Architecture, ist der grundlegende Baustein des Soundsystems unter Linux, um der Soundkarte Töne zu entlocken. Ohne ALSA geht gar nichts (außer man verwendet OSS4), denn sie stellt die Kernelmodule (unter Windows "Treiber" genannt) bereit, mit denen die Soundkarte überhaupt erst angesprochen werden kann. Da die Module zum Kernel gehören, muss man sie nicht extra installieren, sie sind bereits vorinstalliert. Zudem bringt ALSA bereits eine Menge an Voreinstellungen mit, mit denen die meisten Soundkarten korrekt erkannt und ins System eingebunden werden. ALSA kann aber noch viel mehr. Dieser Artikel hat den Aufbau, die Funktionsweise und weitergehende Möglichkeiten von ALSA zum Thema.
In der Regel muss man sich nicht mit der Konfiguration von ALSA beschäftigen, da alles passend voreingestellt ist. Der Benutzer macht seine Einstellungen statt dessen mit PulseAudio. Nur wenn man spezielle Wünsche hat, die PulseAudio nicht befriedigen kann (zum Beispiel extrem niedrige Latenzen), ist die Beschäftigung mit ALSA angeraten.
Der wichtigste Teil von ALSA sind die Kernelmodule ("Treiber"), welche die Soundkarte funktionieren lassen. Unterschiedliche Soundkarten benutzen verschiedene Adressen und Befehlssätze. Das Kernelmodul kennt diese Eigenschaften und ist deshalb in der Lage die Fähigkeiten der Soundkarte zu nutzen. In der Regel wird die Soundkarte beim Booten vom Kernel erkannt. Der Kernel lädt daraufhin das zur Soundkarte passende Kernelmodul. Erst nach dem erfolgreichen Laden des Kernelmodules ist die Soundkarte vom Soundsystem und/oder von Programmen via ALSA ansprechbar.
Die Kernelmodule reichen die Funktionen und Fähigkeiten der Soundkarte weiter. Konkret bedeutet dies, dass sie Schnittstellen für die Ein- und Ausgangskanäle (Aufnahme und Wiedergabe), und Schalter und Funktionen (zum Beispiel Vorverstärker, Frequenzweichen, SPDIF, Equalizer etc.) für andere Programme zugänglich macht. Es hängt also von der Soundkarte ab, welche Schnittstellen von ALSA angeboten werden. Mit dem Programm Alsamixer lassen sich diese Schnittstellen darstellen und regeln.
Nur in sehr seltenen Fällen (zum Beispiel bei der Verwendung ganz neu erschienener Soundchips) muss ALSA aktualisiert werden. Das unter Windows typische Vorgehen des Installierens bzw. Reinstallierens von "Treibern" ist bei ALSA nutzlos. Wenn Fehler vorliegen, so sind das zumeist Fehler, die in der Konfiguration behoben werden müssen.
Viele Soundkarten bieten nicht die Möglichkeit, gleichzeitig verschiedene Klangquellen wiederzugeben. Um es dennoch zu tun, braucht man eine Art Mischpult. Bei Ubuntu und generell bei Linux nennt man dieses Mischpult Soundserver. Der Soundserver passt die verschiedenen Klangquellen an die Erfordernisse der Soundkarte an, und reicht das Summensignal dann an die Soundkarte weiter. Bei Aufnahmen geht das Signal dabei den umgekehrten Weg. ALSA bietet die Möglichkeit, die Ressourcen der Soundkarte beliebig zu gruppieren und zu benennen. In der Regel werden jedoch Namen verwendet, die klar und deutlich auf die Funktion hinweisen.
Eine Standard-Ubuntu-Installation bringt die notwendigen Pakete bereits mit. Je nach Ubuntu-Version kann aber die Installation folgender Pakete notwendig sein:
alsa-base (ALSA driver configuration files)
alsa-utils (Utilities for configuring and using ALSA)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install alsa-base alsa-utils
sudo aptitude install alsa-base alsa-utils
Besitzer von Echo-, ICE1712-, ICE1724- und RME-Karten können noch folgendes Paket installieren:
alsa-tools-gui (main, GUI based ALSA utilities for specific hardware)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install alsa-tools-gui
sudo aptitude install alsa-tools-gui
Darin befinden sich Programme, welche die Handhabung der komplexen Einstellungsmöglichkeiten dieser Karten erleichtern.
ALSA muss also für verschiedene Soundkarten verschiedene Konfigurationen anbieten, um die Fähigkeiten der Soundkarte darstellen zu können. Dies geschieht in Konfigurationsdateien, die im Ordner /usr/share/alsa/cards/ zu finden sind. Dort werden Schnittstellen definiert, und unter standardisierten Namen (zum Beispiel "default", "front" und "surround51") zugänglich gemacht. Diese Schnittstellen werden dann von Programmen oder darüber liegenden anderen Soundservern (zum Beispiel PulseAudio) genutzt.
Eine Beschreibung, wie man diese Schnittstellen selbst konfiguriert und gemäß eigenen Wünschen und Erfordernissen anpasst, findet sich im Artikel .asoundrc. Auch die oben genannten Presets benutzen diese Konfigurationssprache, wenn auch etwas komplexer, als es für "normale" Benutzer nötig ist.
Eine Auflistung von allen von ALSA gefundenen Soundkarten bekommt man mit diesem Befehl:
cat /proc/asound/cards
0 [M1010LT ]: ICE1712 - M Audio Delta 1010LT M Audio Delta 1010LT at 0xe800, irq 20 1 [CX8801 ]: CX88x - Conexant CX8801 Conexant CX8801 at 0xfc000000
In diesem Beispiel werden zwei Soundkarten gefunden, Nummer 0
mit dem Namen M1010LT
, und Nummer 1
mit dem Namen CX8801
. Man kann beim direkten Ansprechen der Schnittstellen wahlweise die Nummer oder den Namen des Gerätes verwenden.
Man kann ALSA anweisen, Klangquellen unter Umgehung des ALSA-Soundservers direkt an das Kernelmodul durchzureichen. Um beim obigen Beispiel zu bleiben: hier heißt die erste Schnittstelle hw:0
(wahlweise hw:M1010LT
). Analog dazu heißt die zweite von ALSA gefundene Soundkarte hw:1
(wahlweise hw:CX8801
). Es geht auch noch genauer: hw:0.0
spricht den ersten Subkanal der ersten Soundkarte an. Das kann zum Beispiel dann wichtig werden, wenn man HDMI- oder SPDIF-Schnittstellen anprechen will. Diese sind nämlich zumeist als Subkanal definiert.
Eine Auflistung über die von ALSA vergebenen Namen bekommt man mit dem Befehl aplay -L
:
aplay -L
Beispielausgabe (gekürzt):
default sysdefault:CARD=M1010LT front:CARD=M1010LT,DEV=0 surround41:CARD=M1010LT,DEV=0 surround50:CARD=M1010LT,DEV=0 ...
Die hierbei ausgegebenen Schnittstellen gehen alle über den ALSA-Soundserver. default
stellt in der Regel mindestens eine Stereo-Schnittstelle dar, an das alle Klangquellen ihre Ausgabe durchreichen, sofern nicht explizit anderes definiert wird. Die weiteren Schnittstellen sind aufgrund der Namensgebung von ALSA selbsterklärend. Die Kanäle werden dabei einfach durchgereicht. Auch wenn zum Beispiel der Name surround41
annehmen lässt, dass der Kanal für den Subwoofer nur Bässe weiterleitet, so ist das mitnichten der Fall: er liefert das ganze Frequenzspektrum. Man kann die Funktionalität und das Routing der Kanäle sehr einfach mit dem Befehl speaker-test
überprüfen (siehe unten).
An die von ALSA bereitgestellten Schnittstellen können sowohl Programme, andere Soundserver (zum Beispiel PulseAudio) als auch Frameworks (zum Beispiel GStreamer) ankoppeln. Diese Vielfältigkeit ist auch meistens das Problem bei Schwierigkeiten mit dem Soundsystem. Nur in wenigen Fällen liegt der Fehler bei ALSA selbst, sondern in der Anbindung und dem Routing der Klangquellen.
alsamixer
"spricht" direkt mit ALSA und bietet damit Zugriff auf die von der Soundkarte (und dem Kernelmodul) bereitgestellten Möglichkeiten. Regler, die man unter Umständen in "höheren Ebenen" (wie zum Beispiel PulseAudio) nicht sieht, sind damit zugänglich. Es gibt dazu einen eigenen Artikel im Wiki: Alsamixer.
Um die Schnittstellen direkt anzusprechen und zu testen, gibt es den Befehl speaker-test
. Er verfügt über eine Vielzahl an Optionen, näheres dazu findet man in der entsprechenden manpage. Beispiel:
speaker-test -c 2 -D front
Dies testet mit rosa Rauschen und zwei Kanälen die Schnittstelle front
. Man kann auch die Soundkarte direkt ansprechen:
speaker-test -c 2 -D hw:0
Dies ist hilfreich, wenn die Soundausgabe gar nicht funktioniert und man ermitteln will, wo genau der Fehler liegt. Aber Vorsicht: damit wird die Soundkarte für alle anderen Klangquellen nicht mehr erreichbar, weil in diesem Fall der Befehl die Schnittstelle für sich alleine reserviert (siehe oben: Soundserver).
aplay
hilft den Status von ALSA zu erkennen. Einen Überblick über die Soundkarten und deren Sub-Geräte bekommt man damit:
aplay -l
Will man dagegen die von ALSA selbst kreierten Schnittstellen des Soundservers sehen, so benutzt man ein großes L:
aplay -L
aplay kann aber auch direkt Sounddateien (in den Formaten voc, wav, raw und au) über die Soundkarte ausgeben. Beispiel:
aplay -D front foo.wav
Mit arecord
kann man Aufnahmequellen als Datei aufzeichnen. Beispiel:
arecord -D hw:1 -f cd foo.wav
Hiermit wird der Aufnahmekanal der zweiten Soundkarte mit 44.1 KHz und 16-Bit-Auflösung (das Format einer Audio-CD) als wav-Datei gespeichert. arecord verfügt über eine Vielzahl an Optionen, es sei deshalb auf die manpage verwiesen.
Um ALSA aus der Kommandozeile oder Scripten heraus zu steuern, greift man auf den Befehl amixer
zurück. Auch hierzu gibt es einen eigenen Artikel: amixer.
Falls man sich grandios verkonfiguriert hat, kann man die Grundeinstellungen wiederherstellen:
sudo alsactl init
Die gegenwärtigen Einstellungen speichert man mit:
sudo alsactl store
Die Einstellungen des zuletzt gespeicherten Stands wiederherstellen:
sudo alsactl restore
Was ALSA beim Booten des Rechners veranstaltet, sieht man mit diesem Befehl:
dmesg | egrep -i "alsa|snd"
Alle von ALSA geladenen Kernelmodule erhält man mit diesem Befehl:
lsmod | grep "^snd" | cut -d " " -f 1
Folgender Befehl gibt alle verfügbaren Kernelmodule von ALSA aus. Die Namen der Kernelmodule sind dabei zumeist an den Chips orientiert, die auf den Soundkarten verbaut sind:
find /lib/modules/$(uname -r)/kernel/sound/
Unter /dev/snd/ findet man die aktiven ALSA-Gerätedateien.
Equalizer für ALSA:
ALSA Tray - grafisches Werkzeug
OSS4 - Projekt, dass die gleichen Ziele hat, allerdings nicht im Standardkernel ist
Soundsystem Übersichtsartikel
Diese Revision wurde am 22. November 2016 23:21 von aasche erstellt.