Call quality and noise cancellation (regular calls, handsfree, Signal voice messages, Microsoft Teams video calls)

UPDATE: Globally raising "TX_DEC0 Volume" is not a good fix, because it badly affects normal phone calls (where we’re typically much closer to the mic).

During a Signal Messenger audio recording, the audio HAL selects input device "handset-mic" for use case “audio-record”, where "handset-mic" is defined as

<path name="handset-mic">
    <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
    <path name="amic1" />
</path>

During a normal phone call (non-hands-free), the audio HAL selects input device "dmic-endfire" for use case "audio-record-voip", where "dmic-endfire" means dual mic (amic1 for bulk input, amic3 feed into noise cancellation)

<path name="handset-dmic-endfire">
    <ctl name="TX_CDC_DMA_TX_3 Channels" value="Two" />
    <path name="amic1" />
    <path name="amic3" />
</path>

And during hands free calls (and probably video calls, haven’ t tested) we have use case "audio-record-voip" with input device "speaker-mic", which solely uses "amic3" for bulk input.

I.e., for both Signal recordings and non-handsfree phone calls we use "amic1" for the bulk input, which is controlled by "TX_DEC0 Volume".

I wonder why "handset-mic" is selected for Signal recordings at all, and which software component does this decision. Wouldn’t be "speaker-mic" (as in hands-free calls) more appropriate?

EDIT: The decision taking code is select_devices() and platform_get_input_snd_device().

6 Likes