125

I want to disable the way the microphone lowers itself depending on the input. Here is an image:

enter image description here

The microphone started at 100% and slowly started to drop to where the image is showing. This is because of either a background noise or the user raising their voice. In any case, I would like to prohibit this behavior because when it gets too low, the need to raise the voice will be actually needed.

So is there an option or configuration file where one can edit and change this behavior?

This is not related to only one app but several, ranging from Skype to Google Hangouts, Empathy to Teamspeak and more. So please no answers mentioning only one app if the solution does not solve the problem for others.

the pulseaudio app (gui and terminal) was already used. Alsamixer was also used. In both cases, adjusting the microphone level did not help. The auto adjust always happens when anyone speaks, does not even need to be someone speaking loud, they just need to speak and after a couple of seconds the mic level will start auto adjusting. I repeat, this is not a 1 app problem but several, so a common solution is better than a 1 for each app (Which we are talking about more than 50 apps).

5

13 Answers 13

52

Not sure if this applies to everyone, but if you use any kind of web conference / video chat service in Chrome / Chromium such as Google Hangouts, there's a good chance it uses the WebRTC protocol. Unfortunately the WebRTC implementation in Chromium comes with a handy “feature” called Automatic Gain Control that tends to screw with your microphone volume. Unless the web app itself gives you an option to disable it, there is otherwise no way turn it off, and Chrome developers don't want to add a global “off switch” for it.

What I ended up doing was to use @lelandbatey's solution. Since I was using PulseAudio, I used pacmd instead of amixer:

while sleep 0.1; do pacmd set-source-volume alsa_input.???-?????.analog-stereo 90000; done

Note that 65535 corresponds to 100%, so 90000 is about 135%. The name of the device (alsa_input.???-?????.analog-stereo) should be substituted with whatever you find by running pacmd list-sources | grep name::

name: <alsa_input.???-?????.analog-stereo>
5
  • If AGC didn't suck so much I wouldn't mind. But it adjusts my internal mic until you can hear the fan like a jet engine no matter what I do. Sigh. Might have to run web based video conferencing through firefox because of this. Apr 29, 2017 at 0:03
  • 9
    Somebody made an open source extension Disable Automatic Gain Control for Chromium based browsers that fixes this. It's open source (code here). This is what I'm using now and it works very well. Maybe you can add it to your answer to make it more prominent?
    – nh2
    Jan 16, 2021 at 18:21
  • I used this technique and it works very well, but the CPU usage increases a lot because of the loop May 20, 2021 at 20:08
  • thanks @nh2.. you should create a separate answer for that extension.. it's working fine for me.
    – Krishna
    Dec 22, 2021 at 5:40
  • Not a permanent solution. You need to run this every time you are using a mic. Aug 4, 2023 at 12:34
29

For Skype:

Skype > Options > Sound devices
and Uncheck Allow skype to automatically adjust my mixer level

1
  • 8
    There is similar option in zoom . Setting -> Audio -> Uncheck "Automatically adjust microphone volume". My issue is resolved this way. Oct 8, 2021 at 7:23
27

This worked for us (we're not using Skype):

Disable auto adjusting of gain on mic:

  1. Edit as root: sudo editor /usr/share/pulseaudio/alsa-mixer/paths/analog-input-internal-mic.conf
  2. Edit as root: sudo editor /usr/share/pulseaudio/alsa-mixer/paths/analog-input-mic.conf
  3. Under "[Element Internal Mic Boost]" set "volume" to "zero".
  4. Under "[Element Int Mic Boost]" set "volume" to "zero".
  5. Under "[Element Mic Boost]" set "volume" to "zero".
6
  • after restarting stopped working :c Oct 21, 2019 at 16:51
  • Similar answer: askubuntu.com/questions/689209/…
    – nh2
    Nov 6, 2019 at 0:25
  • By default this file is not available to have it on system use sudo apt install pulseaudio
    – 4xy
    Mar 22, 2021 at 17:22
  • I tried a lot of solutions that did not work. But this one did work. Sep 17, 2021 at 15:32
  • This answer actually works only thing you need to observe carefully is the file you are going to edit. For internal mic. the given file is perfect but if you are doing this change for headset / headphone you need to to look inside this folder for the proper file to be edited /usr/share/pulseaudio/alsa-mixer/paths/ For a regular TRRS headphone I edited analog-input-headphone-mic.conf and analog-input-headset-mic.conf. AUTO VOLUME adjustment is an evil get rid of it right away!
    – Vinay
    Dec 31, 2021 at 13:42
10

Set your microphone to Unamplified 100% Try installing pulse audio volume control:

sudo apt-get install pavucontrol

And then open: pavucontrol

6
  • First for skype, "Skype" -> "Options" -> "Sound devices" -> Uncheck "Allow skype to automatically adjust my mixer level". Second in pavucontrol ->"Input Devises" set level to "Base"
    – burtsevyg
    Sep 15, 2015 at 20:17
  • 7
    Where in pavucontrol can I set that?
    – golimar
    Jan 28, 2020 at 15:58
  • 7
    Using this app I can see the microphone's slider jump on its own. I can manually move it around, but some minutes later it jumps back. Oct 6, 2020 at 6:53
  • @PaŭloEbermann were you able to fix it?
    – krionz
    Feb 27, 2021 at 1:08
  • @krionz Somewhat. With more googling at some other places I found that's some functionality of Chromium which tries to adjust the input volume when someone is talking. Chromium devs think it's Google Hangout's/Meet's job to disable this, and I guess Google Meet devs don't care. So I basically used Rufflewind's answer to just reset the input volume all the time.. It did get better when I got a new computer in December, with where the basic volume settings are completely different, so I didn't need to do this since then. Feb 27, 2021 at 20:01
10

The answer from this "duplicate" question is for me the best, I let the credits to the person who answered

In the configuration file /usr/share/pulseaudio/alsa-mixer/paths/analog-input-internal-mic.conf (you might have to look for the correct file for your microphone), I changed the volume = part to 100 which is the percentage instead of merge

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

to

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

and after a sudo alsa force-reload, applications don't magically change the microphone volume anymore.

3
  • This didn't work for me. Input volume still lowers when a loud sound is encountered.
    – Cerin
    Jul 9, 2020 at 2:57
  • Did work for Linux Mint 19.3 5.4.0-48-generic
    – Yevgen
    Nov 19, 2020 at 13:29
  • 7
    Did not work on Ubuntu 20.04
    – Suor
    Feb 6, 2021 at 8:17
6

I am still working on this annoying issue (An option should be included on the Input Devices tab to "Force" the input volume to stay where the user wants to set it. This would apply for specific cases where the user knows what volume it needs for a particular app and the auto adjust features does not work correctly for it. Anyway, to set it to "semi-manual" mode instead of auto adjust for Google Apps like Hangouts, created/edit the file options in:

nano ~/.config/google-googletalkplugin/options

and add the line:

audio-flags=1

or simply run the following line:

echo "audio-flags=1" > ~/.config/google-googletalkplugin/options

Save the file and close any Google related apps. The volume for the input device should stop auto adjusting. This works 50/50 this is why I am looking for a permanent solution.

1
  • 3
    The audio-flags configuration option no longer has any effect in recent versions of Google Hangouts, which was upgraded to use the WebRTC protocol. See my answer for explanation.
    – Rufflewind
    Sep 26, 2016 at 18:51
6

I fixed the issue on my machine by disabling any other mics on my desktop. I found if the camera mic picked up audio, it dropped the gain on the headset. I disabled the camera mic and the headset is steady now.

Not sure if it helps, but thought it worth mentioning.

0
4

In PipeWire (using WirePlumber), it can be done very easily.

I stopped Ferdium clients from adjusting the microphone, it should be easy to adapt to other clients:

The basics:

  • Create this folder $HOME/.config/wireplumber/main.lua.d
  • Create file named 99-stop-microphone-auto-adjust.lua in that folder
  • Put this content in the file
    table.insert (default_access.rules,{
        matches = {
            {
                { "application.process.binary", "=", "ferdium" }
            }
        },
        default_permissions = "rx",
    })
    
  • Restart pipewire and wireplumber etc:
    systemctl --user restart wireplumber pipewire pipewire-pulse
    

This was done on PopOS 22.04 and WirePlumber is a bit of a moving target, so I don't know if this will remain stable.

There are many other matches you can try - the wpctl tool is a great help in finding clients and then finding properties that can be matched against.

1
  • This worked for me with chrome based applications. In your example I replaced "ferdium" with "chrome" (could be "google-chrome" or "google-chrome-stable" depending on linux distribution) and simply restarted wireplumber. Do you mind sharing a link to relevant documentation for better understanding of what this means and what else can be configured this way? Arch wiki has a few examples, so does the official wireplumber site but neither explain specifics of the code you posted. Jan 3 at 19:33
3

I had this problem, but with every type of video chat that I attempted to use on Xubuntu, everything from Google Hangouts to appr.tc would auto adjust my microphone volume. In particular, it seems to boost the volume if any voices can be heard in the background, as if to try to make the quietest voice be heard.

Anyway, my fix was to manually set my microphone volume with a command line directive, put into a while loop and running every tenth of a second. So, here's the shell oneliner that solves my problem:

while true; do amixer -c 1 set 'Mic Boost' 0db > /dev/null; amixer -c 1 set 'Capture' 35db > /dev/null;  sleep 0.1; done;

On your computer to get it to work, you may need to change which device to adjust and which channels to change. To find that information, you may want to use Alsa mixer, accessible with alsamixer.

0
2

I got this problem with Skype, you have to disable the auto adjust mixer levels (maybe you have to check advanced settings or thing like that)

2

None of these answers work. The only one that does is from a comment by @nh2 which I am elevating to the rank of answer.

There is an open source extension Disable Automatic Gain Control for Chromium based browsers that fixes this. It's open source. This is what I'm using now and it works very well.

1
  • 1
    Indeed, thanks for that! 👍🏻 Jan 23 at 9:43
1

In case you're using Chrome or Chromium, applications may adjust the volume via WebRTC.

This can be disabled via the feature flag "Allow WebRTC to adjust the input volume."

The feature flag can be found by pasting the following URL into Chrome's address bar: chrome://flags/#enable-webrtc-allow-input-volume-adjustment. Don't forget to restart Chrome after setting this flag.

However, according to this comment, the feature flag is about to be removed from Chrome 123.

-1

If this is a problem only with WebRTC in Chromium, disable WebRTC Echo Canceller by going to about:flags

WebRTC Echo Canceller pref

Note: this option has changed to "WebRTC hybrid Agc2/Agc2"

4
  • What happens to echos after disabling the Echo Canceller?
    – Xen2050
    Apr 27, 2019 at 8:45
  • 1
    @Xen2050 Actually, my solution here didn't work. Chromium still changed my mic's capture volume (gain)…
    – Geremia
    Apr 27, 2019 at 20:10
  • 1
    this flag is no longer there in 2021 Apr 1, 2021 at 17:15
  • 1
    doesn't work on 2021 Jun 11, 2021 at 17:15

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .