[pulseaudio-discuss] Mic Boost on AC97 audio causes bad behavior of mic volume control
martin.wilck at ts.fujitsu.com
Wed Apr 29 12:12:01 PDT 2015
On Mi, 2015-04-29 at 19:17 +0300, Tanu Kaskinen wrote:
> > The graphical volume controls don't reflect this; thus user control
> > input volume is almost impossible at higher levels than 25%. Volume will
> > appear to change non-predictably to users.
> PulseAudio compensates coarse hardware volume by applying software
> volume when necessary. This means that users get a smooth volume curve.
> For example, you presented a nice table of different volume levels, and
> there was this line:
> PA(%) PA(dB) Captu Boost Capture+Boost-66dB
> 56% -15.00 30.00 12.00 -24.000000
> The ideal situation would be where the second and the last column would
> be equal, but in this case there's a 9dB difference. But no worries,
> PulseAudio compensates that by amplifying the signal by 9dB in software.
OK, I didn't know that. Thank you. I still think that Pulseaudio should
rather apply the hardware volume control in "coarse first, fine later"
order, eliminating the need for software volume compensation (which
would infer distortion unless I am mistaken).
> Did you observe some volume problems by ear, or did you only notice
> "weird behaviour" by looking at the alsa mixer?
I did observe something by ear, but it's a long story. Since you asked
for it, the full story is related to
and goes like this:
I (have to) run Microsoft Lync for telephone conferencing in a Windows
guest on Qemu/KVM under Linux. I use Qemu's spice audio protocol to link
my sound sources/sinks to the Windows guest. The Windows guest sees an
emulated Intel HD Audio codec (ICH6 or ICH9) that has a 74dB volume
scale for capture. For unknown reasons, Windows uses only the upper
~30dB. Therfore setting the Windows volume slider to 1% lets the "HW"
volume in the emulated HD audio chip jump ~40% immediately. See the
above qemu-devel post for details.
The libvirt spice server communicates this percentage to PA. PA is
using the "48dB Capture + 36dB Boost" = 84dB volume scale. Setting this
to 40% results in Capture=+30dB (maximum) and Boost=+12dB. Again, this
happens if I set just 1% volume under Windows, about the lowest possible
Microsoft Lync, in turn, has the unpleasant habit to try and regulate
input volume automatically. This fails utterly because a minimal change
in the windows guest causes the HW volume to jump back and forth. The
end result was that my phone peers complained about miserable sound
quality (noise) on my part. Basically I had to stay mute.
This problem is caused by a combination of various things:
1) the weird behavior of the windows volume control, and the fact that
Lync's auto-volume-adjustment can't be switched off
2) the unrealistically large volume scale of the emulated "Capture"
device in QEMU
3) the fact QEMU doesn't have a "dB" volume scale, rather all controls
work in arbitrary "percentage" units
4) the merging of "Capture" and "Boost" by PA, blowing up the volume
scale from 48dB to 84dB.
By now, I have combined various measures in order to work around this
- for 4): Using a fixed value for "Mic Boost" in PA makes the overall
volume scale of the input control smaller, mitigating the problem
- for 4): Switching off PA's "flat volumes" avoids Lync->Windows
guest->QEMU->spice->PA cranking up the hardware volume control of the
- for 2): I applied a QEMU patch (see thread above) to present a
smaller, more realistic Capture amplifier to the guest, but that patch
has been rejected by the QEMU folks so far because it's a guest-visible
This yields a big improvement. I can't do anything about 1), and fixing
3) would be project too large for me at the moment.
While I was pulling my hair trying to understand what happened in this
complex scenario, I found the volume control strangeness that I have
tried to report here. If only that was fixed by reverting commit
e6051cdf, the volume control would at least behave more "smoothly". It
wouldn't suffice to fix my problem though.
More information about the pulseaudio-discuss