Multimedia Mint: Klangprofil mit der Kommandozeile wechseln

Timelord

assimiliert
Mein Netbook dient mir aktuell für 2 Dinge:
1) Zum mobilen Surfen
2) Als Internetradio
Als Internetradio nutze ich es mal Stand Alone, aber auch mal an mein Surround System angeschlossen.

Beides klappt recht gut, aber ich muss regelmäßig die Klangprofile umstellen, damit der Ton aus den richtigen Lautsprechern kommt.
Aber ich bin faul ... daher würde ich das ganze gerne als Skript ablegen und mir ein paar Mausklicks sparen.

Mit amixer kann ich das Audiogerät umstellen, das passt aber in dem Fall nicht, da ich nur ein anderes Klangprofil auf demselben Gerät umstellen möchte (dazu habe ich in der Doku nichts gefunden).

Als Anhang habe ich einen Screenshot beigefügt, der zeigt an welcher Stelle ich bisher die Klangprofile umstelle (das Dropdown Feld "Profil" unten).
Der Screenshot stammt von einem anderen Notebook, das Netbook hat nur 1 Audiogerät.

Habt ihr einen Tipp, mit welchem Befehl (und welcher Option) ich das automatisieren kann?
 

Anhänge

  • Bildschirmfoto zu 2021-01-31 15-39-55.png
    Bildschirmfoto zu 2021-01-31 15-39-55.png
    48,6 KB · Aufrufe: 46

Timelord

assimiliert
Der Screenshot stammt vom "mate-volume-control".
Der setzt allerdings tatsächlich auf PulseAudio auf, nicht direkt auf Alsa (auch wenn es das wohl auch könnte).
Danke für den Hinweis, da habe ich noch einen weiteren Suchbegriff, mit dem ich mich beschäftigen kann. :)
 

Bio-logisch

Moderator
Teammitglied
Alsa ist ja der Treiber selber - auf denn kann meines Wissens nach immer nur ein Programm auf einmal zugreifen. Deswegen hast Du ja einen Soundserver wie Pulseaudio auf den meisten Systemen installiert. Die Frage ist dann aber, ob der Audioserver die Ausgabe der Programme an die entsprechenden Geräte, Subgeräte und Kanäle weitergibt, an die Deine Lautsprecher angeschlossen sind. Weil nur wenn ein Geräusch am jeweiligen Lautsprecher überhaupt ankommt, hat amixer eine Möglichkeit die Lautstärke zu ändern.

Das kriegst Du raus, indem Du bei amixier die Parameter cset name und cset subdevice testest, falls Du das nicht schon längst gemacht hast.
 

Timelord

assimiliert
Bisher habe ich mit amixer und cset nur das Audiogerät umgestellt (mein RasPi mit Ubuntu Mate gibt den Ton mal über den Klinkenausgang, mal über HDMI aus - für die beiden Ausgänge sind zwei unterschiedliche Geräte zuständig).

Für das aktuelle Problem habe ich nun dank dem Hinweis auf PulseAudio die Lösung gefunden (meistens wenn ich etwas nicht weiss, dauert die Suche nach den richtigen Suchbegriffen drastisch länger als das Finden der Lösung ...):

Zuerst musste ich den Namen des Geräts herausfinden (in meinem Netbook ist nur eines verbaut, also kein Grund vorher noch das Gerät mit amixer umzustellen).
Code:
pacmd list-cards | grep 'name:'
In meinem Fall war das "alsa_card.pci-0000_00_1b.0".

Danach brauchte ich die Namen der Profile. Den folgenden Befehl habe ich 2x ausgeführt, zwischendurch habe ich die beiden Profile (Netbooklautsprecher / Surround System) umgestellt.
Code:
pacmd list-cards | grep 'active profile'
Profil 1 (Netbooklautsprecher): "output:analog-stereo+input:analog-stereo"
Profil 2 (Surround System): "output:hdmi-surround71-extra1+input:analog-stereo"

( Beides kann man auch in einem Schritt machen, einfach die greps weglassen und dann eben manuell nach dem Gerät und den Profilen suchen. )

Mit den Informationen habe ich pactl gefüttert und mir dann zwei ausführbare Skripte mit den Profilen auf dem Desktop abgelegt.
Code:
pactl set-card-profile alsa_card.pci-0000_00_1b.0 output:hdmi-surround71-extra1+input:analog-stereo
Code:
pactl set-card-profile alsa_card.pci-0000_00_1b.0 output:analog-stereo+input:analog-stereo

Irgendwann baue ich mir noch ein Skript, das die aktuelle Einstellung abfragt und dann auf das jeweils andere Profil umstellt, im Moment bin ich mit der Lösung aber erstmal zufrieden. :)

Edit:
Der Spieltrieb ...
Hier ist das Skript zum automatischen Umstellen:
Code:
#!/bin/sh
Profil=$( pacmd list-cards | grep 'active profile' )
if [ "$Profil" = "    active profile: <output:hdmi-surround71-extra1+input:analog-stereo>" ]
then
pactl set-card-profile alsa_card.pci-0000_00_1b.0 output:analog-stereo+input:analog-stereo
else
pactl set-card-profile alsa_card.pci-0000_00_1b.0 output:hdmi-surround71-extra1+input:analog-stereo
fi

Uff, ich bin ganz schön eingerostet. Mein letztes Shell-Skript habe ich vor knapp 20 Jahren gebastelt, ich musste tatsächlich nachschlagen, wie ich die Variablenzuweisung machen muss ...

Nachtrag:
Achtung - das Skript funktioniert nur, wenn nur ein Ausgabegerät vorhanden ist - sind es mehrere, liefert list-cards mehrere Zeilen (1 pro Ausgabegerät) zurück und das if läuft immer in den else Zweig.
Das kann man abfangen, aber für mein Netbook brauche ich das nicht. 😜
 
Zuletzt bearbeitet:
Oben