Ubuntu – AudioEngine D3 USB DAC – volume either 0% or 100% via volume keyboard keys, alsamixer works fine

alsaaudio-jacksoundusbvolume-control

Like the title says, I have a USB AudioEngine D3 DAC and headphone amplifier with software volume control. I can control the volume fine via alsamixer in a terminal, but that is rather inconvenient. I would like to use the volume control keys on my keyboard as they are meant to be used, but they only set the volume to 0% or 100%. When I press the volume up key once, the volume jumps to 100%, and when I press the volume down key, it jumps to 0%.

Adjusting volume level via the "Settings -> Sound" GUI means I have 0% volume until I drag the volume bar all the way to the right (100%), at which point I get 100% volume.

alsamixer shows the volume at 0% or 100% (as expected, I suppose) when I adjust my sound via sound settings or volume control keys. Setting the volume level to something reasonable via alsamixer results in the "Settings -> Sound" GUI showing 100% volume on its slider bar.

How can I get volume control keys working properly? I'm running Ubuntu 18.04 LTS.

Best Answer

I just got the D3 today and had this exact same problem. Check out the top answer on this thread. For me, these instructions worked:

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).

I had a block in the config file that looked like this:

### Automatically load driver modules depending on the hardware available
.ifexists module-udev-detect.so
load-module module-udev-detect tsched=0
.else
### Use the static hardware detection module (for systems that lack udev support)
load-module module-detect
.endif

Then I simply added ignore_dB=1 to the end of each load-module line, so that the two lines looked like

load-module module-udev-detect tsched=0 ignore_dB=1
...
load-module module-detect ignore_dB=1
Related Question