Adam Siemaszko

Don't trust the green light

It's built to admit when it isn't bit-perfect, not just to congratulate itself when it is.

A few weeks ago I wrote about removing Android Auto from the music player I build, rather than ship a version that might fail in someone's car. Here's the other side of that same coin — something I added for exactly the same reason.

Every audiophile player on the market claims bit-perfect: that the audio reaches your DAC unaltered, exactly as the file stored it. It's the headline promise of the whole category. Almost none of them give you any way to check. You're asked to trust a green light.

I didn't want my app's green light to be one more thing you take on faith. So I built the verifier into the app.

With a USB DAC plugged in, Meringo captures every byte it ships down the cable and computes a SHA-256 hash of that stream. Then it decodes the same file and hashes that. If the two hashes match, nothing changed: no resampling, no volume scaling, no EQ — not a single sample altered between the file and the DAC. If something did change, the badge turns amber and names the reason instead.

═══════════════════════════════
 MERINGO · VERIFIED BIT-PERFECT
 24-bit / 96 kHz · 2 ch · 118.23 MB
═══════════════════════════════

[Capture]
  iso pipe → DAC endpoint
  cb459147698b75fe2b890229e4c1
  c66fe5425b31489b2c54efc68d04
  da295adf

[Source decode]
  same file, re-decoded
  cb459147698b75fe2b890229e4c1
  c66fe5425b31489b2c54efc68d04
  da295adf

  BIT-IDENTICAL ✓

The limits are part of the feature, stated plainly. It proves the digital path up to the DAC's USB endpoint — not the analog stage, and not the phone's own internal output. Nothing on Android can tap that path, so there the claim stays "declared," and the app says so.

That receipt is a real capture off my test phone: two matching hashes, bit-identical. You don't have to believe me. The whole point is that you can run it yourself.

See a real receipt and verify it yourself — the hashes are shareable, and you can re-hash them with tools I don't control. meringo.app/#verify →