Tipps und Tricks rund um Linux
Im Folgenden wollen wir ein paar Befehle für die Kommandozeile von Linux® zeigen, mit denen Du die Soundkarte steuern kannst. Wir setzen voraus, dass ALSA mit PipeWire oder PulseAudio installiert ist. Ebenso setzen wir voraus, dass die Soundkarte im "Full-Featured Mode" gestartet wurde. Näheres dazu haben wir im Handbuch beschrieben.
Bei den meisten Linux®-Distributionen ist das der Fall. Darüber hinaus solltest Du noch die Programme ffmpeg
, ffplay
, alsamixer
, amixer
und pactl
installieren. Bei Ubuntu musst Du dazu z.B. die Pakete ffmpeg
und alsa-utils
installieren. Bei anderen Linux®-Distributionen kannst Du Dich bzgl. der Installation der oben genannten Programme auf den Webseiten des Distributors oder bei einschlägigen Foren informieren.
ALSA vs. Sound Server
Bei der Verwendung von Linux® ist typischerweise ein sogenannter Sound Server wie z.B. PulseAudio oder PipeWire installiert. Diese Sound Server zeigen die Bedienelemente der Audio-Hardware nicht an. Die Lautstärkeregler dieser Sound Server sind rein softwarebasiert und verändern daher nicht das entsprechende Bedienelement auf der Soundkarte. Die Sound Server kommunizieren nicht direkt mit der Audio-Hardware, sondern nur mit einer Abstraktionsschicht namens ALSA (Advanced Linux Sound Architecture). Mit ALSA steht eine vereinheitlichte Programmierschnittstelle zur Verfügung, die es einem Programm erlauben, wie z.B. auch einem Sound Server, jede von ALSA unterstützte Soundkarte anzusteuern, ohne sich um die spezifischen Implementierungsdetails für die jeweilige Audio-Hardware kümmern zu müssen. Natürlich ist es auch möglich, mit einem Programm direkt über ALSA Audio auszugeben. Allerdings bieten die Sound Server einige Komfortfunktionen, die bei ALSA nicht zur Verfügung stehen oder nur mit einigem Aufwand zu konfigurieren sind.
ALSA mit textbasierten Oberfläche steuern
Bei ALSA können die Zustände der Steuerelemente mit folgendem Kommando angezeigt und auch geändert werden:
alsamixer -c DSC8
Das Programm lässt sich im Wesentlichen durch die Cursortasten und Leertaste steuern. Weiteres ist in der Hilfe des Programms beschrieben.
Lautstärke und Stummschaltung
Genau genommen hast Du zwei Lautstärkeregler. Ein Regler steuert die Lautstärke beim Sound Server und der andere bei ALSA. Bei den meisten Distributionen kannst Du die Lautstärke des Sound Servers schon über die Multimedia-Tasten Deiner Tastatur ohne weiteres Zutun regeln. Dann ist es sinnvoll, die Lautstärke bei ALSA auf das Maximum zu stellen ändern, sofern das noch nicht der Fall ist. Mit dem Programm alsamixer, das wir oben schon beschrieben haben, kannst Du die Lautstärke anpassen.
Lautstärkeregelung bei ALSA
Sämtliche Lautstärkeregler abfragen:
amixer -D hw:DSC8 sget Volume
Hauptregler abfragen:
amixer -D hw:DSC8 sget Volume,1
Die Lautstärke kann in dem Bereich 0-127 absolut gesetzt werden, wobei 0 unhörbar leise ist und 127 die maximale Lautstärke repräsentiert:
amixer -D hw:DSC8 sset Volume,1 10
Die Lautstärke kann prozentual absolut gesetzt werden, wobei 0% unhörbar leise ist und 100% die maximale Lautstärke repräsentiert:
amixer -D hw:DSC8 sset Volume,1 15%
Die Lautstärke kann aber auch relativ erhöht werden mit dem Befehl:
amixer -D hw:DSC8 sset Volume,1 3%+
oder
amixer -D hw:DSC8 sset Volume,1 5+
Entsprechend kann die Lautstärke aber auch relativ reduziert werden mit dem Befehl:
amixer -D hw:DSC8 sset Volume,1 3%-
oder
amixer -D hw:DSC8 sset Volume,1 5-
Das folgende Kommando schaltet die Ausgabe stumm:
amixer -D hw:DSC8 sset Volume,1 mute
Das folgende Kommando schaltet die Stummschaltung der Ausgabe aus:
amixer -D hw:DSC8 sset Volume,1 unmute
Die Stummschaltung der Ausgabe kannst Du wie folgt umschalten:
amixer -D hw:DSC8 sset Volume,1 toggle
Lautstärkeregelung beim Sound Server über ALSA
Der Sound Server PipeWire und PulseAudio haben nur einen Lautstärkeregler. Die Kommandos sind ähnlich zu ALSA. Es wird nur der Gerätename hw:DSC8
mit pulse
ersetzt und der Name des Reglers von Volume,1
auf Master
geändert.
Das folgende Kommando listet alle Steuerelemente vom Sound Server auf:
amixer -D pulse
Typischerweise bekommst Du dann zwei Steuerelemente angezeigt, die wie folgt heißen: Master,0
und Capture,0
. Das Steuerelement Capture,0
ist für die Aufnahmelautstärke und Master,0
ist für die Ausgabelautstärke verantwortlich. Letztendlich wird aber nur das Steuerelement Master,0
für Dich interessant sein.
Um die Lautstärke abzufragen, musst Du also folgenden Befehl ausführen:
amixer -D pulse sget Master,0
Sicherlich wirst Du die Ähnlichkeit zu den Kommandos aus dem vorangegangen Abschnitt erkennen.
Es sind einfach, wie zuvor schon beschrieben, der Gerätename und der Name des Reglers für das Kommando angepasst werden. Die Struktur des Kommandos bleibt gleich. Die anderen Befehle, wie z.B. das Setzen der Lautstärke, sind analog zu den Befehlen des vorhergehenden Abschnitts. Daher wiederholen wir diese Kommandos nicht noch einmal in angepasster Form.
Es gibt noch einen Unterschied zu den Steuerelement von ALSA, auf den wir hinweisen möchten: Der Wertebereich beim Sound Server geht von 0 bis 65535.
Lautstärkeregelung bei Pulse Audio
Dieser Abschnitt ist nur relevant, wenn der Sound Server PipeWire oder PulseAudio installiert ist. In der Tat ist das kein Fehler, dass wir hier auch PipeWire hier nennen. PipeWire ist nämlich bzgl. der Programmierschnittstellen rückwärtskompatibel zu PulseAudio.
Bei Pulse Audio gibt es aber neben dem Hauptlautstärkeregler noch weitere Lautstärkeregler, die nur über ein separates Kommando gesteuert werden können. Typischerweise musst Du diese Lautstärkeregler nie ändern. Uns ist es aber schon passiert, dass diese Steuerelemente durch ein Programm geändert wurden. Wie Du diese Änderung gegebenenfalls rückgängig machst, beschreiben wir im Folgenden.
Zunächst einmal musst Du die entsprechenden Ids für die Steuerelemente bestimmen:
pactl list short | grep -P "alsa_output.*hifidom.*surround-71[^.]"
Der Befehl sieht schon ein recht komplex aus. Daher erklären wir jetzt diesen Befehl:
pactl list short
fragt am Sound Server alle sogenannten Audioquellen und -senken (z.B. Lautsprecher oder Mikrofone) ab. Hier können sehr viele Quellen und Senken angezeigt werden, was recht unübersichtlich ist. Um die Ausgabe auf nur die relevante Senke zu reduzieren, dient der Teil | grep -P "alsa_output.*hifidom.*surround-71[^.]"
des Kommandos. Das Programm grep
filtert die Ausgabe mit dem Ausdruck alsa_output.*hifidom.*surround-71[^.]
. Kommt dieser Ausdruck in einer Zeile vor, dann wird nur diese Zeile ausgegeben. Zum Beispiel könnte folgende Zeile ausgeben werden:
421 alsa_output.usb-hifidom_DSC8_44534338-4d41494e-1127-00.analog-surround-71 PipeWire s32le 8ch 48000Hz SUSPENDED
An erster Stelle steht die Id der Senke. In dem vorangegangen Beispiel ist die Id gleich 421. Diese Id benutzen wir nun auch für unsere weiteren Kommandos. Du musst entsprechend diese Id anpassen.
Mit dem folgenden Kommando kannst Du Dir die aktuelle Lautstärke anzeigen lassen:
pactl get-sink-volume 421
Nun bekommst Du z.B. folgende Ausgabe:
Volume: front-left: 65536 / 100% / 0,00 dB, front-right: 65536 / 100% / 0,00 dB, rear-left: 65536 / 100% / 0,00 dB, rear-right: 65536 / 100% / 0,00 dB, front-center: 65536 / 100% / 0,00 dB, lfe: 65536 / 100% / 0,00 dB, side-left: 65536 / 100% / 0,00 dB, side-right: 65536 / 100% / 0,00 dB
Hier ist für jeden Kanal einzeln ein Lautstärkeregler verfügbar. Typischerweise sollten alle Lautstärkeregler auf 100% stehen. Falls das nicht der Fall ist, dann kannst Du das mit folgendem Kommando korrigieren:
pactl set-sink-volume 421 100%
Wenn die Soundkarte DSC8 standardmäßig für die Ausgabe ausgewählt ist, dann kannst Du anstelle der Id auch einfach @DEFAULT_SINK@
schreiben. Dieses kannst Du mit dem folgenden Kommando herausfinden:
pactl get-default-sink
Wenn die Soundkarte DSC8 nicht standardmäßig für die Ausgabe ausgewählt, kannst Du dieses mit folgendem Kommando anpassen: pactl set-default-sink 421
Die Id 421 musst Du mit den entsprechenden Wert ersetzen, wie wir es oben beschrieben haben.
Lautstärkeregelung bei Pipewire
Dieser Abschnitt ist nur relevant, wenn der Sound Server PipeWire installiert ist. Des Weiteren wird im Folgenden davon ausgegangen, dass Soundkarte DSC8 standardmäßig für die Ausgabe ausgewählt ist.
Bei Pipewire kannst Du das Kommandozeilentool wpctrl
benutzen, um jede Einstellung von PipeWire anzuschauen und zu verändern. Der Wertebereich der Lautstärke geht bei Pipewire von 0 bis 1, wobei 0 die minmale und 1 die maximale Lautstärke repräsentiert. Es sind auch Nachkommastellen möglich wie z.B. 0.5
.
Die aktuelle Lautstärke kannst Du Dir wie folgt anzeigen:
wpctl get-volume @DEFAULT_AUDIO_SINK@
Die Lautstärke kannst Du z.B. absolut auf 0.75 setzen:
wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.75
Dieses entspricht 75% der maximalen Lautstärke. Alternativ kannst Du auch folgendes schreiben:
wpctl set-volume @DEFAULT_AUDIO_SINK@ 75%
Die Lautstärke kannst Du auch relativ um 5% verringern mit:
wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
Mit folgendem Kommando kannst du die Lautstärke um 5% erhöhen:
wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
Die Ausgabe kannst Du mit folgendem Kommando stumm schalten:
wpctl set-mute @DEFAULT_AUDIO_SINK@ 1
Und mit diesem Kommando schaltest Du die Stummschaltung aus:
wpctl set-mute @DEFAULT_AUDIO_SINK@ 0
Und mit diesem Kommando schaltest Du die Stummschaltung um, d.h. entweder auf an oder aus, abhängig davon, welcher Zustand vorher war:
wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
Den aktuellen Zustand der Stummschaltung wird Dir bei dem folgenden Kommando angezeigt:
wpctl get-volume @DEFAULT_AUDIO_SINK@
Es wird hinter der Lautstärke noch ein [MUTED]
angezeigt. Ein explizites Kommando get-mute
gibt es bei dem Tool nicht.
Eingänge umschalten
Sofern Du eine Eingangserweiterungskarte mit der Soundkarte verbunden hast, kannst Du mit den folgenden Befehlen die Eingänge steuern. Das folgende Kommando gibt den aktuellen Status der Eingänge zurück:
amixer -D hw:DSC8 sget 'Input Capture Source',0
In der Zeile, die mit Items:
beginnt, sind alle verfügbaren Eingänge aufgelistet. In der Zeile, die mit Item0:
beginnt, wird der aktuell ausgewählte Eingang angezeigt.
Im Folgenden nehmen wir an, dass bei Items:
unter anderem der Eingang 'Input 2: card = 1 (SPDIF), port = 2'
angezeigt wird. Diesen Eingang können wir wie folgt auswählen:
amixer -D hw:DSC8 sset 'Input Capture Source',0 'Input 2: card = 1 (SPDIF), port = 2'
Leider lässt sich das Auswählen des nächsten oder vorherigen Eingangs nicht mehr mit einem einfachen Befehl realisieren. Dazu ist ein Skript erforderlich. Dieses Skript kannst Du hier herunterladen. Nach dem Download musst Du das Skript nur noch ausführbar machen mit folgenden Befehl:
chmod +x input.sh
Nun kannst Du den nächsten Eingang auswählen mit:
./input.sh next
Den vorhergehenden Eingang kannst Du wie folgt auswählen:
./input.sh prev
Das Skript kann noch mehr. Rufe einfach folgendes auf, um alle Möglichkeiten angezeigt zu bekommen:
./input.sh
Status der Soundkarte anzeigen
Mit dem folgenden Befehl kannst Du Dir z.B. anschauen, ob die Aufnahme- oder Wiedergabefunktion der Soundkarte gerade in Benutzung ist oder nicht:
cat /proc/asound/DSC8/stream0
Folgt dem Zeilenanfang Status:
ein Stop
, dann ist die jeweilige Funktion nicht in Benutzung. Anderenfalls werden Dir die Parameter angezeigt, mit der die Wiedergabe bzw. Aufnahme gestartet wurde. Diese Statusinformation kannst Du z.B. benutzen, um zeitversetzt die Aktivlautsprecher ein- bzw. auszuschalten.
Datenstrom vom Eingang zum Ausgang umleiten
Dieser Abschnitt ist nur relevant, wenn Du eine Eingangserweiterungskarte mit der Soundkarte verbunden hast. Der Datenstrom muss vom Eingang zum Ausgang mit einer Software umgeleitet werden. Das Tool alsaloop
von alsautils
kann das. Leider kann das Tool nur PCM Signale verarbeiten und keinen komprimierten Surround-Signale. Das Tool gibt komprimierte Surround-Signale unverändert aus, wodurch nur ein unangenehmes Rauschen zu hören ist.
Allerdings gibt die Möglichkeit, dieses Problem mit dem Tool ffmpeg
zu lösen. Sofern noch nicht geschehen, muss dieses zuvor auf dem System installiert werden.
Mit folgendem Kommando kannst Du das automatische Dekodieren bewirken:
ffmpeg -hide_banner -loglevel panic -f alsa -ac 2 -ar 48000 -i plughw:CARD=DSC8,DEV=0 -c:a pcm_s16le -f wav - | ffplay -loglevel quiet -nodisp -fflags nobuffer -flags low_delay -framedrop -
Ok, der Befehl ist ein bisschen unhandlich. Des Weiteren muss der Befehl an die Samplerate angepasst werden, die aktuell an dem Eingang anliegt, da ansonsten die Soundkarte nur Stille aufnimmt. Dafür ist der Parameter -ar 48000
zuständig. Um das ganze für Dich zu automatisieren, haben wir ein Skript geschrieben. Dieses kannst Du hier herunterladen. Das Skript ist noch nicht perfekt. Wenn Du den Computer aus dem Stand-by-Modus holst, dann solltest Du das Skript unbedingt neu starten, da sich gelegentlich ein Prozess des Skripts verklemmt und dieses zu unangenehmen Störgeräuschen führt. Wir arbeiten aber daran, dieses zu beheben.
Keine Tonausgabe! Was tun?
Im ersten Schritt solltest Du prüfen, ob die Soundkarte bei ALSA verfügbar ist. Dieses machst mit folgendem Kommando:
ls -l /proc/asound/
Erscheint in der Auflistung DSC8
, was bei allen Mainstream Linux®-Distributionen der Fall sein wird, dann sind die Treiber für die Soundkarte korrekt geladen und die Karte kann zur Tonerzeugung benutzt werden. Die Soundkarte benötigt den USB-Treiber für "USB Audio Class 2" (UAC2). Wenn der Treiber bei Deiner Distribution fehlt, dann kontaktiere bitte Deinen Distributor. Die nachträgliche Installation des Treibers ist dann spezifisch für Deine Linux®-Distribution. Leider können wir nicht Support für alle Linux®-Distribution leisten.
Wenn die Soundkarte angezeigt wird, aber kein Ton zu hören ist, dieser zu leise ist oder verzerrt ist, dann ist mindestens ein Lautstärkeregler im System nicht korrekt eingestellt. Leider sind aber nicht alle Lautstärkeregler durch eine grafische Benutzerschnittstelle erreichbar. Daher ist es der beste Weg, alle Steuerelemente durch Kommandos zu prüfen. Wenn kein Ton zu hören ist, solltest Du neben den Lautstärkereglern auch die Mute-Schalter prüfen.
Wir empfehlen zunächst bei den Steuerelementen für ALSA anzufangen. Dieses haben wir in den Abschnitten ALSA mit textbasierten Oberfläche steuern bzw. Lautstärkeregelung bei ALSA beschrieben.
Dann solltest Du die Lautstärkeregler prüfen, wie wir es im Abschnitt Lautstärkeregelung beim Sound Server über ALSA beschrieben haben.
Wenn es dann noch immer nicht passt, dann prüfe die Steuerelemente, wie wir es im Abschnitt Lautstärkeregelung bei Pulse Audio beschrieben haben.
WICHTIG: Bitte setze nicht gleich die Lautstärke auf den maximalen Wert, es könnte sonst unangenehm laut werden ;-).