HowTo: Set media volume in custom steps (cmdline)

Hello, here is an easy way to set media volume in custom steps (1-100%) but needs command line and audio needs to play:
e.g. add to ~/.profile

pa_set_vol() {
SINK_NO=$(LANG=C pactl list sink-inputs | grep "Sink Input #"|cut -d \# -f 2)
VOL_PER="$1"
pactl set-sink-input-volume $SINK_NO $VOL_PER%
}

works for speaker and e.g. bluetooth media volume, if you use volume slider old value for that percentage is used

e.g.

###### BT
[defaultuser@Fairphone4 ~]$ pa_set_vol 68
[defaultuser@Fairphone4 ~]$ LANG=C pactl list sink-inputs
Sink Input #751
....
	Volume: front-left: 44564 /  68% / -10.05 dB,   front-right: 44564 /  68% / -10.05 dB
...
[defaultuser@Fairphone4 ~]$ pa_set_vol 72
[defaultuser@Fairphone4 ~]$ LANG=C pactl list sink-inputs
Sink Input #751
...
	Volume: front-left: 47185 /  72% / -8.56 dB,   front-right: 47185 /  72% / -8.56 dB
	        balance 0.00
	Buffer Latency: 160522 usec
	Sink Latency: 49068 usec
	Resample method: speex-fixed-2
	Properties:
		media.name = "Playback Stream"
		application.name = "Media"
		native-protocol.peer = "UNIX socket client"
...
###### speaker

[defaultuser@Fairphone4 ~]$ LANG=C pactl list sink-inputs
Sink Input #751
...
	Format: pcm, format.sample_format = "\"s16le\""  format.channels = "2"  format.rate = "48000"  format.channel_map = "\"front-left,front-right\""
	Corked: yes
	Mute: no
	Volume: front-left: 19289 /  29% / -31.87 dB,   front-right: 19289 /  29% / -31.87 dB
...
[defaultuser@Fairphone4 ~]$ pa_set_vol 55
[defaultuser@Fairphone4 ~]$ pa_set_vol 29


####### BT again
[defaultuser@Fairphone4 ~]$ LANG=C pactl list sink-inputs
Sink Input #751
	...
	Volume: front-left: 47185 /  72% / -8.56 dB,   front-right: 47185 /  72% / -8.56 dB
	        balance 0.00
	Buffer Latency: 105479 usec
	Sink Latency: 0 usec
...

4 Likes