ist es möglich unterschiedliche soundquellen per hotkey leiser/lauter zu machen ?
folgendes szenario:
quelle 1 : discord/teamspek
quelle 2 : gamesound
quelle 3 : spotify
im normalfall hat man das ja einigermassen eingestellt von der lautstärke her, aber was wenn mir meine frau grad zu laut im discord is ? Bei eurotruck simulator mitten auf der autobahn anhalten un kurz in discord tabben is keine wirkliche option, grad wenn man convoy fährt. Selbes gilt wenn mir der lkw zu laut is. Spotify kann man zur not mitm smartphone/tablet lauter leiser playlist usw, aber Handy am steuer und so
pactl set-sink-volume INDEX +5%
pactl set-sink-volume INDEX -5%
Den INDEX des jeweiligen Sinks bekommst mit:
pactl list sink-inputs
Man könnte es so herausfiltern:
pactl --format=json list sink-inputs | jq -r '.[] | .index,.properties["media.name"]'
Dann hast du den Index und den Medien-Namen. Dann in einem Skript den Medien-Namen festlegen, da dieser in der Regel gleich bleibt und dann den jeweiligen INDEX dazu verwenden in dem ersten Befehl.
prinziepiell bin ich ja immer bisschen skeptisch bei sachen wo ich so gar nicht weiss was es tut.
pactl --format=json list sink-inputs | jq -r ‘.[] | .index,.properties[“media.name”]’ z.B. Der soll mir index und media.name anziegen, ohne das ich des selbst raussuchen muss oder ? ich post mal die console, da kannst selbst schauen was dort passiert.
Genau. Die Herausforderung hier ist nicht das Setzen der Lautstärke, sondern das herausfiltern des korrekten Sinks der Applikation. Das kann sich bei manchen Programmen ändern. Bei Spotify sollte es aber kein Problem sein.
Man kann auch nur die Applikation nehmen, aber dann kann es sein, dass du mehr als einen Sink hast. Dann musst du alle Sinks leiser/lauter stellen parallel. Habe folgendes getestet und es funktioniert, außerdem habe ich ein paar Kommentare hinzugefügt, damit man es besser versteht als “Normalo”:
#!/usr/bin/env bash
# Prüfe, ob jq installiert ist:
if [[ ! -x /usr/bin/jq ]]; then
echo "Bitte jq installieren."
if [[ -x /usr/bin/notify-send ]]; then
notify-send --urgency=critical "Bitte jq installieren."
fi
exit
fi
# Beginne eine Schleife und lese jede Zeile einzeln
while read line; do
# Lese jede Zeile ein in ein Array und trenne die Werte mit einem Doppelpunkt
mapfile -d':' -t <<<"$line"
# Vergleiche den zweiten Wert im Array mit angegebenen Anwendungsnamen
if [[ "${MAPFILE[1]}" =~ "$1" ]]; then
# Falls zutreffend, setze angegebene Lautstärke mittels Index
pactl set-sink-input-volume ${MAPFILE[0]} $2
fi
# Leite gefilterte pactl Ausgabe in die While-Schleife.
done < <(pactl --format=json list sink-inputs | jq -r '.[] | "\(.index):\(.properties["application.name"])"')
# Benutzung:
# $0 'Anwendungsname' 'Lautstärke in Prozent'
## Statisch:
# $0 'Anwendungsname' '50%'
# $0 'Anwendungsname' '10%'
## Dynamisch:
# $0 'Anwendungsname' '+5%'
# $0 'Anwendungsname' '-5%'
Du speicherst das irgendwo in deinem Home-Verzeichnis und als Shortcut-Kommando kannst du folgendes angeben:
/Pfad/zu/script Firefox +10%
Das erhöht dann die Lautstärke aller Firefox “Sound-Eingaben” um 10%. Solltest aber vorher prüfen welche Anwendungsname tatsächlich in PulseAudio angegeben wird.
das scheint zu funktionieren. Das problem lag wohl doch nicht zwischen meinen ohren
mit installiertem jq wird da jetzt auch nen schuh draus. Ich werde das die tage unter real bedingungen testen.
Falls das jemand nachbasteln möchte !!!
bei pactl set-sink-input-volume ${MAPFILE[0]} $2 muss nen exit mit rein. der hört sonst nicht auf mit lauter/leiser machen. Fester wert geht, aber +x% oder -x% geht ins unendliche.
Ich bedanke mich für die hilfe. Wenn ichs in ruhe getestet hab werd ich den thread schliessen.
edit
funzt genauso wie es soll. Hab es ma als erledigt markiert. Allerbesten dank nochmal !