Voice Calls over Signal/WhatsApp Sound Like Mickey Mouse

Hi. Anyone else on FP4 A16 beta experiencing weird voices when making calls using either WhatsApp or Signal? The person calling sounds like Mickey Mouse or someone taking helium, really high pitch squeaking voice. I thought it was a windup at first but it is now affecting both my phone and my wife’s. We are on Beta 4. Normal mobile calls are unaffected - just WhatsApp and Signal. Since both apps are affected I’m assuming it is an E/OS problem?

Regain your privacy! Adopt /e/OS the deGoogled mobile OS and online services

2 Likes

Hi, I do have the same issue. I use e/os a while now and I am a bit disappointed to see my phone calls breaking. I would understand this on an alpha release, however.
Sadly I really need my phone to work, so I hope this issue is fixed as soon as possible :confused: When I find some time, I’ll open a bug report.

1 Like

EDIT: the hypothesis in this post is wrong. I have struck the parts that did not hold up. See my follow-up below for the CalyxOS comparison that refutes it. The measurements themselves still stand.

Following up on my post above: I found some time to dig into this. I have not opened the GitLab issue yet, but here is the data, in case it is useful to someone before I do. Here is the data, in case it is useful to someone. (I later tried to register on GitLab and could not, see follow-up.)

Up front: I used Claude Opus 5 to help me read the audio dumps. I am not an Android audio developer. Everything under “measurements” is raw dumpsys and logcat output from my own device and can be reproduced by anyone. The explanation at the end is a hypothesis Claude and I worked out together, and I want to be clear that I only suspect I know what is going on. Please treat the numbers as data and the reasoning as a guess that may well be wrong. It was wrong.

Device

ro.build.display.id          BP2A.250805.005
ro.build.version.release     16
ro.build.version.incremental 1788499613
Signal 8.24.2, WhatsApp 2.26.32.83

Both ro.build.fingerprint and ro.vendor.build.fingerprint report Fairphone/FP4eea/FP4:15/FP4.SREL.15.19.2/15.19.2 on this build, which looks like a spoofed fingerprint rather than a real vendor version, so I would not read anything into it.

Correction: CalyxOS on the same phone reports the exact same fingerprint string, so it is simply inherited and carries no information either way. The properties that actually indicate the vendor version are ro.vendor.build.id, .version.release, .version.sdk and .date, which I failed to capture while I was still on /e/OS.

Symptom matches the OP exactly: far end sounds like a chipmunk on Signal and WhatsApp, cellular calls fine, the far end hears me normally, identical on earpiece, speaker, wired headset and Bluetooth.

Measurements

Control, a 60 s cellular call: the voip_rx thread’s counter went from 0 to 282,240 frames over a 99.5 s window, i.e. 5.88 s of audio, and the thread’s local log shows the only activity was a 0.5 s system tone. So cellular calls do not use this path.

One Signal call, 60 s window taken mid-call: 5,190,720 frames = 108.1 s of audio in 60.1 s of wall clock, of which the stream was active for 58.2 s. That is a factor of 1.8 to 1.86.

Important caveat on that number: it is saturated, not measured. Over the session the thread did 13,470 writes for 269.4 s of nominal audio with 112.5 s spent throttling, a mean cycle of 10.9 ms against a 20 ms HAL buffer (960 frames at 48 kHz). AudioFlinger sleeps at most half a buffer per cycle, so 2.0 is the highest ratio this counter can ever show. The real consumption rate is therefore at or above 2x, with no upper bound from this data, and a 3x error would look identical. I cannot distinguish 2x from 3x this way, that needs an acoustic measurement, which I have not done.

Supporting stats after the call: localSR 82380 against 48000 nominal, 13,458 FIFO underruns, Thread throttle time 112510 ms.

The configuration I think matters The configuration, for reference

In /vendor/etc/audio_policy_configuration.xml and in the _a2dp_offload_disabled variant:

xml

<mixPort name="voip_rx" role="source" flags="AUDIO_OUTPUT_FLAG_VOIP_RX">
    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
             samplingRates="8000,16000,32000,48000"
             channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>

<mixPort name="voip_tx" role="sink" flags="AUDIO_INPUT_FLAG_VOIP_TX">
    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
             samplingRates="8000,16000,32000,48000"
             channelMasks="AUDIO_CHANNEL_IN_MONO"/>
</mixPort>

RX allows mono or stereo, TX allows mono only. TX works, RX does not. This is identical on CalyxOS, where audio is correct, so the asymmetry is not the cause. During the call the HAL logs two channels for VoIP playback and one for the matching capture path:

platform_check_and_set_codec_backend_cfg:becf: afe: bitwidth 16, samplerate 48000
  channels 2, backend_idx 0 usecase = 33 device (handset)
platform_set_channel_map: set mapping(1 2 0 0 0 0 0 0) for channel:2

platform_check_capture_codec_backend_cfg:txbecf: afe: ... new channel: 1

This is not new

The same symptom has been reported on the FP4 under custom ROMs since 2022, but always app-specific: Teams on /e/OS stable (Feb 2022), Teams on LineageOS 20 (Dec 2022), Skype on LineageOS 20 (Jul 2023). Not on stock FairphoneOS. That part still seems worth knowing.

That fits together like this. The pitch is determined by the channel count the thread is opened with, not by what the individual app supplies, my WhatsApp track was 16 kHz mono and was affected anyway, because the mixer sits in front of it. If, before A16, the thread took its channel count from the first client to attach, then Teams and Skype (stereo) triggered it and Signal and WhatsApp (mono) did not. Under A16 the thread is opened at audioserver init with the widest mask the profile offers, so it is always stereo, and now everyone is affected.

The guess, then: the stream is opened stereo on a VoIP frontend that expects mono, so every stereo frame is consumed as two mono samples and everything plays at double speed. The stereo-on-a-mono-frontend guess would give exactly 2x, but as noted above my measurement cannot confirm that specific value, so treat the mechanism as unverified. What the data does establish is that the VOIP_RX stream is consumed far faster than its nominal rate.

Two things argue against blaming the apps. Signal’s track is 48 kHz stereo and WhatsApp’s is 16 kHz mono, they attach to the same thread, and both sound identically wrong. And backend_idx 0 is shared with normal playback, where music and ringtones are pitch-correct, so the codec backend clock is fine.

What I could not check

  • No root, so I could not read /proc/asound/.../hw_params to see what the ALSA frontend actually negotiated. That would settle it. (Still true on CalyxOS.)
  • No A15 device to compare against, so I cannot demonstrate that the same profile behaved differently before. Since resolved by the CalyxOS comparison in the follow-up.
  • My factor measurement is only good to about ±0.15, so I cannot prove it is exactly 2.0 rather than something else.

One thing that would really help Answered

/e/OS is LineageOS-based, the FP4 device tree is shared, and LineageOS 23.2 (Android 16) exists for this device. If LOS 23.2 shows the same thing, the fix belongs upstream rather than with /e/.

So if you are on LineageOS 23.x, or on the last stable /e/OS on an FP4, could you run this and post the output? No root, no call needed, works from a normal boot:

adb shell dumpsys media.audio_policy | grep -A3 "IOProfile name:voip_rx"

If your line says Channel mask: 0x1 and mine says 0x3, that pins the regression precisely and points at a one-line fix. If yours also says 0x3, my hypothesis is wrong and the cause is elsewhere, which is just as useful to know.

CalyxOS 7.2.4.50 on the same phone reports Channel mask: 0x3 and has correct audio. So my hypothesis was wrong and the cause is elsewhere. Details in the follow-up.

Happy to attach the full dumps if a developer wants them.

1 Like

Final follow-up: my theory was wrong, here is the data

Up front, two things. I owe the thread an apology: earlier I claimed the AUDIO_CHANNEL_OUT_STEREO entry in the voip_rx mixPort caused the chipmunk audio and suggested a one-line fix. That was wrong, and I’m sorry to anyone who spent time on it. And for transparency, I used Claude Opus 5 to help me read the audio dumps, then and now. I’m not an Android audio developer. The measurments below are raw output from my own device and are reproducible, but the reasoning around them has already been wrong once, so please weigh it accordingly.

I moved the same FP4 to CalyxOS 7.2.4.50, also Android 16, where the problem does not occur. The voip_rx profile there is identical to /e/OS:

9. "voip_rx"; 0x8000 (AUDIO_OUTPUT_FLAG_VOIP_RX)
   sampling rates: 8000, 16000, 32000, 48000
   channel masks: 0x0001, 0x0003

4. Port ID: 12; I/O handle: 53; IOProfile name:voip_rx; Latency: 40
   AUDIO_FORMAT_PCM_16_BIT; 48000; Channel mask: 0x3

Same masks, same selected mask, same port, same handle, same latency, and correct audio.

The VOIP_RX stream, same configuration on both, different behaviour:

/e/OS 4.3-beta.4-16 CalyxOS 7.2.4.50
Rate / channels / HAL buffer 48000 / 2 / 960 frames, 3840 B identical
Measured rate 1.7366 0.937347
localSR vs 48000 nominal 82380 47072
FIFO underruns 13,458 none
Thread throttle 112,510 ms 29 ms

CalyxOS vendor and HAL, which I never captured on /e/OS:

ro.vendor.build.id                    BP4A.251205.006
ro.vendor.build.version.release       16
ro.vendor.build.version.sdk           36
ro.vendor.build.date                  Thu Aug 27 08:08:32 UTC 2026
ro.vendor_dlkm.build.version.release  16
kernel                                4.19.325-cip135-st19-perf

android.hardware.audio@6.0::IDevicesFactory/default   (HIDL, pid 1105)
implementation: audio.primary.lito.so

Note that ro.vendor.build.fingerprint reads Fairphone/FP4eea/FP4:15/FP4.SREL.15.19.2 on CalyxOS too, so it’s inherited and means nothing. I misread that earlier.

Two things this rules out: it isn’t inherent to Android 16, the FP4, or the Fairphone blobs, and it isn’t the shared LineageOS device tree, since CalyxOS runs org.lineageos.audiofx and vendor.lineage.livedisplay-service.sdm and evidently uses the same tree.

Corrections to my earlier numbers. The frame counter ratio saturates, because AudioFlinger throttles a fast draining stream at half the HAL buffer period. My /e/OS readings of 1.8 to 2.1 are a lower bound, not a measurement, and can’t distinguish a 2x error from 3x. Also, no root on either ROM, so /proc/asound/*/hw_params was denied throughout and I never saw what the ALSA frontend actually negotiated.

What still stands, independent of any theory: on /e/OS the VOIP_RX stream is consumed far faster than nominal, all VoIP apps are affected regardless of their own track format, every output device equally, the TX path is fine, and during a cellular call the voip_rx counter advanced by only 5.9 s of audio across a 99.5 s window.

I did try to make an account at https://gitlab.e.foundation to open an issue, but the registration sadly failed: “Email is not allowed. Please use your regular email address. Check with your administrator.” (I don’t know how to contact the administrator.) I did try all my email addresses. So this thread is as far as I can take it.

For now I will do a backup and downgrade to e/OS Android 15 or switch to lineageos, I haven’t decided yet. It’s so much more complicated than I’ve had expected.

I have the complete CalyxOS snapshot: getprop, media.audio_policy, media.audio_flinger, dumpsys audio, all 13 vendor audio XMLs including audio_platform_info_intcodec.xml and mixer_paths_lagoonmtp.xml, plus the HAL listings and the collection script. Happy to hand any of it over to whoever can use it, and to run further tests if someone asks. Someone who knows this stack will have to take it from here.

3 Likes

Official 4.3 just installed - but still not working. Mickey is in fine fettle. Sounds like he is on helium. Lol. Also noticed that when calling using Signal, the ring tone for remote party also sounds distorted. Would be great to get this fixed. It used to be okay on previous builds.

1 Like

I can confirm the issue on my FP4 as well. I opened an issue 2 weeks ago:

We had a similar issue on A14, but limited to Teams and Skype apps (WhatsApp and Signal were working fine). There, the switch to mono for voip worked, see the issue details. I would assume the fix would still work, but some testing is probably needed.

If someone has a rooted FP4 available for testing, it can be an easy check.

1 Like

Same on my FP4. Previously I only had the issue with Teams, which meant I could only use Signal to voip. Now that option is also gone.

Hope some fix can be found…

1 Like

I believe a fix is already identified and due to be incorporated in the next build. Apart from this quirk, super pleased with performance and functionality of 4.3

1 Like

Hi!

Happy to see the issue is identified and there is a fix in sight. Unfortunately, this is a complete blocker for me, as I also use my phone for work. Is there a way to revert to the previous /e/OS version until this is fixed?

I am trying to search for it in the /e/OS documentation but I don’t seem to find anything specific to support installing an older OS version… so any hints would be greatly appreciated.

1 Like

same issue: I hear a metallic voice on Fairphone 4 WhatsApp Signal and Telegram after update to android 16 /e/os 4.3-a16-20260917677552-official-FP4

Just signed up for this forum, yes, same issue with multiple apps, the ring and voices heard on the Signal App and others, are like they are on Helium. This is disappointing because was literally about to order 2 FP6’s. I’m wondering if this will be fixed or will the finger pointing be back and forth between phone manufacturer, app makers, and operating system developer?!?

So….

Does anyone have a link to help a rookie go back to the /e/OS version prior to 4.3?

2 Likes

Hi everyone,

same here.

Signal and DeltaChat affected. Switching phone to Mono Sound didnt work for me.

cu

1 Like

In case you did not know, this issue only affects Fairphone 4 and FP6 is fine in this respect.

1 Like

Reg the issue with the audio quality on FP4 devices post the update to v4.3

1 Like

Yes a fix earlier would be of great help.

And are the updates coming at the same time? I m in India.

Thank you for all services

1 Like

I am grateful to Manoj - Directions found here

Allowed me to get my FP4 back to 4.2 /

And, perhaps I should add, (thank you) the information I used was contained in the FP6 direction page as well, and I used general Linux knowledge, along with old memories gleaned from CyanogenMod days, but one should be cautious re’ the possibility of bricking your phone, most certainly.

Be that as it may, Signal and Teams is again working as it should. (Although you will lose all data for those that don’t back up)

:warning: Attention :warning:

This only works with an unlocked bootloader, because overwise the Anti Rollback Protection is triggered and your FP4 is dead (bricked).

3 Likes

Thanks for pointing this out. That makes downgrading an even less attractive workaround for ordinary users.

I have a standard FP4 setup and I’m not going to unlock the bootloader or risk anti-rollback issues just to recover functionality that was working before the 4.3 stable OTA.

So from my perspective this really reinforces the case for an earlier 4.3.x hotfix. WhatsApp/Signal calling is a basic function for many users, and the safe option should not be “wait several weeks” after an official stable update introduced the regression.

Unlocking a locked bootloader and vice versa will result in deletion of all user data (reset).