Is there a way to change individual application volumes from the terminal? I found a way to change the master volume which is amixer -D pulse sset Master 50%
but I would like to be able to change volumes for individual applications like is possible in pavucontrol
. My usage would be for scripting.
2 Answers
I found the solution hidden in a comment on unix.stackexchange. Use pactl list sink-inputs
to find your application's sink input number. Then use pactl set-sink-input-volume [sink number] [volume percent]
to set the volume of your application.
-
This one is great. I can now fade out spotify with
for ((i=50;i<100;i+=1)); do; pactl set-sink-input-volume 28 $i%; sleep 0.05; done
Just need to know how to get spotify sink in a more assuring way. Jan 23, 2016 at 1:23 -
I had used this command to make a script to use the pedals from an old driving wheel to control music playback volume. I put the script up here. Check out the function
getSink
to see a way to do it in a script. Not that the second line in it uses the variable $SINKAPP. you can substitute your process name here.– AkBKukUFeb 9, 2016 at 18:21 -
Percentage no longer works. The max value is 0x10000. man.archlinux.org/man/… Sep 14, 2023 at 3:29
This function easily sets the volume of any app.
function pacmd-set-app-volume() {
local player="$1"
local volume="$2"
firstPlayerSinkIndex="$(pacmd list-sink-inputs | awk '/index:|application.name |application.process.binary / {print $0};' | grep -iB 1 "$player" | awk '/index:/ {print $2; exit}')" # get specific app sink
[[ $firstPlayerSinkIndex ]] && pacmd set-sink-input-volume "$firstPlayerSinkIndex" "$((volume*65536/100))" # 100% → 65536
}
Could be added to .bashrc
/.zshrc
.
Usage:
pacmd-set-app-volume <loosly_app_name> <volume_percentage>
For e.g.:
pacmd-set-app-volume "MPV Media Player" 55 # Or "mpv" "75"
man <application>