How do I change the way Ubuntu adjusts my volume mixer levels?

I've had a mildly annoying problem with my sound for quite awhile now, and I've finally decided it's time to do something about it.

Every time I adjust the main volume slider in the toolbar, or use my volume hotkeys on my laptop, Ubuntu adjusts my mixer levels in a strange way. When I open GNOME ALSA Mixer, I notice that there are three output sliders for my SigmaTel STAC9200: Master, PCM, and LFE. Master and LFE both have Mute checkboxes.

When I press my volume up hotkey once, Master and LFE unmute, and the sliders for PCM and LFE jump up about halfway. The Master slider stays at zero. Another press brings PCM and LFE up to about 4/5, and Master remains unmoved at the bottom.

Ubuntu doesn't move Master until PCM and LFE are maxed out, which occurs between about 15%-20% on the main output mixer.

The effect of this is that I don't get any sound at all until about 15%-20% (since Master is at zero), and when I cross that threshold, I immediately get a loud bassy sound (from the LFE apparently). If I use headphones, I still don't get any sound until that threshold, but at least it doesn't blast me when I do get sound.

Is there anything in PulseAudio configuration or anywhere else that could change the behavior of my output mixer?


Solution 1:

There are many layers in the audio stack that could contribute to this symptom. Most directly is the behavior that PulseAudio defaults to, and you can read about that at http://pulseaudio.org/wiki/PulseAudioStoleMyVolumes. You can work around some instances using the instructions I contributed at https://wiki.ubuntu.com/DebuggingSoundProblems/KarmicCaveats#Volume%20range%20anomalies:

Volume range anomalies

The latest version of PulseAudio tries to control the volume of the sound card using its mixer controls. Usually this works just fine, but in some cases this does not work properly. (Whether this is PulseAudio's or ALSA's fault is beyond the scope of this wiki page. Some more background information is here.)

Diagnosis

You experience any of the following:

  • Jumps in volume, e g if everything below 20% is muted, and 21% is very loud.
  • Overdriven (distorted sound) if the volume is set above a certain (low) level
  • No volume changes in parts of the range, e g if 20% is just as loud as 70%.

Fix / Workaround

There are a few variables which control how PulseAudio controls the volume. You can either edit /etc/pulse/default.pa (you'll have to be root to do that) to change the behavior for all users, or copy that file to ~/.pulse/default.pa and then edit that file, to change behavior for the current user only.

Open the file mentioned above. Find the row saying load-module module-udev-detect and change it to:

load-module module-udev-detect ignore_dB=1

To try your changes, restart PulseAudio with the following command:

killall pulseaudio

PulseAudio will then autospawn (restart itself).

You may find that the above workaround is insufficient, in which case you may configure PulseAudio to control only one mixer control, e.g., PCM (cf. alsamixer). Find the row saying #load-module module-alsa-sink and change it to:

load-module module-alsa-sink control=PCM

(remember to remove the # in the beginning of the row!) Optionally replace PCM with the mixer control you want PulseAudio to control.

You will then need to killall pulseaudio as above and allow the daemon to autospawn.

Finally, whether this anomaly is actually a bug requires you to use ubuntu-bug alsa-base.

Solution 2:

For me, the current top answer of adding ignore_dB=1 to PulseAudio's config, fixed volume the level starting from 0 but it still got loud way too quickly.

After some more playing I found my generic USB audio device had multiple output "profiles", with names like "analog-stereo" and "iec958-stereo". Even though the physical device just has a 3.5mm jack output changing to the "iec958-stereo" profile fixed both the volume scaling and offset problems.

I played with the different profiles using the pavucontrol GUI tool. Profile selection is in the "Configuration" tab. I then used advice in this post to make things permanent: https://unix.stackexchange.com/questions/462670/set-default-profile-for-pulseaudio