# ALSA - Advanced Linux Sound Architecture (26.08.2024) ALSA ist ein Framework und Teil des Linux Kernel welches eine API für Sound-Karten-Gerätetreiber anbietet. Linzenziert ist es unter der *GPL (GNU General Public License)* und der *LGPL (GNU Lesser General Public License)*[^2]. Das Projekt wurde unabhängig vom Linux Kernel entwickelt und ersetzte mit der Version 2.6 *[OSS (Open Sound System)](https://en.wikipedia.org/wiki/Open_Sound_System)* als Standard.[^8] ## Features ALSA wurde mit Features entwickelt, welche zu dieser Zeit von OSS noch nicht unterstützt wurden: - Hardware-basierte MIDI Synthese - *Hardware-Mixing* von mehreren Kanälen - *Full-Duplex* Operationen - *Multiprocess*-freundliche und *Thread-Save* Gerätetreiber ALSA bietet ausserdem eine *User-Space* Bibliothek für Applikationsentwickler, welche die Funktionalitäten des Treibers nutzen wollen, ohne direkt mit Kernel Treibern kommunizieren zu müssen.[^1] Abgesehen von dem Kernel-internen Software Framework bietet ALSA auch verschiedene CLI Applikationen für die Interaktion mit den Treibern an: ## Applikationen ### `alsactl` **alsactl** ist ein CLI mit welchem komplexere Einstellungen von ALSA Soundkarten-Treiber verwaltet werden können. Einstellungen welche nicht über normale Mixer Applikationen gesteuert werden können, müssen mit diesem Tool gesetzt werden.[^4] ### `amixer` **amixer** ist ein Command-Line Mixer für ALSA Soundkarten-Treiber.[^5] ### `alsamixer` Wie auch **amixer** ist **alsamixer** ein Mixer für ALSA Soundkarten-Treiber, jedoch mit einer *ncusers* Oberfläche.[^6] ![[alsamixer.png]] Abbildung 1: Die Benutzeroberfläche von alsamixer (Quelle: eigene Aufnahme) ### PulseAudio Kompatibilität Für Kompatibilität mit PulseAudio kann das von der Community erstellte **apulse** Paket installiert werden. Dieses bietet einen PulseAudio Emulator für ALSA.[^7] ## Konzepte ALSA organisiert Hardware Audiogeräte in einer Hierarchie von *Cards* (folgend auch Karten genannt), *Devices* (folgend auch Geräte genannt) und *Subdevices* (folgend auch Subgeräte genannt). Die Karten repräsentieren die Hardware Audio-Karten. Sie spielen keine grosse Rolle in der Konfiguration abgesehen von der Unterteilung der Geräte. Eine Karte kann anhand ihrer ID (eine Zeichenfolge wie "Headset") oder dem Index (beginnend bei 0) angesprochen werden. Das meiste passiert auf Geräteebene. Die Geräte jeder Karte werden beginnend bei 0 aufgezählt und können unabhängig von einander genutzt werden. In den meisten Fällen reicht die Angabe der Karte und des Geräts um den Ausgang des Audios zu deklarieren. > [!Info] Hardware Geräte vs. ALSA Geräte > Um Verwirrung im folgenden Kapitel zu vermeiden, müssen wir hier kurz den Unterschied zwischen den obig genannten Hardware Geräten und ALSA Geräten erkunden. > Die beiden haben grundsätzlich nichts miteinander zu tun. Erstere sind Effektiv die Lautsprecher welche an eine Soundkarte angeschlossen sind. ALSA Geräte wiederum sind Wrapper für Plugins welche in Konfigurationsdateien definiert werden. Die kleinste Unterteilung für ALSA sind Subgeräte. In den meisten Fällen repräsentieren die Subgeräte einzelne Kanäle (*channels*). Die ganze Verarbeitung des Sounds wird in ALSA von sogenannten Plugins verwaltet. Die wichtigsten Plugins sind: - `hw` - Dieses Plugin nimmt keine Veränderung der Daten vor, sondern sendet Daten einfach an den Hardware Treiber. Werden Parameter verwendet, die nicht unterstützt sind, wirft **hw** einen Fehler. - `plug` - Dieses Plugin kann bei Bedarf noch Kanal-Dublizierung (*Channel Dublication*), Sample-Wert Konvertierung (*Sample Value Conversion*) und *Resampling* vornehmen. ## Konfiguration Konfigurationsdateien werden genutzt um ALSA Geräte zu definieren. Ohne diese Definitionen wäre es nicht möglich, die Features von ALSA zu nutzen. Es muss jedoch nicht immer eine eigene geschrieben werden, da eine Standard Konfiguration bereits besteht. Falls jedoch Probleme auftreten oder spezielle Einstellungen vorgenommen werden sollten, wäre es sinnvoll, seine eigenen Geräte zu definieren. Für eigene Konfigurationen gibt es zwei Möglichkeiten: - Systemweite Konfigurationen über die `/etc/asoundrc` Datei - Benutzereigene Konfigurationen über die `~/.asoundrc` Datei Alle Dateien teilen das gleiche Format. Schauen wir uns ein Beispiel an: Angenommen wir wollen ein ALSA Gerät definieren welches das erste Hardware Gerät der ersten Sound Karte verwendet und nach Bedarf Formatierung durchführt. ```ALSA pcm.plug0 { type plug slave { pcm "hw:0,0" } } ``` Unser ALSA Gerät ist nun über den Namen *plug0* aufrufbar. Mit dem **plug** Plugin wird die Formatierung automatisch durchgeführt und an das *Slave*-Gerät, unser Output-Gerät, gesendet.[^9] ## Fazit ALSA ist ein sehr umfangreiches Framework mit viel Freiheit, für welche jedoch mit Komplexität bezahlt wird. Auf den ersten Blick kann ein solches Tool sehr erschreckend wirken. Für den Normalanwender ist eine tiefere Auseinandersetzung jedoch nicht nötig, da vieles bereits in der Installation enthalten ist. Personen die jedoch auf Probleme mit ihren Geräten stossen oder komplexere Systeme nutzen (z.B. Toningenieure) können sich mit ALSA austoben. [^1]: vgl. Advanced Linux Sound Architecture, in: Wikipedia, 26.08.2024, https://en.wikipedia.org/wiki/Advanced_Linux_Sound_Architecture [^2]: vgl. Introduction, in: ALSA-Project, 26.08.2024, https://www.alsa-project.org/main/index.php/Introduction [^3]: vgl. Advanced Linux Sound Architecture (ALSA) project, in: GitHub, 26.08.2024, https://github.com/alsa-project [^4]: vgl. ALSACTL, in: Arch Manual Pages, 26.08.2024, https://man.archlinux.org/man/alsactl.1 [^5]: vgl. AMIXER, in: Arch Manual Pages, 26.08.2024, https://man.archlinux.org/man/amixer.1 [^6]: vgl. ALSAMIXER, in: Arch Manual Pages, 26.08.2024, https://man.archlinux.org/man/alsamixer.1.en [^7]: vgl. apulse, in: GitHub, 26.08.2024, https://github.com/i-rinat/apulse [^8]: vgl. A User's Guide to ALSA, in: Linux Journal (archiviert durch archive.org), 26.08.2024, https://web.archive.org/web/20120109014951/http://www.linuxjournal.com/node/8234/print [^9]: vgl. A closer look at ALSA, in: Volker Schatz, 26.08.2024, https://www.volkerschatz.com/noise/alsa.html