[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Programme_starten: Starten von Programmen] [:Terminal: Ein Terminal öffnen] [:sudo: Root-Rechte] }}} [[Inhaltsverzeichnis()]] [[Bild(./alsa_logo.gif, 48, align=left)]] [https://www.alsa-project.org/main/index.php/Main_Page ALSA] {en}, die '''A'''dvanced '''L'''inux '''S'''ound '''A'''rchitecture, ist ''__der__'' grundlegende Baustein des [:Soundsystem:Soundsystems] unter Linux, um der Soundkarte Töne zu entlocken. Ohne ALSA geht gar nichts (außer man verwendet das [wikipedia:Open_Sound_System:]), 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. {{{#!vorlage Hinweis 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. }}} = Kernelmodule = 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. {{{#!vorlage Hinweis 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. }}} = ALSA als Soundserver = 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. == Installation == Eine Standard-Ubuntu-Installation bringt die notwendigen Pakete bereits mit. Je nach Ubuntu-Version kann aber die Installation folgender Pakete notwendig sein: {{{#!vorlage Paketinstallation alsa-base, ALSA driver configuration files alsa-utils, Utilities for configuring and using ALSA }}} === Spezielle Soundkarten === Besitzer von Echo-, ICE1712-, ICE1724- und RME-Karten können noch folgendes Paket installieren: {{{#!vorlage Paketinstallation alsa-tools-gui, universe, GUI based ALSA utilities for specific hardware }}} Darin befinden sich Programme, welche die Handhabung der komplexen Einstellungsmöglichkeiten dieser Karten erleichtern. == Voreinstellungen == 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. == Konfiguration == 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. = Nomenklatur = Eine Auflistung von allen von ALSA gefundenen Soundkarten bekommt man mit diesem Befehl: {{{#!vorlage 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`: {{{#!vorlage Befehl 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). = Konnektivität = 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. = Hilfreiche Befehle = == alsamixer == `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:]. == speaker-test == 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 [:man:manpage]. Beispiel: {{{#!vorlage Befehl speaker-test -c 2 -D front }}} Dies testet mit [wikipedia:Rosa_Rauschen:rosa Rauschen] und zwei Kanälen die Schnittstelle `front`. Man kann auch die Soundkarte direkt ansprechen: {{{#!vorlage Befehl 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 == `aplay` hilft den Status von ALSA zu erkennen. Einen Überblick über die Soundkarten und deren Sub-Geräte bekommt man damit: {{{#!vorlage Befehl aplay -l }}} Will man dagegen die von ALSA selbst kreierten Schnittstellen des Soundservers sehen, so benutzt man ein großes L: {{{#!vorlage Befehl aplay -L }}} aplay kann aber auch direkt Sounddateien (in den Formaten '''voc''', '''wav''', '''raw''' und '''au''') über die Soundkarte ausgeben. Beispiel: {{{#!vorlage Befehl aplay -D front foo.wav }}} == arecord == Mit `arecord` kann man Aufnahmequellen als Datei aufzeichnen. Beispiel: {{{#!vorlage Befehl 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 [:man:manpage] verwiesen. == amixer == 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:]. == Diverses == * Falls man sich grandios verkonfiguriert hat, kann man die Grundeinstellungen wiederherstellen: {{{#!vorlage Befehl sudo alsactl init }}} * Die gegenwärtigen Einstellungen speichert man mit: {{{#!vorlage Befehl sudo alsactl store }}} * Die Einstellungen des zuletzt gespeicherten Stands wiederherstellen: {{{#!vorlage Befehl sudo alsactl restore }}} * Was ALSA beim Booten des Rechners veranstaltet, sieht man mit diesem Befehl: {{{#!vorlage Befehl sudo dmesg | egrep -i "alsa|snd" }}} * Alle von ALSA geladenen Kernelmodule erhält man mit diesem Befehl: {{{#!vorlage 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: {{{#!vorlage Befehl find /lib/modules/$(uname -r)/kernel/sound/ }}} * Unter '''/dev/snd/''' findet man die aktiven ALSA-Gerätedateien. = PulseAudio Ersatz= Einige Programme bestehen auf einem vorhandenen [:PulseAudio:] und arbeiten nicht nativ mit ALSA zusammen, zum Beispiel [:Skype:]. In diesem Fall besteht die Möglichkeit einen [github:i-rinat/apulse:PulseAudio-Emulator] {en} zu verwenden. Jedoch muss er selbst kompiliert werden. = Links = * Equalizer für ALSA: * [post:3661837:AlsaEqual] * [post:5407432:pEqualizer] * [https://projects.flogisoft.com/alsa-tray/ ALSA Tray] {en} - grafisches Werkzeug * [launchpad:alsa-tray:ALSA Tray auf Launchpad] * [:Soundsystem:] {Übersicht} Übersichtsartikel * [:Sound Problembehebung:] #tag: Hardware, Installation, Multimedia