Android 14

Android 14 "USB lossless": what does it actually mean?

Android 14 added a genuine bit-perfect route for USB audio. Google's name for it is preferred mixer attributes, and the mode people mean by "USB lossless" is the one flagged BIT_PERFECT. Three separate things have to line up before it does anything for you: your phone's maker has to have implemented the optional part, the app you are playing from has to ask for it, and the endpoint has to be a USB device. Nothing on your screen reports whether all three happened. Meringo is not a rival to that feature. It is a way to find out what your phone actually put on the wire.

What Google documents

The platform documentation is short and unusually plain, so it is worth reading in its own words rather than a forum's. On the feature itself: "Android 14 provides developer APIs that apps can use to query and configure preferred mixer attributes for USB audio playback." On the mode: "If the mixer behavior uses BIT_PERFECT mode, the system sends the audio content without modification through the audio framework, HAL and optionally digital signal processor (DSP), from the API down to the USB device."

The requirement placed on the phone is stricter still: "The HAL must ensure that the audio stream is sent to the USB device without any modification, that is, the audio stream must not have any volume scaling, sample rate conversion, or audio processing effects and must not be mixed in the DSP." And the scope is narrow on purpose: "Only USB devices are allowed to set preferred mixer attributes." Your phone's own speakers and its headphone jack were never part of this.

One line in there is the most useful thing a reader can take away, because it is observable. In bit-perfect mode, "the hardware controls the volume as the framework doesn't provide any software volume control." A path with no software volume is a path that cannot be scaling your samples.

(All four quotes: source.android.com/docs/core/audio/preferred-mixer-attr, read 2026-09-06.)

Why your phone may not have it

The part everybody wants is the optional part. Google's wording: "Implementation of preferred mixer attributes, other than the BIT_PERFECT attribute, for USB audio is mandatory for Android 14." So a phone can ship Android 14, implement the mandatory half, and have no bit-perfect USB route at all.

Two further conditions sit underneath. "To support bit-perfect playback, vendors must add the bit-perfect output flag AUDIO_OUTPUT_FLAG_BIT_PERFECT to the dynamic mix port that can be routed to the USB device", and "The bit-perfect playback attribute is optional and is supported only in the AIDL implementation of the Audio HAL." That is a decision made by whoever built your phone, months before you plugged anything into it.

Then the app has to request it. These are developer APIs, so a player that never calls them gets the ordinary path whatever your hardware supports. Nothing in the documentation describes a settings toggle or a status indicator for any of this, which is why the question keeps getting asked and rarely gets answered.

What Meringo does instead

Meringo doesn't wait on that flag. Plug in a USB DAC and it takes the DAC off the AudioTrack road entirely: it parses the DAC's USB Audio Class descriptors, claims the audio-streaming interface, and ships PCM frames through isochronous transfers straight to the DAC's USB endpoint, with no AudioFlinger between the bits and the DAC. Bit-perfect here means three things at once, and the app says which of them it has: sample-rate parity, bit-depth parity, single-client passthrough. The minimum is Android 13, which predates all of this.

So the two roads arrive at the same place. The platform's road depends on your vendor's choice; ours depends on the DAC answering its descriptors. Neither one is worth much to you as a promise, which brings us to the part this site was built around.

Don't trust the green light. Prove it.

That heading is ours, and it has been on the front page for a while. Every Android 14 phone now has a green light of its own to not trust, and the check is the same one it always was.

  1. Play a 44.1 kHz file, never a 48 kHz one. A 48 kHz file passes through the default path unchanged and tells you nothing about anything.
  2. Watch the volume keys. If the phone's software volume has stopped doing anything and only the DAC's own control moves the level, that matches what the platform documentation describes for bit-perfect mode. It is a hint, not a result, and other things can produce it too.
  3. Read your DAC's own rate indicator if it has one. (Unverified here: that is your DAC's firmware, we hold no receipt for it, and different makers mean different things by the same colour.)
  4. Capture and hash, which is the only step that settles anything. Arm Verified Capture in Settings, Audio Diagnostics. Meringo writes every byte it hands to the isochronous pipe and computes a SHA-256 over the whole stream. Point it back at the same file and it re-decodes, lays the PCM out in the identical pipe format, and hashes that. Matching hashes mean nothing 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, so you can recompute ours as well as your own.

A worked example, in full

On 2026-08-01 the same 96 kHz, 24-bit FLAC went through two physically different dongles and came out with one SHA-256 between them: 847af9e41aebc5684ce36909f8417ed22d65bb1909b6de05428f160fe32cd4a7, on the Qudelix 5K and the Jcally JM6 Pro, both captured on Meringo 1.31.0 (130). We had been curious whether two cheap dongles would agree, and boring results like that one are the good kind. The Fosi DS2 has its own 24/96 receipt from 1.30.0 (128), and the other three captures are on the registry with their hashes printed in full. That is three DACs and six receipts, and it is the whole list. If your DAC is not on it we do not know that it runs bit-perfect and we will not say that it does.

Where this proof stops, and it stops in two places

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.

The second limit matters more for the question on this page. A Meringo capture is evidence about Meringo's own output. It cannot audit the platform's BIT_PERFECT path on your phone, or tell you what some other player did with a file, because the capture only ever sees the bytes this app produced. If what you want is a verdict on your phone's stock path, the honest instrument is your DAC's own readout, photographed. Anyone claiming a software audit of another app's output is claiming something USB does not report.

When this is the wrong page for you

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, at $9.99 once with a 7-day full trial and no subscription.

Google's page also names direct stream digital as a use case for bit-perfect mode. Meringo is PCM-first and does not play DSD natively on-device; DoP passthrough works only with a capable external USB DAC. If DSD on your phone is the reason you came looking for "USB lossless", that is a real feature of the platform mode and it is not one of ours.

Meringo on Google Play