English

Very low quality audio recordings

Alarmed by this thread I just did my own experiments using “Audio Recorder” from FDroid.

The phone provides 3 audio sources, “Mic” “Unprocessed” and “Bluetooth”

Mic provides crystal clear audio if and only if the only sound audible is a single human voice (speaker in a silent room)

The mic audio source becomes unusable if there are ambient noises such as music. After a few seconds of recording the music, the audio quality heavily degrades, surpressing and amplifying random frequency ranges in a way that sounds “under water” almost as if several flanger effects were overlayed over each other.

It seems that the “Mic” source has a voice filter auto-enabled that behaves very badly if the audio source is not a single voice but music or anything else.

The “Unprocessed” audio source does not exhibit this behavior but has an extremely weak signal. To hear anything, I had to software amplify the signal by at least factor 4. At this soft gain factor there is a lot of of white noise audible.

Attempting to record from “Bluetooth” Audio source just reports “Source Disconnected”

What’s missing is a source with a hardware gain that doesn’t try to be too smart for its own good. “Unprocessed” has terrible signal to noise ratio due to lack of gain and “Mic” is unusable for anything but an isolated speaker.

7 Likes

I made a video comparing the sound of a song with the default Camera app VS Open Camera (with different audio input settings):

Default audio is good when simply talking to the phone, but absolutly not when singing or playing music. But, as @corvuscorax pointed, “unprocessed” audio usually needs to amplify the gain to get a decent/normal audio level (I found that you can do it easily in Audiofix, but it would be really nice if you can choose the entry level or a kind of auto input level).

Maybe the good thing of the low audio signal in unprocessed is that maybe if you record live music events with this configuration, audio will be good and not distort (“clip”) the signal :thinking:

8 Likes

awesome comparison video!!!

I’d like to add though that amplifying recordings from the “Unprocessed audio source” in post processing adds comparably lots of white noise to the signal. Audio would be better if the signal was hardware-amplified before recording, but without such a horrible voice filter.

Most phones add such a voice filter during audio calls, when the only relevant audio signal is that of the speaker holding the phone to his ear, while all ambient noises should be suppressed.

Anything else, including hands-free audio calls, video calls, video recordings, streaming, chat apps with video conference support (Wire,Telegram,Whatsapp,…) basically EVERYTHING else but old-school voice calls should not have this particular filter enabled.

This must be a driver misconfiguration in the Fairphone. Every other phone on the market instead has an “auto-gain” filter for that, which auto-adjusts hardware gain to prevent clipping and optimize signal-to-nois, but does not try to single out voice.

3 Likes

Yeah, after some testing, the same happens on my phone. Seems to be a general problem and would love to see Fairphone (the Company) fixing it.

2 Likes

Hi again! :slightly_smiling_face:

This is true. Yesterday I went to a live concert and I recorded a clip with my FP3 and Open Camera with “unprocessed” audio input setting to test this. This is the result:

Music was really loud in the hall, but the audio quality in the video is pretty good, I think.

P.S: the autotune in the vocals was in the live sound, it was not added by the phone :joy:

3 Likes

@Mixigodo thank you for your hard work and provided proof :heart:

Because it appears you have found a software workaround for this problem I have added the issue in Improving the software of FP3 – feel free to improve it further.

3 Likes

Just for clarification, am I correct in the assumption that it’s not possible to change the audio-source in the stock camera app?

That means in order to do so (for the software workaround) one first needs to install a 3rd party camera app. In the default camera app, the audio source is not configurable, not even in the developer options (in camera settings one can tap the version number 20 times - exposing additional settings, including selecting the camera video source by ID - but unfortunately not the audio)

It also means the issue persists in ALL apps that don’t explicitly allow changing the audio source, which unfortunately seems to include a lot of standard video-chat apps such as Wire, Telegram, Discord, etc…

Discord allows to switch the audio source between “Communication Mode” and “Call Mode” - but as I understand this is not switching the source but only the recording profile (and the default for most apps is comminication mode anyway) - also I didn’t get the mic to work at all in Discord, at least not in microphone test mode theres simply no signal.

I don’t have skype and/or whatsapp. Can anyone check if
a) video calls with either are 1. possible and 2. affected by this issue and
b) if a workaround (aka switching audio source) is possible in these apps.

if the majority of “required” communication apps do not offer the workaround, then this remains a driver respectively driver audio/profile issue.

3 Likes

I had a look at the documentation. In Android, there’s no separation between audio sources and audio profiles, they are selected both at the same time:

They are documented here:

https://developer.android.com/reference/android/media/MediaRecorder.AudioSource.html

A subset:



DEFAULT

Added in API level 1

public static final int DEFAULT

Default audio source *

Constant Value: 0 (0x00000000)

MIC

Added in API level 1

public static final int MIC

Microphone audio source

Constant Value: 1 (0x00000001)

CAMCORDER

public static final int CAMCORDER

Microphone audio source tuned for video recording, with the same orientation as the camera if available. * @apiSince 7

Constant Value: 5 (0x00000005)

VOICE_COMMUNICATION

Added in API level 11

public static final int VOICE_COMMUNICATION

Microphone audio source tuned for voice communications such as VoIP. It will for instance take advantage of echo cancellation or automatic gain control if available.

Constant Value: 7 (0x00000007)

UNPROCESSED

public static final int UNPROCESSED

Microphone audio source tuned for unprocessed (raw) sound if available, behaves like DEFAULT otherwise. * @apiSince 24

Constant Value: 9 (0x00000009)



Most coding examples, including https://developer.android.com/guide/topics/media/mediarecorder simply record from the DEFAULT audio source, although some select MIC

Voice call software probably should select VOICE_COMMUNICATION and video recording should probably select CAMCORDER

On the fairphone FP3 it looks like sources MIC and DEFAULT both include filters that only make sense in the VOICE_COMMUNICATION context - which in turn leads to the horrible distortions we have noticed.

Some other common sources seem to be either unavailable or not working at all, causing for example Discord to have no audio.

Some apps allow selecting “UNPROCESSED” which unfortunately has too low hardware gain.

Here’s more docu on the subject: https://source.android.com/devices/audio/

To properly debug this, one would probably have to write a little demo application that tries to record from each configured audio source and see what happens.

What we know is
Most apps that record record horribly, which suggests at least DEFAULT and probably CAMCORDER sources apply filters that should not be applied in that mode but only for VOICE_COMUNICATION

Apps that explicitly allow setting source MIC also horribly distort audio, suggesting it applies filters meant for VOICE_COMUNICATION

Apps that explicitly allow setting source UNPROCESSED show unfiltered audio at a low gain, showing that UNPROCESSED is working correctly.

The Fix:
Dear Fairphone: Please compile a test app that can test each of these sources/profiles and run it, if you haven’t already. Test them with various test sounds, including music!

Then fix the audio profiles on Fairphone3, especially DEFAULT, MIC and CAMCORDER – remove or fix the filters for echo suppression or whatever’s active there, they fail horribly, as seen in the videos above.

In the meantime, the workaround:

For deliberate video or audio recording, install an app that allows chosing “UNPROCESSED” - then edit the file with postprocessing software and increase the volume.

For video chats and similar: If you are at a party or in a similar loud environment, go outside or in a different room, so the filters don’t get confused with the noise.

For apps that don’t work at all: Use a different phone until Fairphone fixes this with an update.

5 Likes

I made a fork of the android-audio-recorder on FDroid and patched it so it can record from any audio source Android knows about (Not just MIC and UNPROCESSED) and they can now be selected explicitly in the preferences.

Feel free to use that for further testing.

Patched Source Code:

should compile with either android studio or command line gradle - any ideawhere i could upload a debug apk?

3 Likes

GitHub/GitLab/Firefox Send

1 Like

ok, here is a test audio file to test the microphone with for reproducible results:
https://github.com/CorvusCorax/android-audio-recorder/raw/fp3_tests/sounds/testsound/test_samples.ogg
and here is the apk (debug build)
https://github.com/CorvusCorax/android-audio-recorder/raw/fp3_tests/apks/audiorecorder-universal-3.3.11-debug.apk

2 Likes

And I added some tests with the Fairphone FP3 I have, using all working profiles.
Test setup:
I used the same audio file, playing back through a Bluetooth HiFi speaker aproximately 2m away from the fairphone and on a different piece of furniture. The test sample was played back at identical volume each time:
Original Test Sample

I was able to make recordings in the following modes:
DEFAULT

MIC

CAMCORDER

VOICE_RECOGNITION

VOICE_COMUNICATION

and
UNPROCESSED

As you can see, the sources DEFAULT, MIC and CAMCORDER all employing the exact same audio profile. As audible in the test, it employs an auto-gain that fails horribly with music, ruining not just music recordings themselves but also voice recordings with music or other loud noise in the background.

VOICE_RECOGNITION applies additional filters, as can be seen in the spectrogram in reduced high frequencies. However it still employs an auto-gain confused by music and noise, unusable for music sources. The filter also ruins recording of voice with noise in the background.

VOICE_COMUNICATION is the filter normally used during voice calls. It assumes the speaker is directly next to the microphone, so it uses much lower gain to begin with. That doesn’t stop it from being confused by background noise though and lower the gain further. This is probably why people have complained about horrible voice quality. The filter is OK with a single voice source, but if there’s music or party noises in the background, the filter goes GAGA, and whoever is on the other side of the call wouldn’t understand a word.
This is probably the most critical flaw and must be fixed, as it affects using the Fairphone for making Phonecalls!!!

UNPROCESSED has horribly low initial gain, but at least nothing beyond that is applied. The signal is weak, but of high quality.

The gain filter misbehaviour is so pronounced it is even visible in the spectrogram plots.
Look at second 60 to 65 and 155 to 160 - this is always when loud music is encountered, after around 5 seconds, the auto gain goes BERSERK and cuts down gain across a large part of the spectrum, not only ruining the music but also making the speaker completely incomprehensible.

The other profiles could not record in this test. VOICE_PERFORMANCE is probably not yet supported by this Android version, while REMOTE_SUBMIX only makes sense with a remote speaker such as a car connected and VOICE_UPLINK, VOICE_DOWNLINK and VOICE_CALL would only work during a voice call.

5 Likes

Been to a concert yesterday and made a few videos. That sound is terrible. Thanks for advices for a workaround. I hope fairphone will fix it with an update soon.

1 Like

I’m a bit disappointed about the microphone quality of the Fairphone 3. What are your experiences?
Here’s some test footage I took last December in Vienna:

3 Likes

I moved your post here to avoid duplicate topics.
Also of interest if you understand German or know how to use Google Translate or DeepL

2 Likes

Do you think this is a problem that will be resolved via update or do I have to send my phone in (or sell it) in order to get rid of this ridiculous problem?

I think it can be resolved via update.
The support is also aware of it, as they have gotten many reports by now.
If Fairphone cannot fix it, I am pretty sure the community can, once rooting or installing LineageOS or similar becomes an option. But it might require patching some drivers. Worst case it could be a firmware issue in one of the proprietary blobs which means there must be an update from Qualcomm - but in that case it might be a good thing that production phones are affected.
I’d be confident that in 12 months or so the problem is solved. But don’t hold your breath that long :wink:

3 Likes

Hello, any news on this topic? I also need the phone to record music while I play together with my group, but its useless! My previous very old 2014 Motorola MotoG 1 was OK.
I see there are external microphones that can be used via the jack plug or usb-c. Anyone tried this? Would this be a workaround? Or the same voice filter would be applied?
Thank you, bye Marco

1 Like

I tried an external microphone connected by jack (the Rode Smartlav+) and the result was the same: the filter is applied. My old Android 4.2 phone was OK also.

I hope they solve it soon, I usually work in music and media (interviews) and I need this, it’s a tool for my work.

Meanwhile, I record videos with Open Camera and audio with Audio Recorder, because I can select “Unprocessed” in the input settings (so the filter is not applied), but the entry level is really low :frowning:

1 Like

Thank you Miguel, I’ll try Audio Recorder. I see in the parameters there is “recording volume”, set at 100% as default, that can be increased to 400%. Maybe this can overcame the low sound level in umprocessed mode? I’ll try this evening at home.