Advanced Linux Sound Architecture

Linux-Soundarchitektur

Die Advanced Linux Sound Architecture (ALSA) ist eine freie Soundarchitektur für Linux-Systeme, die über (PCM-)Audio- und MIDI-Funktionalität verfügt. ALSA steht unter der GPL (Treiber & Hilfsprogramme) sowie der LGPL (Anwendungsbibliotheken).

Advanced Linux Sound Architecture


AlsaMixer 1.0.14 unter Ubuntu 7.10
Basisdaten

Hauptentwickler Das ALSA-Team[1]
Entwickler Jaroslav Kysela
Erscheinungsjahr 4. November 1998
Aktuelle Version 1.2.13[2]
(12. November 2024)
Betriebssystem Linux
Programmier­sprache C[3]
Kategorie Sound-Treiber
Lizenz GPL und LGPL
deutschsprachig nein
alsa-project.org

ALSA besteht aus Linux-Kernelmodulen, die verschiedene Kerneltreiber für Soundkarten bereitstellen. Unterschiedliche Aufgaben (allg. Sound; Midi, Wave, Synthesizer; Hardware) werden durch einzelne Gerätetreiber im Soundstack abstrahiert. Wiedergabe von Dolby Digital ist möglich.[4] Die Ziele des ALSA-Projektes waren insbesondere die Unterstützung einer automatischen Konfiguration der Soundkarten und eine elegante Handhabung mehrerer Soundgeräte in einem System. Diese Ziele wurden größtenteils erreicht. Verschiedene Frameworks wie JACK und PulseAudio nutzen ALSA für Audiobearbeitung und -abmischung auf professionellem Niveau mit niedriger Latenz.

Die wenig gepflegten Treiber für die OSS3-Architektur werden in aktuellen Kernel-Versionen zugunsten von ALSA als deprecated (veraltet) markiert.

Das System wurde auch für OS/2-basierte Betriebssysteme (eComStation und ArcaOS) portiert.[5]

Geschichte

Bearbeiten

Das Projekt entstand August 1998 aus einem Treiber für die Soundkarte UltraSound des Herstellers Gravis unter der Leitung von Jaroslav Kysela. Kysela ärgerte sich über den schlechten Treiber des Open Sound System für seine Karte und schrieb einen Ersatz dafür, den auch andere Besitzer der Karte begeistert nutzten.[6]

ALSA wurde separat vom Linux-Kernel entwickelt, bis es 2002 in den Entwicklungszweig der Kernelversion 2.5.5 aufgenommen wurde.[7][8] Es ist seit der Kernelversion 2.6 das standardmäßige Soundsystem.

Mit ALSA-Version 1.0.17 wurde das Versionskontrollsystem von Mercurial auf Git umgestellt und viele neue Treiber für System-on-a-Chip hinzugefügt. Außerdem kam eine Unterstützung für High-End Audiokarten und I²C hinzu.[9]

Eigenschaften

Bearbeiten

Verwenden Programme die ALSA Userspace Library, ist softwareseitiges Abmischen durch ALSAs PCM-Plugin-Schnittstelle möglich, zum Beispiel durch das Dmix Plugin. Das bedeutet, dass verschiedene Soundstreams, zum Beispiel von verschiedenen Programmen, zur gleichen Zeit wiedergegeben werden können, ohne dass ein Soundserver wie PulseAudio, ESD oder aRts, verwendet werden muss.

ALSA und besonders die Treiber für Soundhardware sind voll modularisiert. ALSA benötigt eigene Treiber für die anzusprechenden Geräte, weshalb OSS-Treiber nicht weiter verwendet werden können. Von Endanwendergeräten bis zu professionellen Mehrkanalkarten wird eine Vielzahl von Geräten unterstützt.

Für Entwickler relevant ist, dass ALSA vollständig Multithreading- und SMP-fähig ist. Als Programmierschnittstellen dienen die ALSA-API, die eine Schnittstelle zum ALSA-Kernelmodul bereitstellt und die ALSA Userspace Library, libasound, die über die volle Funktionalität der ALSA-API verfügt, aber die Verwendbarkeit wesentlich verbessert. Die Verwendung der Userspace Library ist auch aus Gründen des softwareseitigen Abmischens vorteilhafter.

ALSA enthält eine Emulation, die libaoss-Bibliothek, für OSS-Programme, um diese weiterhin nutzen zu können.[10]

Es unterstützt unbegrenzt viele Kanäle, den unbeschränkten Full-Duplex-Betrieb und enthält ein Loopback-Device.[6]

Funktionsweise

Bearbeiten

Die Treiber für ALSA befinden sich ab Version 2.6 des Linux-Kernel direkt in ihm. Sie selbst sind in mehrere Ebenen unterteilt. Die oberste ist der ALSA-Soundkernel, der den Zugriff auf die mittlere Ebene ermöglicht. In der mittleren befinden sich die Hardwareschnittstellen wie zum Beispiel Mixer, Sequencer, MIDI und hardwareabhängige Komponenten. Die untere Ebene enthält den karten- und chipspezifischen Code. Sofern vorhanden, befinden sich zwischen mittlerer und unterer Ebene die Module zur OSS-Kompatibilität.[6]

Die Schnittstelle zwischen den Treibern und den Anwendungen bilden dann die Bibliotheken im alsa-lib-Paket. Damit mehrere Programme gleichzeitig die Soundkarte verwenden können, kommt ein sogenannter Soundserver zum Einsatz.

Konzepte

Bearbeiten

Dieser Absatz liefert eine Übersicht über die Grundkonzepte von ALSA.[11][12][13]

Üblicherweise unterstützt ALSA bis zu acht cards, die mit 0 bis 7 nummeriert werden; jedes card ist entweder ein physisches oder ein logisches Kernel-Gerät, welches Klang aufnehmen, ausgeben oder kontrollieren kann. Jedes card kann über seine String-ID adressiert werden, zum Beispiel „Headset“ oder „ICH9“.

Ein card besitzt devices, deren Nummerierung startet ebenfalls mit 0; Es gibt mehrere device-Typen/-Arten, zum Beispiel playback, capture, control, timer oder sequencer. Als Default wird 0 angenommen.

Ein device kann subdevices besitzen, deren Nummerierung startet mit 0; ein subdevice repräsentiert irgendeinen relevanten Klang-Endpunkt für dieses device, zum Beispiel ein Lautsprecher-Paar. Wenn kein bestimmter subdevice spezifiziert wird, oder die Nummer -1, werden alle verfügbaren subddevices angesteuert.

Das interface einer card ist die Beschreibung eines ALSA-Protokols für den Zugriff darauf; Verfügbare interfaces sind: hw, plughw, default, und plug:dmix. Die hw-Schnittstelle erlaubt den direkten Zugriff auf das Kernel-Gerät, ohne software mixing oder stream adaptation. Die Schnittstellen plughw und default erlauben die Ausgabe von Klang in Fällen, wo die hw-Schnittstelle eine Fehlermeldung produziert.

Eine Applikation spezifiziert die Ausgabe von Klang, indem die oben beschrieben Parameter zusammen in ein einem device string übergeben werden. Es hat eine der Folgenden Syntax (sie sind case sensitive):

  • interface:card,device,subdevice
  • interface:CARD=1,DEV=3,SUBDEV=2.

Ein ALSA stream ist ein Datenfluss, der Klang repräsentiert; das häufigste Format ist PCM. Der erzeugte stream muss genau zur Hardware passen, bezüglich:

  • sampling rate: zum Beispiel 44,1 kHz oder 48 kHz
  • sample width: zum Beispiel 8, 16, 24, or 32 bits/sample
  • sample encoding
  • number of channels: 1 für Mono, 2 für Stereo oder 6 für AC-3/IEC958

ALSA benötigt auch einen Puffer-Parameter; dieser bestimmt wie häufig die CPU angesprochen werden muss, um neue Klang-Daten zu liefern.

Werkzeuge

Bearbeiten
 
Alsamixer mit Einstellungen für Lautstärke und einzelne Kanäle

Das ALSA Projekt liefert viele Werkzeuge zur Konfiguration des Soundsystems mit. Dazu gehören viele Einstellungsprogramme zur Einstellung von ALSA und der verwendeten Soundkarte, wie alsaconf als auch für den Ton wie alsamixer und amixer.

Außerdem sind auch einfache Abspielprogramme für WAVE- und MIDI-Dateien vorhanden.[14]

Bearbeiten

Einzelnachweise

Bearbeiten
  1. alsa-project.org – Alsa Team
  2. Main Page News. 12. November 2024 (abgerufen am 13. November 2024).
  3. Ohloh Analysis Summary – ALSA (Memento des Originals vom 20. Dezember 2013 im Internet Archive)  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/www.ohloh.net
  4. AC3-AVI-Testfile. (RAR; 949 KB) Archiviert vom Original (nicht mehr online verfügbar) am 4. Oktober 2007; abgerufen am 20. Februar 2021.
  5. https://www.arcanoae.com/wiki/uniaud/
  6. a b c Julia Wunner: Neue Klänge. In: heise.de. 16. September 1999, abgerufen am 3. Februar 2024.
  7. Release notes for v2.5.5
  8. http://www.pro-linux.de/NB3/news/1/3990/alsa-ersetzt-oss.html
  9. http://www.linux-community.de/Internal/Nachrichten/Alsa-stark-ueberarbeitet
  10. http://www.linux-user.de/ausgabe/2005/06/038-sound-frmwks/index.html
  11. Jeff Tranter: Introduction to Sound Programming with ALSA. In: Linux Journal. Oktober 2004, abgerufen am 8. Januar 2012.
  12. Dave Phillips: A User’s Guide to ALSA. In: Linux Journal. Juni 2005, archiviert vom Original (nicht mehr online verfügbar) am 9. Januar 2012; abgerufen am 14. August 2019.
  13. Alsa C library Doxygen documentation. Oktober 2007, abgerufen am 8. Januar 2012.
  14. Alsa-utils (Memento vom 6. März 2013 im Internet Archive)