Bug#1053441: pavucontrol: Speaker balance destroyed by lower clamping

Eric Towers fuzzyeric at gmail.com
Wed Oct 4 03:42:31 BST 2023


Package: pavucontrol
Version: 5.0-2
Severity: normal
X-Debbugs-Cc: fuzzyeric at gmail.com

Dear Maintainer,

I have a 5.1 speaker system.  The speakers are not and cannot be equally distant, so I set different volumes for each speaker in the sink USB Audio Speakers.  Since I find no way to set a virtual sink on the input of this sink that enforces the loudness ratios on the 6 channels, I use
    pactl -- set-sink-volume @DEFAULT_SINK@ 55% 55% 70% 100% 89% 100% 100% 100% to set these ratios.  Note that the front left and front right channels are set to the lowest volume and the rear left to the next lowest volume and that these are -15.58 dB, -15.58 dB, and -9.29 dB, respectively.

I have a USB volume control that sends mute, volUp, and volDown keyboard events.  Since I want to retain the relative volumes, I have set these keyboard events to, respectively,
    pactl -- set-sink-mute @DEFAULT_SINK@ toggle
    pactl -- set-sink-volume @DEFAULT_SINK@ +1dB
    pactl -- set-sink-volume @DEFAULT_SINK@ -1dB
(Offsetting by % or "magic pulseaudio" cubic values does not retain relative loudness.)  I'd like to change the volume by more that only +/- 1 dB, but using a larger increment with rapid volume changes is likely to exhibit the following defect.

When I turn the volume down far enough by this method (or equivalently using the above pactl commands repeatedly), so that the lowest three volumes are -222.15 dB (although the same number of dB should have been subtracted from all three) and the remainder are greater than -211 dB, turning the volume back up does not restore the relative loudness of the three channels that all clamped at -222.15 dB.  In fact, if it is reduced until all volumes clamp at -222.15 dB, all volumes raise together.  In short, arithmetic does not work: subtracting and then adding the same numbers of 1 dBs does not return the speakers to the same relative loudness.
A similar behaviour happens when hitting the upper clamp at 3276800%(270.93 db), destroying speaker balance.

I have not perfomed this test on a 2-channel output, but I suspect one could recreate the behaviour in that simpler setting with the two channels set to wildly different relative volumes, then pushing the volume up or down far enough to cause clamping, eliminating the difference.

Interestingly, until recently, the bahaviour in pavucontrol was to display "0%(-\infty dB)" when volumes got below about -120 dB, with the behaviour that once a finite number of negative increments had somehow sent the volume to -\infty, it was permanently trapped there and no amount of pactl ... +1dB would ever change that channel's volume again.  Additionally, this older version would upper-clamp at 150%, distorting balance when quickly raising volume overshot this bound.

PulseAudio does not document a virtual sink that could permanently store the attenuations to balance speakers.  pavucontrol displays the failure of PulseAudio to retain speaker balance and provides no mechanism to lock-in or enforce this balance.  pavucontrol is the only UI suitable for acquiring these ratios from users, but has no method to do so.

-- System Information:
Debian Release: 12.1
  APT prefers stable
  APT policy: (900, 'stable'), (500, 'stable-updates'), (500, 'stable-security'), (400, 'testing')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 6.1.0-10-amd64 (SMP w/48 CPU threads; PREEMPT)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages pavucontrol depends on:
ii  libatkmm-1.6-1v5         2.28.3-1
ii  libc6                    2.36-9+deb12u1
ii  libcanberra-gtk3-0       0.30-10
ii  libcanberra0             0.30-10
ii  libgcc-s1                12.2.0-14
ii  libglib2.0-0             2.74.6-2
ii  libglibmm-2.4-1v5        2.66.5-2
ii  libgtk-3-0               3.24.37-2
ii  libgtkmm-3.0-1v5         3.24.7-1
ii  libjson-glib-1.0-0       1.6.6-1
ii  libpulse-mainloop-glib0  16.1+dfsg1-2+b1
ii  libpulse0                16.1+dfsg1-2+b1
ii  libsigc++-2.0-0v5        2.12.0-1
ii  libstdc++6               12.2.0-14

Versions of packages pavucontrol recommends:
ii  pulseaudio  16.1+dfsg1-2+b1

pavucontrol suggests no packages.

-- no debconf information



More information about the pkg-pulseaudio-devel mailing list