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:
Added in API level 1
public static final int DEFAULT
Default audio source *
Constant Value: 0 (0x00000000)
Added in API level 1
public static final int MIC
Microphone audio source
Constant Value: 1 (0x00000001)
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)
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)
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.
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.