Mit PulseAudio ist es möglich, das Volumen auf Anwendungsbasis zu verwalten, aber ich finde es kaum sinnvoll, es manuell zu tun. Was ich lieber hätte, ist Folgendes: Ich höre normalerweise Musik, möchte aber manchmal ein YouTube-Video ansehen - dann muss ich die Lautstärke der Musik manuell anhalten oder verringern, oft vergesse ich, sie wieder einzuschalten, wenn Das Video ist vorbei.
Was muss ich tun, um die Lautstärke eines Audiostreams (der Hintergrundmusik) automatisch zu verringern, wenn eine andere Anwendung Sound wiedergibt?
pulseaudio
Pantalaimon
quelle
quelle
Antworten:
Keine gute Antwort, aber ich könnte genauso gut die Probleme / Möglichkeiten beschreiben, die ich gefunden habe.
Ich kann keine Möglichkeit finden, ein Shell-Skript dafür zu schreiben. Es gibt keine (dokumentierte) Möglichkeit, mit
pactl
/ pro Anwendungsvolumen zu ändernpacmd
. Ich kann auch nicht feststellen, wann ein neuer Client hinzugefügt wird, ohne wiederholt folgende Abfragen durchzuführen:Pulse Audio kann so eingestellt werden, dass es sich anmeldet.
syslog
Eine Möglichkeit besteht darin, ein Skript mit dem Namen viarsyslog
aufzurufen (sofern die Distribution dies hat). In meiner Antwort hier finden Sie Hinweise dazu. Dies hängt natürlich von derpulseaudio
Protokollierung von Informationen über neue Clients ab.Dies ist definitiv machbar, das
pavucontrol
Programm ist ein hervorragendes Beispiel dafür. Derzeit sieht es jedoch so aus, als gäbe es keine CLI, die dieselben Aufgaben ausführen könnte. Daher ist wahrscheinlich eine direktere Schnittstelle zurpulseaudio
API erforderlich .Aktualisieren
Wenn man sich den Link von @ derobert ansieht , ist das Rollenducking- Modul leicht zu aktivieren, erfordert jedoch die Angabe von
media.role
Eigenschaften. Ich kann sowieso nicht finden, was das sind! Es ist wahrscheinlich, dass sie nicht für viele Streams definiert sind (viele Programme glauben immer noch, dass sie ALSA verwenden). Wenn es eine Möglichkeit gibt, diese aufzulisten und sie möglicherweise so zu konfigurieren, dass sie zugewiesen werden (möglicherweise basierend auf dem Namen des Prozesses), ist dies der einfachste Weg.Update 2
media.role
kann über diePULSE_PROP
Umgebungsvariable eingestellt werden. Z.B:Dies kann für eine andere Anwendung festgelegt werden, indem
.desktop
Dateien bearbeitet und / oder Wrapper-Skripte erstellt werden. Dies scheint jedoch kein sehr guter Weg zu sein.quelle
pactl set-sink-input-volume 1384 100%
wobei 1384 die Clientnummer ist. Das Geheimnis ist, dass sie als "Sink-Eingänge" für Wiedergabeclients (und als Quellausgänge für Aufnahmeclients) bezeichnet werden.pactl list sink-inputs
anstelle der Client-Nummer verwende, funktioniert es.client
scheint eine breitere Gruppe zu sein,sink-input
da sie mehr als nur Anwendungen enthält, die Sound abspielen. Ich kann keine Puls-Audio-Dokumentation finden, in der diese Begriffe richtig definiert sind.Die Hinweise in den Kommentaren von @derobert und @ Graeme sind hilfreich, aber das Ausgabeformat ist unpraktisch. Deshalb habe ich einen Parser geschrieben, in den ich ihn umwandeln kann
0 Name 0.0
, der einfacher zu analysieren ist. Dabei habe ich auch einen Helfer hinzugefügt, um die Lautstärke einfach zu ändern.Es ist möglich, dies in eine Schleife einzubetten und zu tun, was Sie wollen. Dies ist in der Nim- Sprache.
x64-Binärdatei in dieser Liste für Faulenzer: https://gist.github.com/flaviut/9feb9a75bd452e6ddd03
quelle