Advanced Linux Sound Architecture

Aus Mikiwiki
Zur Navigation springen Zur Suche springen

Die Advanced Linux Sound Architecture / ALSA löste das Open Sound System / OSS ab und ist seit Kernel 2.6 die offizielle Linux-Audioarchitektur. ALSA kommt mit Geräten vom Onboard-Chipsatz bis zur professionellen Multikanal-Audiokarte zurecht, für die es modularisierte Gerätetreiber zur Verfügung stellt. Die Architektur ist threadsicher und arbeitet daher problemlos mit Mehrprozessorsystemen zusammen. Sie besitzt ausserdem die Fähigkeit zum Full Duplexing, also zum parallelen Aufnehmen und Abspielen.

Das ALSA-Paket enthält nicht nur die jeweils kartenspezifischen Kernelmodule, sondern auch eine Bibliotheksschicht im Userspace, die sich aus Plugins zusammensetzt und weite Teile der Funktionalität implementiert. Dabei bieten die Kernelmodule lediglich Hardware-bezogene Funktionen - Formatkonvertierungen, das Mischen von mehreren Audiospuren oder die Emulation von Mixern (wie sie bei OSS üblich sind) fällt nicht in ihre Zuständigkeit. Diese Aufgaben übernimmt stattdessen die Userspace-Bibliothek. Über sie sind auch die Hardware-Eigenschaften zu erfragen und Detaileinstellungen vorzunehmen. ALSA unterstützt zudem moderne Surround-Audiokarten.

ALSA bietet eine Reihe von Plugins.

Plugin Beschreibung
Dmix Mischt mehrere Ausgaben zu einem Audiostrom zusammen.
Dsnoop Vergibt einen Eingang an verschiedene Programme.
Multi Fasst mehrere Audiokarten so zusammen, dass sie sich wie ein Gerät ansprechen lassen.
Route Verteilt die Kanäle.
Plug Wandelt Audioformate um.
Rate Wandelt die Samplerate um.
Meter Ermöglicht Levelmeter per Software.
Softvol Betreibt im Userspace einen virtuellen Mixer, der einen in der Lautstärke angepassten Datenstrom an die Audiokarte weitergibt und so die Lautstärkeregelung der digitalen Quellen ermöglicht.

Das ALSA-Paket enthält auch textbasierte Werkzeuge.

Plugin Beschreibung
alsamixer Ein Lautstärkeregler für die Befehlszeile.
aconnect Schaltet mehrere (virtuelle) Audiogeräte nach Bedarf in eine bestimmte Reihenfolge. Grafische Oberflächen wie Aconnectgui oder die Qt-Version Kaconnect erleichtern dies.

Zur Erhaltung der Kompatibilität mit OSS wird über die Bibliothek "libaoss" eine Userspace-Emulation der OSS-Programmierschnittstelle zur Verfügung gestellt. So können OSS-basierte Anwendungen weiterhin auf die alte API zugreifen. Die entsprechenden Kernel-Gerätetreiber müssen entweder einkompiliert oder als Modul geladen werden. Aus technischer Sicht spricht nichts dagegen, Module für beide Systeme parallel auf dem System zu halten. OSS operiert direkt auf der Kernelebene; ALSA arbeitet dagegen im userspace und stellt die meisten Funktionen über Bibliotheken bereit.

Konfiguration

Die vom Hersteller ausgelieferte Konfiguration befindet sich je nach Distribution im Verzeichnis "/usr/share/alsa" oder unter "/etc/alsa". Im Unterverzeichnis "pcm" definiert sie die Aliase für Surround-Hardware: "default", "left", "right" und andere.

Als systemweite Konfiguration wird "/etc/alsasound.conf" verwendet, für die einzelnen Benutzer "~/.asoundrc".

Leerzeichen, neue Zeilen und Tabulatoren separieren Tokens, geschweifte Klammern starten und schliessen Blöcke, eckige Klammern definieren Felder. Es ist auch erlaubt, Tokens mit Kommas oder Doppelpunkten zu trennen oder Variablenzuweisungen mit Gleichheitszeichen zu kennzeichnen, jedoch nicht nötig. Folgende drei Ausdrücke sind identisch.

x {a 1 b 2}
x {
  a 1
  b 2
}
x {
  a=1;
  b=2;
}

Eine Definition beginnt mit "Typ.Name". Die verfügbaren Variablen hängen vom Typ ab.

Folgendes Beispiel konvertiert die Samplerate auf die üblichen 48 kHz eines DAT-Rekorders. Dabei wird ein PCM-Gerät namens "dat" vom Plugintyp "rate" definiert, das als Ausgabe im Abschnitt "slave" ein PCM-Gerät mit 48 kHz verwendet. Wenn ein programm jetzt "dat" mit beliebiger Samplerate (z. B. mit den üblichen 44,1 kHz von CD- oder MP3-Dateien) verwendet, konvertiert das Rate-Plugin dies auf DAT-gerechte 48 kHz.

pcm.dat {
  type rate
  slave {
      pcm hw
      rate 48000
  }
}

In folgendem Beispiel wird das Dmix-Plugin eingesetzt. Der Name "!default" setzt darin das Standardgerät. Es wird mit einer Instanz des DMix-Plugin verbunden, das wiederum an das echte Ausgabegerät "hw" verweist. Gibt es mehrere Geräte, legt der Ausdruck pcm "hw:0,0" fest, dass ALSA speziell das erste verwendet. Das DMix-Plugin benötigt ebenso wie Dsnoop und Dshare einen IPC-Schlüssel. Dieser muss für jede Instanz eindeutig sein, da er bei der Interprozesskommunikation zur Identifikation dient.

pcm.!default {
  type plug
  slave.pcm {
    type dmix
    pic_key 1024
    slave {
      pcm hw
    }
  }
}

Weblinks

Herausgeber Sprache Webseitentitel Anmerkungen
ALSA Project eng Advanced Linux Sound Architecturewbm
Mark Constable eng .asoundrcwbm
Wikipedia ger Advanced Linux Sound Architecturewbm Enzyklopädischer Artikel