Mit hotkey verschiedene soundquellen steuern

ahoi,

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 :smile:

hier mal was pactl info ausspuckt

https://pastebin.com/u3wJDsuZ

Ich hab mal iwo sone box gesehen mit der man hardwareseitig verschiedene kanäle steuern konnte. Also muss das ja irgendwie gehen.

Hat jemand ne idee wie man das am einfachsten umsetzen kann ?

Ja. Sowas wie:

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.

Als Vorlage mal das hier:

#!/usr/bin/env bash
while read line; do 
mapfile -d':' -t <<<"$line"
[[ "${MAPFILE[1]}" != "MedienName" ]] && continue
[[ "${MAPFILE[1]}" == "MedienName" ]] && \
pactl set-sink-volume ${MAPFILE[0]} +5% && exit
done < <(pactl --format=json list sink-inputs | jq -r '.[] | "\(.index):\(.properties["media.name"])"')

Nicht getestet, nur ein gedanklicher Prototype.

Diesen Script dann unter einem “Hotkey” festlegen.

Beziehungstipps gehören nicht ins Forum, aber vielleicht wäre es besser, wenn ihr das unter euch klärt.

sorry hat bisserl länger gedauert.

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.

https://pastebin.com/3xtjHVxt

aber mal zum verständis, in diesem fall wäre firefox index 0 mit dem media.name andis…
und spotifiy 1 mit Spotify ?

habe damit leider nix zu stande bekommen, was mich meinem ziel näher gebracht hätte.

Danke für deine hilfe, aber ich glaub das is mir ne nummer zu hoch. Schönes wochenende

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.

jq ist nicht installiert :wink:

1 Like

das scheint zu funktionieren. Das problem lag wohl doch nicht zwischen meinen ohren :rofl:

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 !

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.