Audio volume doesn't change

I had the same issue on my Laptop. (BTW my laptop is thinkpad x1)

When I checked the alsamixer I noticed that like you said, it was the PCM changes that affect volume and not Master.

I come upon this solution, and It worked for me.

In short, find this file:

/usr/share/pulseaudio/alsa-mixer/paths/analog-output.conf.common

And add these three lines:

[Element Master]
switch = mute
volume = ignore

Directly above of this part of code:

[Element PCM]
switch = mute
volume = merge
override-map.1 = all
override-map.2 = all-left,all-right

And Restart.


EDIT: pactl load-module module-alsa-sink control=PCM should result in pulseaudio seeing a new output device that will control the PCM volume. If changing this device allows for proper control of audio output volume, you can add a line load-module module-alsa-sink control=PCM to /etc/pulse/default.pa

PCM (pulse code modulation) occurs at ALSA kernel level, and is responsible for sampling and conversion of digital signals from software to analog ones heard out of your hardware (PCM Playback channel), as well as analog ones coming in from your microphone (PCM Capture) to their digital form.

Linux audio output and volume control allows for a lot of versatility, but it can make thinks more complicated and more difficult to troubleshoot as well. For output, the flow is more or less like this:

START:Application audio you wish to hear produces digital audio data

  > Pulse app and libraries (user control with pavucontrol happens here and changes are then sent to the pulse engine server) 

     > Pulse engine server (the core of Pulseaudio package)  

         >  ALSA Kernel API (alsamixer control, PCM, MIDI and Sequencer API) 

              > ALSA kernel driver processes data to make it understandable to our hardware

END: Speaker output

I think pactl from pulseaudio package should get you started and on the right track, please try

$pactl set-sink-volume $(pactl info | grep -i Sink | cut -d ':' -f2) 25%

and let us know if the audio volume gets set to 1/4 of the range, or again jumps to 100%.