Your Android is lying to you about your audio.
Android’s underlying audio tech, AudioFlinger, doesn’t do what you think, and it rarely tells you what’s really happening. But the result is that whenever you think you’re listening to hi-res audio, there is a strong chance it’s nothing like that, with AudioFlinger actively downsampling hi-res files to hit a 48kHz sample rate and destroying your audio quality in the process.
To put it to the test, I loaded four lossless FLAC files onto a Samsung Galaxy Z Fold, a Motorola Razr Fold, a Nothing Phone 3, and a Tecno Camon 50 Ultra, paired them up with a pair of hi-res headphones and earbuds, and dumped the audio files — and only one smartphone got it right.
The Android audio test
Four FLAC files, four smartphones
So, the testing process took place across those four smartphones, using the viral $50 FiiO EH13 headphones and a set of Status Pro X earbuds. Both are certified hi-res, and both were connected using Bluetooth to each phone.
I used four FLAC test files to ensure consistency, at 44.1kHz, 48kHz, 96kHz, and 192kHz.
Then, I used Android’s adb shell dumpsys media.audio_flinger command while playing the media to dump the live device audio data to see exactly how AudioFlinger was managing the hi-res audio files under the hood.
The winner: Motorola Razr Fold
Only Motorola’s foldable got the job done… mostly
Of the four phones, the Motorola Razr Fold was the only one that didn’t force everything through a fixed sample rate.
The 44.1kHz and 48kHz files went through Android’s AudioFlinger mixer, pinning both samples at 48kHz, which was the expected behavior.
But then the Razr Fold did something none of the other devices did with the 96kHz file: it opened a completely different output path that preserved the audio quality. So, instead of AudioFlinger, the Razr Fold used a DIRECT thread, allowing it to skip the limitations. The 192kHz audio sample also received the same treatment.
Now, so far, so normal; this is the behavior I was expecting to find across each of the Android devices I tested. I couldn’t have been more wrong.
The other devices weren’t all locked to AudioFlinger’s 48kHz sample rate
It was a mixed bag
|
File Rate |
Razr Fold (AAC) |
Razr Fold (LDAC) |
Z Fold 8 (AAC) |
Z Fold 8 (LDAC) |
Phone 3 (AAC) |
Phone 3 (LDAC) |
Camon 50 Ultra (AAC) |
Camon 50 Ultra (LDAC) |
|---|---|---|---|---|---|---|---|---|
|
44.1kHz |
48,000 (MIXER) |
48,000 (MIXER) |
44,100 |
96,000 |
48,000 |
48,000 |
44,100 |
96,000 |
|
48kHz |
48,000 (MIXER) |
48,000 (MIXER) |
44,100 |
96,000 |
48,000 |
48,000 |
44,100 |
96,000 |
|
96kHz |
96,000 (DIRECT) |
96,000 (DIRECT) |
44,100 |
96,000 |
48,000 |
48,000 |
44,100 |
96,000 |
|
192kHz |
192,000 (DIRECT) |
192,000 (DIRECT) |
44,100 |
96,000 |
48,000 |
48,000 |
44,100 |
96,000 |
The other three devices didn’t match the Razr Fold, but it was a mixed set of results depending on the device, with AudioFlinger getting involved each time.
- The Nothing Phone 3 played each file through the shared mixer, outputting 48kHz each time.
- The Samsung Z Fold 8 downsampled every file to 44.1kHz, pushing the rate even lower. However, when I switched to LDAC, this rate increased to 96kHz.
- The Tecno Camon 50 Ultra was exactly the same as the Samsung.
These mixed-up results illustrate that Android isn’t handling your audio how you think or, indeed, how it’s made to sound, but that’s actually Android working as intended.
Why Android devices handle your audio files differently depending on the device
It’s a feature, not a bug
The answer largely boils down to the Android audio stack, known as the Hardware Abstraction Layer (HAL), and how apps and audio interact with it. Basically, when you hit play, the media player passes audio to AudioFlinger, which passes it to the Audio HAL, then to your hardware (i.e., the output device).
Now, Android natively supports up to 32-bit/192kHz. But by default, it converts everything to 16- or 24-bit PCM at 48kHz stereo to keep all audio consistent. But that same consistency drive is why your 44.1kHz and 192kHz audio tracks end up being pushed out at the same sample rate.
So why did the Motorola Razr Fold handle the audio best? Simply put: Motorola configured its audio policies that way, and the others didn’t.
There is a big catch to all of this
Bluetooth audio is limited by its codec
The biggest issue among all of this AudioFlinger downsampling and meddling is that Bluetooth has limitations defined by its codecs.
Every phone I tested connected to the headphones using Bluetooth, first using AAC, then using the hi-res LDAC codec. Now, while AAC can technically handle audio files up to 96kHz, you rarely find that implementation on smartphones, which more typically handle audio at a maximum of 24-bit/44.1kHz — still very good audio quality, and better than a CD.
LDAC pushes that further with full 96kHz support, with varied bitrates at 990 kbps, 660 kbps, or 330 kbps.
But in each case, neither codec can actually deliver 192kHz audio, nor can any other Bluetooth codec.
So when AudioFlinger downsamples an audio track at a higher rate, it’s not just mangling your audio for the sake of it. It’s often more down to the limitations of the codec you’re using, along with the headphones or earbuds. The Bluetooth codec becomes another limitation in the audio process.
There is another caveat, too, which is that human hearing is effectively limited to 20kHz at the very top end, with most folks’ audible range much lower than that. So even if Android AudioFlinger downsamples your hi-res audio files, you probably won’t notice the difference either way due to the limitations of human hearing.
On that, in truth, my advice is to stop worry quite so much about your audio quality, and just enjoy your favorite music how you want!