Erweiterte Linux-Soundarchitektur - Advanced Linux Sound Architecture
|
Screenshot von Alsamixer 1.0.14
| |
| Originalautor(en) | Jaroslav Kysela |
|---|---|
| Entwickler | ALSA-Team |
| Erstveröffentlichung | 1998 |
| Stabile Version | 1.2.5.1 / 14. Juni 2021
|
| Geschrieben in | C |
| Betriebssystem | Linux |
| Typ | |
| Lizenz | |
| Webseite | alsa-Projekt |
Advanced Linux Sound Architecture ( ALSA ) ist ein Software-Framework und Teil des Linux-Kernels , das eine Anwendungsprogrammierschnittstelle (API) für Soundkarten- Gerätetreiber bereitstellt .
Einige der Ziele des ALSA-Projekts zu Beginn waren die automatische Konfiguration der Soundkarten-Hardware und die elegante Handhabung mehrerer Soundgeräte in einem System. ALSA wird unter GPL-2.0 oder höher und LGPL-2.1 oder höher veröffentlicht .
Unter Linux arbeiten Soundserver wie sndio , PulseAudio , JACK (Low Latency Professional-Grade Audio Editing and Mixing) und PipeWire sowie APIs höherer Ebene (zB OpenAL , SDL Audio , etc.) auf ALSA und seinem Sound Treiber für Kartengeräte. ALSA hat die ältere Linux-Portierung des Open Sound Systems (OSS) abgelöst.
Geschichte
Das Projekt zur Entwicklung von ALSA wurde von Jaroslav Kysela geleitet und basierte auf dem Linux-Gerätetreiber für die Gravis Ultrasound -Soundkarte. Es begann 1998 und wurde getrennt vom Linux-Kernel entwickelt, bis es 2002 in der 2.5-Entwicklungsserie (2.5.4–2.5.5) eingeführt wurde.
In der Version 2.6 hat es standardmäßig das vorherige System Open Sound System (OSS) ersetzt (obwohl eine Abwärtskompatibilitätsschicht vorhanden ist).
ALSA hat eine größere und komplexere API als OSS, daher kann es schwieriger sein, eine Anwendung zu entwickeln, die ALSA als Soundtechnologie verwendet. Obwohl ALSA so konfiguriert sein kann, dass es eine OSS-Emulationsschicht bereitstellt, ist diese Funktionalität in vielen Linux-Distributionen nicht mehr verfügbar oder nicht standardmäßig installiert.
Merkmale
ALSA wurde mit einigen Funktionen entwickelt, die zum Zeitpunkt seiner Konzeption nicht von OSS unterstützt wurden:
- Hardwarebasierte MIDI- Synthese.
- Hardware-Mixing mehrerer Kanäle.
- Vollduplex- Betrieb.
- Multiprozessorfreundliche, threadsichere Gerätetreiber.
Neben den Soundgerätetreibern bündelt ALSA eine Userspace- Bibliothek für Anwendungsentwickler, die Treiberfunktionen über eine Schnittstelle nutzen möchten, die höher ist als die Schnittstelle, die für die direkte Interaktion mit den Kerneltreibern bereitgestellt wird. Im Gegensatz zur Kernel-API, die versucht, die Fähigkeiten der Hardware direkt widerzuspiegeln, bietet die User-Space-Bibliothek von ALSA eine Abstraktion, die über verschiedene zugrunde liegende Hardwareelemente hinweg so standardisiert wie möglich bleibt. Dieses Ziel wird teilweise durch die Verwendung von Software-Plug-Ins erreicht ; zum Beispiel haben viele moderne Soundkarten oder eingebaute Soundchips keinen "Master Volume"-Regler. Stattdessen stellt die Userspace-Bibliothek für diese Geräte eine Software-Lautstärkesteuerung unter Verwendung des " softvol " -Plug - Ins bereit , und gewöhnliche Anwendungssoftware braucht sich nicht darum zu kümmern, ob eine solche Steuerung durch die zugrunde liegende Hardware oder die Software-Emulation einer solchen zugrunde liegenden Hardware implementiert wird.
Anwendungen
Neben dem internen Software-Framework des Linux-Kernels stellt das ALSA-Projekt auch die Befehlszeilen-Tools und Dienstprogramme alsactl, amixer, arecord/aplayund alsamixer, eine ncurses- basierte TUI bereit .
Es gibt auch GUIs, die von Drittanbietern programmiert wurden , wie GNOME-ALSAmixer (mit GTK ), Kmix, XFCE4-mixer, LXpanel, QasHctl, QasMixer, Pavucontrol, AconnectGUI, tapiir, polarbear, ALSAmixerGUI (mit FLTK ), ZynAddSubFX , Yoshimi , und noch mehr.
Konzepte
Dieser Abschnitt bietet einen Überblick über die grundlegenden Konzepte von ALSA.
Normalerweise unterstützt ALSA bis zu acht Karten , die von 0 bis 7 nummeriert sind; jede Karte ist ein physisches oder logisches Kernel-Gerät, das zur Eingabe und Ausgabe fähig ist. Darüber hinaus kann jede Karte auch über ihre ID adressiert werden , die eine erklärende Zeichenfolge wie " Headset " oder " ICH9 " ist.
Eine Karte hat Geräte , die mit 0 beginnend nummeriert sind; ein Gerät kann vom Wiedergabetyp sein , was bedeutet, dass es Ton vom Computer ausgibt, oder ein anderer Typ wie Capture , Control , Timer oder Sequencer ; Gerätenummer 0 wird standardmäßig verwendet, wenn kein bestimmtes Gerät angegeben ist.
Ein Gerät kann Untergeräte haben , die bei 0 beginnend nummeriert sind; ein Untergerät stellt einen relevanten Sound-Endpunkt für das Gerät dar, z. B. ein Lautsprecherpaar. Wenn das Subdevice nicht angegeben ist oder wenn die Subdevice-Nummer -1 angegeben ist, wird jedes verfügbare Subdevice verwendet.
Die Schnittstelle einer Karte ist eine Beschreibung eines ALSA-Protokolls für den Zugriff auf die Karte; mögliche Schnittstellen sind: hw , plughw , default und plug:dmix . Die hw- Schnittstelle bietet direkten Zugriff auf das Kernel-Gerät, aber keine Unterstützung für Software-Mixing oder Stream-Anpassung. Die plughw und Standard ermöglichen Tonausgabe , wo die hw - Schnittstelle einen Fehler erzeugen würde.
Eine Anwendung beschreibt normalerweise die Tonausgabe, indem sie alle oben genannten Spezifikationen in einer Gerätezeichenfolge kombiniert , die eine der folgenden Formen aufweist (wobei die Groß-/Kleinschreibung beachtet wird ):
- Schnittstelle: Karte, Gerät, Untergerät
- Schnittstelle:KARTE=1,ABW=3,SUBDEV=2 .
Ein ALSA- Stream ist ein Datenfluss, der Ton repräsentiert; Das gängigste Stream-Format ist PCM , das so produziert werden muss, dass es den Eigenschaften oder Parametern der Hardware entspricht, einschließlich:
- Abtastrate : oft 44,1 kHz bei Heimstereoanlagen oder 48 kHz bei Heimkinos, jedoch bis zu 88,2 kHz, 96 kHz oder sogar 192 kHz für HiFi-Audioproduktion oder -Wiedergabe.
- Sample-Breite : gemessen in einer bestimmten Anzahl von Bits pro Sample (z. B. 8, 16, 24 oder 32 Bits/Sample)
- Beispielcodierung : wie Endianness
- Anzahl der Kanäle : 1 für Mono, 2 für Stereo oder 6 für AC-3 / IEC958
Implementierungen
Die ALSA-System-on-Chip-(ASoC)-Schicht zielt darauf ab, ALSA auf eingebetteten Systemen , die ein System-on-Chip- (SoC)-Design verwenden , besser zu unterstützen .
Siehe auch
Verweise
Externe Links
- Offizielle Website
-
Polizist, Markus. "Alsa WIKI" . AlsaOpensrcOrg . Archiviert vom Original am 29. März 2002 . Abgerufen am 18. Juli 2021 .
Einige der Gründe, warum diese Site weiterhin existiert, sind, dass niemand von der offiziellen ALSA-Site jemals etwas zu dieser Site beigetragen hat (bevor die offizielle existierte, ist diese einige Jahre älter als das offizielle Wiki), niemand hat offiziell oder offiziell eine Zusammenführung vorgeschlagen, niemand sonst hat ernsthaftes Interesse daran gezeigt, sie zusammenzuführen, und vor allem gibt es eine beträchtliche Anzahl von Offsite-Referern und Google-Treffern, die direkt auf diese Site gelangen, weil sie schon so lange hier ist.
| Benutzermodus | Benutzeranwendungen | bash , LibreOffice , GIMP , Blender , 0 AD , Mozilla Firefox , ... | ||||
|---|---|---|---|---|---|---|
| Systemkomponenten |
Dämonen : systemd , runit , udevd , polkitd , sshd , smbd ... |
Fenstermanager : X11 , Wayland , SurfaceFlinger (Android) |
Grafik : Mesa , AMD Catalyst , ... |
Andere Bibliotheken: GTK , Qt , EFL , SDL , SFML , FLTK , GNUstep , ... |
||
| C-Standardbibliothek |
fopen, execv, malloc, memcpy, localtime, pthread_create... (bis zu 2000 Subroutinen ) glibc zielt darauf ab, schnell zu sein, musl und uClibc zielen auf eingebettete Systeme ab, bionisch geschrieben für Android usw. Alle zielen darauf ab, POSIX / SUS- kompatibel zu sein. |
|||||
| Kernel-Modus | Linux Kernel |
stat, splice, dup, read, open, ioctl, write, mmap, close, exit, etc. (ca. 380 Systemaufrufe) Das Linux-Kernel System Call Interface (SCI, soll POSIX / SUS- kompatibel sein) |
||||
|
Prozessplanungs- Subsystem |
IPC- Subsystem |
Speicherverwaltungs- Subsystem |
Subsystem für virtuelle Dateien |
Netzwerk- Subsystem |
||
| Andere Komponenten: ALSA , DRI , evdev , LVM , Device Mapper , Linux Network Scheduler , Netfilter Linux Security Modules : SELinux , TOMOYO , AppArmor , Smack |
||||||
| Hardware ( CPU , Hauptspeicher , Datenträger usw.) | ||||||