Resampling
Does Android resample my music?
Usually, yes. Unless the app you play from takes a different route, Android sends every app's sound through one shared mixer, the part of the system that combines them into a single stream, and that stream runs at one sample rate the phone chose. Music recorded at any other rate is converted to match, which is all "resampling" means. Google's own documentation uses 48 kHz as its example of that internal rate, and a CD-quality album is 44.1 kHz, so on a phone like that every CD rip you own is converted on the way out. Nothing on screen tells you.
Whether it happens to you depends on three things: the app, the phone, and the file. Each of them can be checked, and you don't need our app to check them.
What resampling does to a file
A digital recording is a long list of numbers, one for each instant the sound was measured. The sample rate is how many of those instants there are per second: 44,100 for a CD, and 96,000 or more for a hi-res download. Resampling calculates a new list at a different rate. Because 44,100 and 48,000 only line up at a ratio of 147 to 160, the new numbers are computed between the old ones rather than copied from them.
The opposite is called bit-perfect: the DAC receives exactly the numbers that are in the file. If you bought a DAC to hear exactly what's in the file, that's the property you're after.
Whether you can hear the difference is an argument this page won't try to win. Google's page on sample rate conversion says plainly that "ideal resamplers do not exist", and that every real one is a compromise. What you can settle is whether it happens on your phone.
The app
An ordinary music app hands its audio to Android, and Android's mixer takes it from there. Google's developer reference describes that default in one line: "mixing all audio sources in the mixer."
A few players open the USB DAC themselves with their own driver and never hand the audio to that mixer. USB Audio Player Pro is one. Meringo, the player we build, is another. If your app is an ordinary one, the mixer's rate is the rate your DAC gets.
The phone
The phone decides which rate the shared mixer runs at. With a USB DAC plugged in, Android's own open-source code tests which standard rates the DAC accepts and opens the output at the highest one it finds. Phone makers ship their own audio configuration on top of that code, so the rate is decided phone by phone. On one phone a CD rip might be converted to 48 kHz, and on another it might be converted up to something much higher. The only way to know is to look.
Android 14 added a way for apps to ask. Google made the basic request mandatory
and the strict version optional: "Implementation of preferred mixer attributes,
other than the BIT_PERFECT attribute, for USB audio is mandatory for Android
14." The strict version, BIT_PERFECT, is the one that also switches off mixing
and volume changes, and only an app that asks for it gets it. What that mode is,
and why your phone may not have it, is its own page:
Android 14 "USB lossless": what it actually means.
The file
If the file's rate happens to match the rate the mixer is running at, no rate conversion is needed. That still isn't the same as untouched. Google's glossary describes Android's mixer as the module "responsible for combining multiple tracks and applying attenuation (volume) and effects." A matching rate removes one change and leaves the rest of that path in place.
It's also why a 48 kHz file makes a poor test. It can pass through at its own rate and tell you nothing about what happens to the rest of your library.
How to check your own phone
- Play a 44.1 kHz file. Any CD rip will do.
- Look at your DAC. If it shows the rate it's receiving and the reading isn't 44.1 kHz, something between the file and the DAC converted it. Often the readout is a coloured light rather than a number. The maker of the Fosi DS2, for example, documents red for anything below 48 kHz, so a CD rip that arrives untouched lights it red. Which DACs report the rate, and what a readout does and doesn't prove, is on which USB DACs show the rate they receive.
- If your DAC shows nothing, ask Android. Turn on Wireless debugging in
Developer options (Android 11 or later; the DAC is already using the port),
connect adb from a computer, play the file, and run
adb shell dumpsys media.audio_flinger. Find the output whose "Output devices" line names USB. The "Sample rate" line in that same block is the rate Android is running that output at. It describes Android's shared mixer and nothing else, so it can't tell you what a player that drives the DAC itself is sending. - If you use Meringo, capture and hash. Arm Verified Capture in Settings, Audio Diagnostics. Meringo writes every byte it hands to the USB pipe and computes a SHA-256 over the whole stream, then re-decodes the same file and hashes that. Matching hashes mean nothing resampled or otherwise touched a single bit between the file and the pipe. The method and a public-domain checker script that shares no code with the app are at meringo.app/verify.
Where Meringo fits
Meringo is a $9.99 Android music player that sends audio to a USB DAC itself, at each file's own rate, and then hashes what it sent so you can check the math. It parses the DAC's USB Audio Class descriptors, claims the audio-streaming interface, and ships the samples straight to the DAC's USB endpoint, with no AudioFlinger (Android's mixer) between the bits and the DAC. The format strip on Now Playing goes teal for BIT-IDENTICAL when the DAC accepted the file's own rate, and lights an amber warning the moment Android's mixer resamples or truncates the signal.
Here is the case this page is about, from the registry. On 2026-06-19 a
CD-rate stream, 16-bit at 44.1 kHz, went through a Fosi DS2
on Meringo 1.28.5 (124) and came out BIT-IDENTICAL:
a8c143422d8b644569cc4a36ab54822b0dfd1a370327fa95d844d8f92195642d. What went
down the wire was the file's own rate, every bit of it. The other five receipts are on
the registry, with their hashes printed in full.
The proof has an edge, and we print it. A hash covers what Meringo put on the USB wire. Isochronous USB carries no delivery acknowledgement, so no software on any platform can prove what the DAC received, only what was put on the wire for it. We hold receipts for three DACs; if yours isn't one of them, we don't know that it runs bit-perfect and we won't say it does.
When this isn't your answer
If you mainly stream from Spotify, Tidal or Qobuz, Meringo isn't your player. There is no native integration with commercial streaming, by design. It plays local FLAC and ALAC, plus Jellyfin and the Subsonic and OpenSubsonic family. It needs Android 13 or later, and it costs $9.99 once with a 7-day full trial and no subscription.
This page is about wired USB DACs. Bluetooth headphones receive audio through a wireless codec, which is a separate question with its own answer.