Audiokonfiguration

Aus DebianforumWiki
Zur Navigation springen Zur Suche springen
Wiki ‹ Multimedia und Spiele ‹ Audiokonfiguration



Baustelle.png Baustelle: Dieser Artikel ist eine Baustelle. Das heißt, jemand hat sich dieses Artikels angenommen und überarbeitet ihn gerade.


Diskussion 129242

Einleitung

Soundsystem

Die Advanced Linux Sound Architecture (ALSA) ist das zugrundeliegende Soundsystem von Linux. Die Treiber stehen als Bestandteil des Kernels bzw. als Kernelmodule zur Verfügung und zusätzlich bringt ALSA in weiteren Paketen Konfigurationsdateien, Skripte, Plugins und Werkzeuge mit. Außerdem ist ALSA der Name der Softwareschnittstelle, über die Anwendungen Audiosignale wiedergeben und aufnehmen können.

Desweiteren gibt es den Nachfolger des Verläufers von ALSA ☺. Vor ALSA war OSS der Standard und ist das auf vielen anderen unix-ähnlichen Systemen immer noch. Weil OSS aber unter einer proprietären Lizenz weiterentwickelt wurde, wurde als Nachfolger ALSA entwickelt. Die aktuelle Version 4.x von OSS (OSS4) ist aber wieder freie Software und steht in Debian in Form einer ganzen Reihe von Paketen als Alternative zu ALSA bereit.

Soundserver

Obwohl die Audiosysteme mittlerweile Möglichkeiten bieten, die Ausgaben mehrerer Anwendungen zu mischen, damit der Ton mehrer Anwendungen gleichzeitig ausgegeben werden kann, gibt es eine ganze Reihe von Soundservern, die ebenfalls diese Aufgabe übernehmen.

Etabliert hat sich Pulseaudio, das als Hardwareabstraktionsschicht dafür sorgt, dass sich der Anwender im Idealfall gar nicht mit ALSA und dessen Konfiguration beschäftigen muss und das einige weitere Funktionen bietet. Für Audio über Bluetoothgeräte ist Pulseaudio sogar unerlässlich, weil aktuelle Versionen von ALSA selbst gar keine Unterstützung von Bluetooth-Audiohardware mehr bieten.

Als weiteres Beispiel für einen Soundserver sei hier noch jack genannt, das mit seinen niedrigen Latenzen besonders auf Musiker abzielt.

Konfiguration

ALSA

grundlegende Konfiguration

Mit

user@debian:~$ aplay -l

verschafft man sich einen Überblick über die von ALSA erkannten Soundkarten.

Bei einem Onboardsound kann das zum Beispiel so aussehen

**** Liste der Hardware-Geräte (PLAYBACK) ****
Karte 0: HDMI [HDA Intel HDMI], Gerät 3: HDMI 0 [HDMI 0]
  Sub-Geräte: 0/1
  Sub-Gerät #0: subdevice #0
Karte 0: HDMI [HDA Intel HDMI], Gerät 7: HDMI 1 [HDMI 1]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0
Karte 0: HDMI [HDA Intel HDMI], Gerät 8: HDMI 2 [HDMI 2]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0
Karte 1: PCH [HDA Intel PCH], Gerät 0: ALC892 Analog [ALC892 Analog]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0
Karte 1: PCH [HDA Intel PCH], Gerät 1: ALC892 Digital [ALC892 Digital]
  Sub-Geräte: 0/1
  Sub-Gerät #0: subdevice #0

Hier sieht man zwei Soundkarten

  • Karte 0 namens HDMI mit drei Geräten und
  • Karte 1 namens PCH mit zwei Geräten

Mit den unterschiedlichen Geräten kann man unterschiedliche Teile der Soundkarte ansprechen, die erste Karte stellt also für jeden HDMI- (und DVI- oder DisplayPort-) Anschluss ein Gerät zur Verfügung während die zweite Soundkarte den "normalen" Teil des Onboardsounds darstellt und ein Gerät für die analogen Aus- und Eingänge, wie Kopfhörerausgang, Line-Out, Mikrofoneingang, Line-In und ein weiteres für die digitalen Aus- und Eingänge, wie optische und elektrische S/PDIF-Aus- und Eingänge (TOSlink, "Coax") bereitstellt.

Um also nun die standardmäßig zu verwendende Soundkarte (und das Gerät) festzulegen, legt man eine systemweit gültige »/etc/asound.conf« oder eine nur für den Benutzer zuständige »~/.asoundrc« an:

defaults.pcm.!card 1
defaults.pcm.!device 0
defaults.ctl.!card 1

Die ersten beiden Zeilen legen Karte und Gerät für Wiedergabe und Aufnahme fest, in diesem Beispiel wäre die zweite Karte (card 1) und das erste Gerät (device 0) also der Analogteil des Onboardsounds. Die dritte Zeile legt auch noch das Kontrollgerät fest, über das man zum Beispiel die Lautstärke regeln kann — hier wird nicht zwischen den unterschiedlichen Geräten unterschieden.

Meistens ist es aber besser die Namen der Soundkarten statt der Nummern zu verwenden, weil sich die Nummerierung ändern kann. Wenn außerdem das erste Gerät (device 0) verwendet werden soll, kann man die Angabe des Geräts weglassen. Damit vereinfachen sich die Zeilen zu

defaults.pcm.!card PCH
defaults.ctl.!card PCH

Mit diesen Zeilen behält man die Standardkonfiguration von ALSA weitgehend bei. Die Audiosignale durchlaufen also, wenn in der Anwendunge nichts anderen als das Defaultgerät ausgewählt wird, das plug-Plugin von ALSA, das falls notwendig Konvertierungen vornimmt und das dmix-Plugin, das die Audioausgaben mehrerer Anwendungen mischt.

Neben den Angaben wie

card x
device y

gibt man Geräte und Soundkarte oft auch in der Form hw:x,y an.

Gegebenenfalls muss man auch noch dafür sorgen, dass die relevanten Lautstärkeregler nicht auf 0 stehen oder stumm geschaltet sind. Einstellen lassen sie sich zB. mit

user@debian:~$ alsamixer

aus dem Paket Debianpackage.png alsa-utils oder mit grafischen Mixern wie Debianpackage.png qasmixer.

Für den analogen Ausgang können etwa die Regler PCM, Front und Master wichtig sein. Das Startskript bzw. die systemd-Units aus demselben Paket sorgen in weiterer Folge dafür, dass die eingestellten Werte beim Herunterfahren gespeichert und beim Systemstart wieder geladen werden.

Resampling

Manchmal muss, um die Ausgaben mehrerer Anwendungen mischen zu können oder auch um Audiomaterial wiederzugeben dessen Abtastrate von Hardware und Treiber nicht unterstützt werden, das Audiosignal auf eine andere Abtastrate umgerechnet werden. Standardmäßig verwendet das dmix-Plugin eine Abtastrate von 48 kHz, das Umrechnen der Abtastrate (Resampling) anderer Formate erledigt ALSAs plug-Plugin. Dem Autor dieser Zeilen ist unbekannt welcher Algorithmus dabei aktuell standardmäßig zum Einsatz kommt, aber zumindest in älteren ALSA-Versionen war es eine simple lineare Interpolation, die sich durchaus negativ auf den Klang auswirken kann. Im Paket Debianpackage.png libasound2-plugins stehen weitere hochwertige Algorithmen zum Resampling bereit. Mit einer zusätzlichen Zeile in der »/etc/asound.conf« oder »~/.asoundrc« kann man einen davon als Standard festlegen:

defaults.pcm.rate_converter "speexrate_best"

OSS-Anwendungen

Auch Anwendungen, die mit ALSA nichts anfangen können und noch für OSS geschrieben wurden lassen sich mit ALSA verwenden. Dafür gibt es zwei Möglichkeiten

aoss Wrapper-Skript

Die einfachste Möglichkeit besteht in der Installation des Pakets Debianpackage.png alsa-oss, das das Wrapperskript aoss mitbringt. Damit lassen sich Anwendungen starten und verwenden als wären ALSA-Anwendungen, hier am Beispiel von Debianpackage.png gwc

user@debian:~$ aoss gnome_wave_cleaner

Welche OSS Geräte (»/dev/dsp0«, »/dev/dsp1«,…) zur Verfügung gestellt werden und auf welche realen ALSA-Geräte zurückgegriffen wird, kann man in der »/etc/asound.conf« oder der »~/.asoundrc« festlegen, indem man die Geräte pcm.dsp0, pcm.dsp1, usw. definiert. Darüber hinaus legt man mit ctl.mixer0 fest auf welches ALSA-Kontrollgerät (welchen Mixer) der Mixer der OSS-Emulation zurückgreifen soll - das entspricht also der Gerätedatei »/dev/mixer«. Ein Beispiel

…
pcm.dsp0 {
    type plug
    slave.pcm "dmixer"
}

ctl.mixer0 {
    type hw
    card PCH
}
…

Nicht verwirren lassen darf man sich von der Tatsache, dass bei dieser Form der Emulation die OSS-Gerätedateien wie »/dev/dsp0« niemals angelegt werden, sondern der Anwendung nur durch das Wrapper-Skript vorgegaukelt werden.

OSS Emulation in Form von Kernelmodulen

Eine weitere Möglichkeit besteht in den Kernelmodulen

  • snd-mixer-oss und
  • snd-pcm-oss,

die unter ALSA, die von OSS gewohnten Gerätedateien zur Verfügung stellen können. Dann werden »/dev/dsp0« und »/dev/adsp0« erstellt und mit den ALSA-Geräten "hw:0,0" und "hw:0,1" verbunden. Mit Kerneloptionen lassen sich die zu verwendenden Geräte anpassen. So würde zum Beispiel die Zeile

options snd-pcm-oss dsp_map=1,0 adsp_map=0,2

in einer beliebigen .conf-Datei in »/etc/modprobe.d/« der Gerätedatei »/dev/dsp0« das ALSA-Gerät "hw:1,0" (also dem ersten Gerät der zweiten Soundkarte) und »/dev/adsp0« dem dritten Gerät der ersten Soundkarte ("hw:0,2") zuordnen.

direkte Wiedergabe über die Soundkarte

Wie bereits geschrieben durchlaufen die Audiosignale normalerweise mehrere Plugins, aber man kann den Weg, den das Audiosignal nimmt auch komplett selbst bestimmen. Ein einfaches Beispiel wäre die Wiedergabe direkt über die Soundkarte, wobei man dann in Kauf nehmen muss, dass man nur Audioformate wiedergeben kann, die Hardware und Treiber unterstützen — bezogen auf Zahl der Kanäle, Abtastrate und Sampleformat. Die passenden zwei Absätze, wieder in der »/etc/asound.conf« oder »~/.asoundrc«, könnten im hier verwendeten Beispiel also

pcm.!default { 
	type hw
	card PCH
	device 0
}

ctl.!default {
	type hw
	card PCH
}

lauten. (pcm.)default ist ein besonderer Name. Wenn nicht explizit etwas anderes angegeben wird, dann laufen Wiedergabe und Aufnahme über dieses pcm.default. Das ! sorgt nur dafür, dass pcm.default neu definiert, selbst wenn es bereits in einer anderen Konfigurationsdatei definiert wurde.

Es ist immer eine gute Idee, das von manchen Anwendungen benötigte gleichnamige Kontrollgerät zu definieren, wie hier also ctl.default im zweiten Absatz.

dmix-Plugin (Softwaremixing)

dmix ist normalerweise bereits aktiv, aber es kann Gründe geben, aus denen man es selbst konfigurieren will, zum Beispiel damit das Softwaremixing mit der bei Musik vorherrschenden Samplerate von 44100 Hz, die von der Audio-CD stammt, stattfindet. Das erreicht man mit zwei einfachen Abschnitten, mit denen man das Signal durch die ALSA-Plugins dirigiert.

pcm.dmixer {
	type dmix
	ipc_key 1234
	slave.pcm "hw:PCH,0"
	slave.rate 44100
}

pcm.!default { 
	type plug
	slave.pcm "dmixer"
}
ctl.!default {
	type hw
	card PCH
}

Hier kommt der Ton von der Anwendung zuerst zu pcm.default, das lediglich ein plug-Plugin ist, das Konvertierungen durchführt falls notwendig, in dem Fall also zB unter anderem alles auf 44100 Hz Abtastrate umrechnet. Das Ergebnis kommt zu pcm.dmixer, der als dmix-Plugin die Ausgaben mehrer Anwendungen mischt und schließlich zur Soundkarte, hier hw:PCH,0 (hw:PCH wäre gleichwertig) weiterleitet. Der ipc_key in pcm.dmixer ist lediglich eine beliebige eindeutige ID. Verwendet man also mehrere dmix-Plugins, was durchaus nützlich sein kann, dann muss man denen unterschiedliche ipc_keys vergeben.

Lautstärkeregelung bei digitalen Ausgängen nachrüsten

Digitale Ausgänge wie HDMI, DVI, DisplayPort und elektrische, wie optische S/PDIF-Ausgänge verfügen meistens über keinen eigenen Lautstärkeregler. Hier sieht man zB in alsamixer, dass zwar für jeden von 3 Ausgängen ein (Stumm-)Schalter vorhanden ist, aber kein einziger Lautstärkeregler

┌─────────────────────── AlsaMixer v1.0.28 ────────────────────────┐
│   Gerät: HDA Intel HDMI                F1:  Hilfe                │
│    Chip: Intel Haswell HDMI            F2:  System-Informationen │
│ Ansicht: Wiedergabe                    F6:  Soundkarte auswählen │
│ Element: S/PDIF                        Esc: Beenden              │
│                                                                  │
│                                                                  │
│                                                                  │
│                                                                  │
│                                                                  │
│                                                                  │
│                                                                  │
│                                                                  │
│                                                                  │
│                                                                  │
│                      ┌──┐     ┌──┐     ┌──┐                      │
│                      │OO│     │OO│     │OO│                      │
│                      └──┘     └──┘     └──┘                      │
│                   < S/PDIF >S/PDIF 1 S/PDIF 2                    │
│                                                                  │
│                                                                  │
│                                                                  │
│                                                                  │
│                                                                  │
│                                                                  │
│                                                                  │
│                                                                  │
│                                                                  │
└──────────────────────────────────────────────────────────────────┘


Ein Lautstärkeregler lässt sich aber mithilfe des softvol-Plugins nachrüsten.

pcm.!default {
    type plug
    slave.pcm "softvol"
}
ctl.!default {
    type hw
    card HDMI
}

pcm.softvol {
    type softvol
    slave.pcm "dmixer"
    control.name Master
    control.card HDMI
}
ctl.softvol {
    type hw
    card HDMI
}

pcm.dmixer {
    type dmix
    ipc_key 1024
    slave {
        pcm "hw:HDMI,3"
        period_time 0
        period_size 1024
        buffer_size 8192
        rate 48000
    }
}

In pcm.softvol muss man zumindest drei Angaben machen

control.name Die Bezeichnung, die der definierte Lautstärkeregler tragen soll.
control.card Die Soundkarte, der der neue Regler hinzugefügt wird.
slave.pcm Wie in vorigen Beispielen, das „Gerät“ an das der Ton weitergeleitet werden soll

gleichzeitige Wiedergabe und Aufnahme mit mehreren Anwendungen

Analog zu dmix für die Wiedergabe existiert auch ein Plugin, das die gleichzeitige Aufnahme mit mehreren Anwendungen erlaube. Mit Hilfe dieses dsnoop-Plugins kann man nun ein Audiogerät definieren, sowohl die gleichzeitige Wiedergabe wie auch Aufnahme erlaubt

pcm.meine_hardware {
    type hw
    card PCH
    device 0
}

pcm.dmixer {
    type dmix
    ipc_key 1024
    slave.pcm "meine_hardware"
}

pcm.dsnooper {
    type dsnoop
    ipc_key 1536
    slave.pcm "meine_hardware"
}

pcm.duplex {
    type asym
    playback.pcm "dmixer"
    capture.pcm "dsnooper"
}

pcm.!default {
    type plug
    slave.pcm "duplex"
}
ctl.!default {
    type plug
    slave.pcm "meine_hardware"
}

pcm.meine_hardware verweist hier lediglich auf die zu verwendende Soundkarte und wird in den folgenden Abschnitten verwendet. pcm.default erledigt wieder die notwendigen Konvertierungen, dann geht es mit pcm.duplex weiter. Dieses asym-Plugin kombiniert zwei unterschiedliche weitere Geräte für die Wiedergabe und Aufnahme, in diesem Fall

  • das dsnoop-Plugin (pcm.dsnooper) für die Aufnahme und
  • das dmix-Plugin (pcm.dmixer) für die Wiedergabe.

Die beiden verweisen wiederum auf das eingangs erwähnte pcm.meine_hardware.

Audioausgabe aufnehmen

Dazu ist eine virtuelle Soundkarte in Form der sogenannten Loopback-Soundkarte notwendig. Die erscheint automatisch, wenn das entsprechende Kernelmodul snd-aloop geladen wird

root@debian:~# modprobe snd-aloop

und sie heißt Loopback. Das folgende Konfigurationsbeispiel leitet den Ton, der über ALSAs Vorgabeausgabeweg läuft, sowohl über plug und dmix an die reale Soundkarte weiter, wie auch an die virtuelle Soundkarte.

Die virtuelle Soundkarte verfügt aber über zwei Geräte und die Ausgabe an das erste Gerät dieser Soundkarte erscheint als Eingangssignal am Aufnahmeteil des zweiten Geräts (und umgekehrt).

pcm.!default {
    type plug
    slave.pcm "verdoppeln"
}

pcm.verdoppeln {
     type plug
     slave.pcm {
         type multi
         slaves {
             a { pcm "dmix:PCH" channels 2 }
             b { pcm "dmix:Loopback,0" channels 2 }
         }
         bindings [
             { slave a channel 0 }
             { slave a channel 1 }
             { slave b channel 0 }
             { slave b channel 1 }
         ]
     }
     ttable [
         [ 1 0 1 0 ]
         [ 0 1 0 1 ]
     ]
}

Die Aufnahme kann dann vom Gerät "hw:Loopback,1" zum Beispiel so erfolgen

user@debian:~$ arecord -c 2 -r 48000 -f S16_LE -D plughw:Loopback,1 meine_Aufnahme.wav

der Equalizer von ALSA

Im Paket Debianpackage.png libasound2-plugin-equal steht ein Equalizer in Form eines ALSA-Plugins zur Verfügung. Will man auch weiterhin aufnehmen können, dann könnte man das Plugin etwa auf diese Art in die Konfiguration einbauen

pcm.meine_hardware {
    type hw
    card PCH
    device 0
}

ctl.equalizer {
    type equal
}
pcm.equalizer {
    type equal
    slave.pcm "dmixer"
}

pcm.dmixer {
    type dmix
    ipc_key 1024
    slave.pcm "meine_hardware"
}

pcm.duplex {
    type asym
    playback.pcm "equalizer"
    capture.pcm "meine_hardware"
}

pcm.!default {
    type plug
    slave.pcm "duplex"
}
ctl.!default {
    type plug
    slave.pcm "meine_hardware"
}

Danach sollte der Equalizer in alsamixer über <F6> oder mit dem Aufruf

user@debian:~$ alsamixer -D equalizer

zugänglich sein und sich auch in grafischen Mixern wie Debianpackage.png qasmixer bedienen lassen.

Sichtbarkeit selbst definierter Geräte in Anwendungen

Bei einigen Anwendungen, zum Beispiel KDE/Phonon stößt man darauf, dass selbst definierte Geräte in den Einstellungen, bei KDE/Phonon zum Beispiel in den Multimediaeinstellungen, nicht zur Auswahl stehen. Man kann den eigenen Definitionen aber einen Abschnitt "hint { … }" hinzufügen, mit dem man diesen „Geräten“ einen Namen gibt und sie so sichtbar macht. Als Beispiel hier noch einmal die Konfigurationsdatei aus dem Abschnitt "Lautstärkeregelung bei digitalen Ausgängen nachrüsten" und diesmal mit zwei hint-Abschnitten:

pcm.!default {
    type plug
    slave.pcm "softvol"
}
ctl.!default {
    type hw
    card HDMI
}

pcm.softvol {
    type softvol
    slave.pcm "dmixer"
    control.name Master
    control.card HDMI
    hint {
        show on
        description "HDMI (softvol)"
    }
}
ctl.softvol {
    type hw
    card HDMI
}

pcm.dmixer {
    type dmix
    ipc_key 1024
    slave {
        pcm "hw:HDMI,3"
        period_time 0
        period_size 1024
        buffer_size 8192
        rate 48000
    }
    hint {
        show on
        description "HDMI (dmixer)"
    }
}

Damit sollten unter KDE zwei selbst definierte Geräte sichtbar werden

  • das softwarelautstärkegeregelte pcm.softvol unter dem Namen "HDMI (softvol)" und
  • pcm.dmixer, mit dem man den selbst erstellen HDMI-Lautstärkeregler umgeht, unter dem Namen "HDMI (dmixer)".

weitere Plugins

Eine nähere Beschreibung der zur Verfügung stehenden Plugins und deren Konfiguration findet man im ALSA-Wiki, zum Beispiel hier für das dmix-Plugin.

Eine Liste der bereits definierten "Geräte" zeigt

user@debian:~$ aplay -L

Im Gegensatz zum zu Beginn erwähnten

user@debian:~$ aplay -l

das Informationen über die Hardware anzeigt.

Pulseaudio

Grundsätzliches

Wie bereits angedeutet kann man mit Debianpackage.png pulseaudio im Normalfall das zugrundeliegende Soundsystems (meist ALSA) weitgehend ignorieren und alles mit Pulseaudio erledigen. Dazu bieten gängige Desktopumgebungen wie Gnome und KDE Konfigurationsdialoge.

Wie unter ALSA stehen die erkannten Soundkarten zur Auswahl, aber dass eine Soundkarte mitunter mehrere Geräte bietet, verbirgt Pulseaudio weitgehend vor dem Benutzer. Für alle erkannten Soundkarten kann man in Form von Profilen einzeln festlegen welche Ein- und Ausgänge auf welche Art und Weise verwendet werden sollen. Das kann auf verschiedene Arten passieren, etwa auf der Kommandozeile, in den Einstellungsdialogen der verwendeten Desktopumgebung oder mit einem der grafischen Konfigurationstools für Pulseaudio.

Hier soll dafür Debianpackage.png pavucontrol zum Einsatz kommen. Dort können unter Konfiguration abhängig von den Fähigkeiten der Hardware unter anderem folgende Profile für die einzelnen Soundkarten zur Auswahl stehen:

  • Analog Stereo Output: Stereoausgabe über einen analogen Ausgang
  • Analog Stereo Input: Stereoaufnahme über einen analogen Eingang
  • Analog Stereo Duplex: Aufnahme und Wiedergabe in Stereo über einen analogen Ein- und Ausgang derselben Soundkarte
  • Analog Surround X.Y Output: Ausgabe in Surroundsound mit X normalen Kanälen und Y Kanälen für Subwoofer
  • Digital Stereo Output: Ausgabe in Stereo über einen digitalen Ausgang
  • Digital Stereo (HDMI) Output: digitale Stereoausgabe über HDMI
  • Digital Surround X.Y (HDMI) Output: digitale Surroundausgabe mit X normalen Kanälen und Y Kanälen für Subwoofer

Nachdem man die Konfiguration der Soundkarte(n) erledigt hat, kann man unter Ausgabegeräte die Default-Soundkarte für die Wiedergabe auswählen indem man sie "als Ausweichoption setzt" und dasselbe kann man für Aufnahmen unter Eingabegeräte erledigen.

Der etwas merkwürdige Name "als Ausweichoption setzen" kommt daher, dass man die Soundkarte tatsächlich weniger als Standardgerät für Wiedergabe oder Aufnahme festlegt sondern viel mehr als Ausweichoption oder „Notfalllösung“, falls von der Anwendung bzw. vom Anwender keine bestimmte andere Soundkarte ausgewählt wird. Das Ergebnis ist im Endeffekt aber meistens dasselbe.

Falls beim gewählten Profil mehrere Anschlüsse für die Aufnahme oder Wiedergabe zur Auswahl stehen, kann man unter Eingabegeräte oder Ausgabegeräte auch den gewünschten Anschluss auswählen. Bei der Aufnahme über einen analogen Eingang, hat man also unter Eingabegeräte zum Beispiel die Wahl unter Line-In und dem Mikrofoneingang.

Unter "Wiedergabe" und "Aufnahme" kann man außerdem jeder laufenden Anwendung, die gerade einen Ton abspielt oder aufnimmt, nach Belieben während der laufenden Wiedergabe oder Aufnahme eine andere Soundkarte zuweisen.

Pulseaudio und ALSA

Pulseaudio bietet eine eigene Softwareschnittstelle für die Audiowiedergabe an, aber viele Anwendungen nutzen nach wie vor ALSA. Deswegen richtet sich Pulseaudio in ALSA mit dem ALSA-Plugin pulse als so eine Art virtuelle Standardsoundkarte ein. Je nachdem ob die Anwendung also schon direkt Pulseaudio oder ALSA nutzt, sieht der Weg der Audiodaten etwas anders aus:

  • Pulseaudio-Anwendung → Pulseaudio → ALSA (Soundkarte)
  • ALSA-Anwendung → ALSA (pulse-Plugin) → Pulseaudio → ALSA (Soundkarte)

OSS-Anwendungen und Pulseaudio

Bei Debianpackage.png pulseaudio ist das Wrapper-Skript »/usr/bin/padsp« dabei, mit dem man Anwendungen, ähnlich zum Wrapper-Skript aoss von ALSA, starten kann. Wieder am Beispiel von Debianpackage.png gwc

user@debian:~$ padsp gnome_wave_cleaner

Lautstärkeregelung und Softwaremixing

Wie ALSAs dmix-Plugin mischt auch Pulseaudio die Ausgaben mehrerer Anwendungen in Software.

Anders als in ALSA bietet Pulseaudio für jede Anwendung einen eigenen Lautstärkeregler, der sich zum Beispiel mit Debianpackage.png pavucontrol unter Wiedergabe einstellen lässt. Dabei kombiniert Pulseaudio recht geschickt eine Regelung über die Lautstärkeregler, die die Soundkarte bzw. deren Treiber bietet mit einer Softwarelautstärkereglung. Manchmal ist das Verhalten dieser Regelung gewöhnungsbedürftig oder hat unerwünschte Folgen: Wird etwa ein Anwendungsregler auf zB 100% gestellt, so geht damit ganz automatisch auch der Hauptregler (auch Master) auf 100%. Will man die Anwendungsregler getrennt vom Hauptregler bedienen könnten genügt eine kleine Änderung in der »/etc/pulse/daemon.conf« oder der benutzereigenen Kopie »~/.config/pulse/daemon.conf« (muss erst angelegt werden). Die Zeile

; flat-volumes = yes

muss dazu in

flat-volumes = no

geändert werden. Nach dem nächsten Start von Pulseaudio lassen sich die anwendungsspezifischen Lautstärkeregler unabhängig vom Hauptregler bedienen.

Anders als in ALSA kann Pulseaudio beim Softwaremixing automatisch zwischen zwei Sampleraten wählen. Das ist von Vorteil, weil es zwei übliche Familien von Sampleraten gibt

  • einerseits die von der Audio-CD bekannten 44100 Hz und Vielfache bzw. Bruchteile davon wie 22050 Hz, 88200 Hz, 176400 Hz,… und
  • andererseits die abseits von Audio-CD und Musik üblicheren 48 kHz und Vielfache bzw. Bruchteile davon wie 24000 Hz, 96000 Hz, 172000 Hz,…

und die Umrechnung innerhalb einer Familie anders als die Umrechnung mit krummen Verhältnissen wenig Rechenaufwand und keinen oder nur sehr wenig Qualitätsverlut mit sich bringt.

Die beiden zur Wahl stehenden Abtastraten werden systemweit in der »/etc/pulse/daemon.conf« oder benutzerspezifisch in der »~/.config/pulse/daemon.conf« festgelegt. Standardmäßig stehen auskommentiert die beiden Standardwerte in der »/etc/pulse/daemon.conf«

; default-sample-rate = 48000
; alternate-sample-rate = 44100

Entfernt man das Kommentarzeichen ;, dann kann man die beiden Werte nach Belieben ändern. Während einer laufenden Wiedergabe kann Pulseaudio die Samplerate allerdings nicht wechseln.

Pulseaudio als systemweiter Daemon

Pulseaudio wird normalerweise (automatisch) für jeden einzelnen Benutzer gestartet, zum Beispiel bei der Anmeldung. Das hat Vorteile. Erstens bietet es eine höhere Sicherheit als eine systemweite Pulseaudio-Instanz und zweitens ist es praktisch, dass jeder Benutzer seinen Pulseaudio-Daemon nach belieben konfigurieren kann — mehr dazu im freedesktop.org-Wiki.

Trotzdem gibt es Situationen in denen eine systemweite Pulseaudio-Instanz von Vorteil ist. Das kann zum Beispiel auf einem monitorlosen System der Fall sein, auf dem sich niemals oder nur selten jemand anmeldet — das könnte etwa in Zusammenhang mit dem folgenden Abschnitt "Audio über das Netzwerk wiedergeben" interessant sein.

Um also Pulseaudio als systemweiten Daemon zu starten sind mehrere Änderungen erforderlich.

  1. Systemmodus aktivieren
    In der »/etc/pulse/daemon.conf « ändert man nun die Zeile
    ; system-instance = no 
    in
    system-instance = yes 
    (oder fügt letztere Zeile einfach nur hinzu).
  2. Pulseaudio automatisch starten
    Je nach Pulseaudio bzw. Debianverson unterscheidet sich das Vorgehen.
    • Wheezy und älter (sysvinit)
      Hier bringt Pulseaudio bereits ein Startskript (»/etc/init.d/pulseaudio«) mit und der Start als systemweiter Daemon kann einfach in der »/etc/default/pulseaudio« mit dieser Zeile
      PULSEAUDIO_SYSTEM_START=1 
      aktiviert werden. Gestartet wird Pulseaudio danach mit
      root@debian:~# /etc/init.d/pulseaudio start
      
    • ab Jessie (systemd)
      Es muss eine Service-Unit für Pulseaudio angelegt werden, in Form einer Textdatei »/etc/systemd/system/pulseaudio.service« mit dem Inhalt
      [Unit] 
      Description=PulseAudio Sound System 
      Before=sound.target  
        
      [Service] 
      BusName=org.pulseaudio.Server 
      ExecStart=/usr/bin/pulseaudio 
      Restart=always 
       
      [Install] 
      WantedBy=session.target 
      Danach muss man diese Service-Unit noch einlesen, aktivieren und mit dem letzten Befehl starten
      root@debian:~# systemctl daemon-reload
      root@debian:~# systemctl enable pulseaudio
      root@debian:~# systemctl start pulseaudio
      

Von nun an muss man Anpassungen der Pulseaudiokonfiguration nicht mehr an der »/etc/pulse/default.pa« sondern der »/etc/pulse/system.pa« vornehmen, denn erste gilt nur für die benutzereigenen, letztere nur für systemweite Pulseaudio-Instanzen. Gegebenenfalls muss man den Benutzer pulse, unter dem Pulseaudio von nun an läuft der Gruppe audio hinzufügen

root@debian:~# adduser pulse audio

und Benutzer, die in der Lage sein sollen Pulseaudio zu benutzen müssen unter Umständen der Gruppe pulse-access hinzugefügt werden

root@debian:~# adduser benutzername pulse-access

Audioausgabe aufnehmen

komplette Audioausgabe

Um alles, was über eine Soundkarte wiedergegeben wird, aufnehmen zu können, bietet Pulseaudio zu jeder Soundkarte ein virtuelles Aufnahmegerät, das denselben Namen mit einem angehängten .monitor trägt. Man muss also in Debianpackage.png pavucontrol unter "Eingabegeräte" in dem Auswahlfeld "Anzeigen:" "All Input Devices" oder "Monitors" und dann den entsprechenden "Monitor" als Aufnahmegerät auswählen indem man ihn "als Ausweichoption setzt".

Danach sollte man mit Debianpackage.png audacity oder anderen Aufnahmeprogrammen das wiedergegebene Signal aufnehmen können.

einen Teil der Audioausgabe aufnehmen

Es kann aber auch passieren, dass man die Ausgabe mehrer Anwendungen aufnehmen will, die anderer Anwendungen aber nicht.

In diesem Beispiel aus dem Forum Diskussion 161603 soll das Signal aus dem Mikrofoneingang, gemischt mit dem einer Anwendung aufgenommen werden, während die Audioausgabe einer weiteren Anwendung nicht aufgenommen werden soll. Eine Möglichkeit das zu realisieren sieht so aus

┌───────────┐
│Anwendung 1├────────>─────────────────────────────────┐
└───────────┘                                          ↓
┌───────────┐              ┌────────────┐         ┌────┴─────┐
│Anwendung 2├────────>─────┤Combine-sink├────>────┤Soundkarte│
└───────────┘              └──────┬─────┘         └──────────┘
                                  ↓
┌────────┐    ┌────────┐   ┌──────┴──────────┐
│Mikrofon├─>──┤Loopback├─>─┤Null-sink (null) │
└────────┘    └────────┘   │--------↓--------│    ┌───────────┐
                           │  null.monitor   ├─>──┤Anwendung 3│
                           └─────────────────┘    └───────────┘

Im oberen Teil mit "Anwendung 1" und "Anwendung 2" dient die "Combine-sink" nur dazu die Audioausgabe der Anwendungen, die in der Aufnahme landen sollen, abzuzweigen. Das geschieht mit dem Modul "module-combine-sink". Dieses „Gerät“ wird im folgenden wie in der Skizze "Combine-Sink" genannt.

Das allein würde schon genügen um von dem Monitor von "Combine-Sink" aufnehmen zu können, aber hier soll auch das Audiosignal des Mikrofons dazugemischt werden. Dazu wird mit dem Modul "module-null-sink" die "Null-sink" erstellt, die nur dazu dient die gewünschten Audiosignale zusammenzufassen und mit dem zugehörigen Monitor aufzunehmen. Nachdem man aber die Signale von Aufnahmegeräten (unter Pulseaudio bzw. pavucontrol Eingabegeräte) nicht einfach an ein Ausgabegerät weiterleiten kann, ist noch das "module-loopback" notwendig, das das erledigt.

Die entsprechenden Befehle lauten

user@debian:~$ pactl load-module module-null-sink
user@debian:~$ pactl load-module module-loopback sink=null
user@debian:~$ pactl load-module module-combine-sink sink_name=Combine-Sink slaves=null,Name_der_Soundkarte

Name_der_Soundkarte im letzten Befehl muss man durch den Name oder Nummer der Soundkarte ersetzten, so wie sie in der Ausgabe von

user@debian:~$ pactl list sinks short

erscheint.

Danach braucht man nur noch die Ausgaben der Anwendungen, deren Signal in der Aufnahme landen soll, zum Beispiel mit pavucontrol nach "Combine-Sink" umzudirigieren und kann von "null.monitor" (in pavucontrol "Monitor of Null-Ausgabe") aufnehmen - in der Skizze mit "Anwendung 3".

Equalizer und andere LADSPA-Plugins

Pulseaudio bietet ein Equalizer-Modul für das es in Debian aber leider keine grafische Oberfläche zugeben scheint. Daher soll hier von einer anderen Möglichkeit die Rede sein einen Equalizer in Pulseaudio einzubauen. LADSPA ist ein Standard für Audio-Effekt-Plugins und diese Plugins lassen sich mittels eines Moduls in Pulseaudio „einschleifen“.

Für dieses Beispiel sind die Pakete Debianpackage.png veromix, Debianpackage.png pavucontrol und Debianpackage.png swh-plugins notwendig. Ersteres liefert die grafische Oberfläche für den Equalizer, letzteres das Equalizer-Plugin.

  1. Als erstes klickt man bei der gewünschten Soundkarte in veromix auf den Pfeil rechts neben der Soundkarte und wählt:
  2. Effekt hinzufügenEffektMultiband EQ (mbeq_1197)
  3. Nun legt man die Audioausgabe der gewünschten Anwendung(en) in pavucontrol unter Wiedergabe auf den Equalizer, der dort unter einem Namen wie "LADSPA Plugin Multiband EQ on …" zur Auswahl stehen sollte oder macht alternativ dazu den Equalizer in pavucontrol unter Ausgabegeräte gleich zum Default (als Ausweichoption setzen)
  4. Schließlich stellt man die Regler des Equalizers in veromix nach Belieben ein.

An Schritt 2 lässt sich vielleicht bereits erkennen, dass man auf die Art die Audioausgabe mit beliebigen LADSPA-Plugins verfremden kann.

Surroundsound mit Kopfhörern

Mittels Faltung von Audiosignalen mit Impulsantworten bietet Pulseaudio eine einfache Möglichkeit mit Kopfhörern so etwas wie Surroundsound zu genießen.

Zuallererst sind die Impulsantworten notwendig. Im freedesktop.org-Wiki findet man die beiden Archive

die beide mit 5.1 aufgenommene Impulsantworten, in Form von 6-kanaligen wav-Dateien enthalten. Die im ersten Archiv wurden mit einem Kunstkopf aufgenommen, während die des zweiten mit echten Köpfen aufgenommen wurden. Man braucht nur eines dieser beiden Archive. Weil die Frisur und die Form des Kopfes individuell sehr unterschiedlich sind, muss man also, wenn man sich für das zweite Archiv entscheidet, den passendsten Kopf auswählen. Dazu kann sich die im Verzeichnis »demos« des Archivs verfügbaren Audiodateien anhören. Die Nummer der Audiodatei, die mit Kopfhörern am besten die Illusion eines im Uhrzeigersinn um den Kopf kreisenden Geräuschs erzeugt, ist die passendste. Die wav-Datei mit der notwendigen Impulsantwort mit dieser Nummer findet sich dann im Verzeichnis »hrirs«.

Nun kopiert man also die gewünschte Impulsantwort, zB hrir-1013.wav, nach »~/pulse/hrir.wav«. Mit

user@debian:~$ pactl load-module module-virtual-surround-sink hrir=~/pulse/hrir.wav

lädt man das Pulseaudio-Modul, das den Effekt erzeugt und das Audiosignal dann über die Soundkarte ausgibt.

Wählt man danach in pavucontrol dieses neue virtuelle Gerät, das einen Namen ähnlich "Virtual Surround Sink … on …" trägt, als Ausgabegerät dann sollte der Effekt deutlich hörbar sein.

Will man diese Befehle nicht nach jedem System- bzw. Pulseaudio-Start von neuem eingeben, um dieses virtuelle Wiedergabegerät zu erhalten, erstellt man eine benutzereigene Kopie von »/etc/pulse/default.pa« 

user@debian:~$ cp /etc/pulse/default.pa /.config/pulse/default.pa

und fügt der Datei folgende Zeilen hinzu

.nofail
load-module module-virtual-surround-sink hrir=/home/[Benutzername]/pulse/hrir.wav
.fail

Audio über das Netzwerk wiedergeben

Mit Pulseaudio ist es auf recht bequeme Art möglich die Audioausgabe von einem Computer an einen weiteren über das Netzwerk erreichbaren Computer weiterzuleiten und dort auszugeben. Zwei Module helfen dabei.

Wichtigster Bestandteil ist das Modul module-native-protocol-tcp, das direkt im Paket Debianpackage.png pulseaudio dabei ist und das die Audioübertragung über das Netzwerk möglich macht .

Zusätzlich gibt es das Modul module-zeroconf-publish aus den Paket Debianpackage.png pulseaudio-module-zeroconf, das dafür sorgt, dass Computer, die die Audiowiedergabe über das Netzwerk zur Verfügung stellen, ihren Dienst im Netzwerk mittels Zeroconf bekannt machen und so automatisch gefunden werden können.

Beide Modul müssen nur auf dem „Server“ geladen werden, also auf dem Computer, in dem die Soundkarte steckt, über die das Audiosignal schließlich ausgegeben werden soll. Laden lassen sich die beiden Module mit

root@debian:~# pactl load-module module-native-protocol-tcp auth-ip-acl=a.b.c.d/x
root@debian:~# pactl load-module module-zeroconf-publish
auth-ip-acl=a.b.c.d/x
Mit diesem Parameter wird festgelegt welche Computer des Netzwerks sich mit dem Pulseaudioserver verbinden dürfen. a.b.c.d/x ist eine Liste von IP-Adressen, getrennt durch Semikolons; die ohne weitere Authentifizierung über diesen Pulseaudio-Server Audio wiedergeben dürfen. Mit "auth-ip-acl=127.0.0.1;192.168.1.0/24" wird es zB allen Benutzern desselben Computers (127.0.0.1) und allen Computern im Netzwerk 192.168.1.0/255.255.255.0 (=192.168.1.0/24) der Zugriff gewährt.


Mit weiteren Parametern, wie sie im freedesktop.org-Wiki aufgelistet sind, gibt es noch andere Möglichkeiten zur Autenthifizierung.


Daherhaft verankert man die Module indem man sie in »/etc/pulse/default.pa« oder falls Pulseaudio im Systemmodus läuft (siehe "Pulseaudio als systemweiter Daemon") in »/etc/pulse/system.pa« einträgt:

load-module module-native-protocol-tcp auth-ip-acl{{EqualSign}}127.0.0.1;192.168.1.0/24
load-module module-zeroconf-publish