A guide — you do not need this application for it
How to tell whether a FLAC is really lossless
A FLAC container says nothing about what is inside it. Take an MP3, decode it, re-encode the result as FLAC, and you get a file that is the same size as a real one, carries the same tags, passes every integrity check, and plays. What it does not carry is the audio the MP3 threw away, and that absence is visible.
This page is how to see it, what each bitrate looks like, and — the part most guides get wrong — the one honest thing that gets mistaken for a transcode.
Every lossy encoder stops writing somewhere
To save space, an encoder discards the top of the spectrum first, because that is where hearing is worst. Where it stops depends on the bitrate — and it stops completely, which is what makes it readable.
Those heights are not folklore. LAME says where its low-pass begins at each rate, and a measurement agrees with it. Encode white noise — which has energy at every frequency up to the 22.05 kHz limit of a CD, so an encoder's ceiling is unambiguous — and read it on 250 Hz rungs: the energy is still there on the rung below each of these figures, and more than 60 dB down two rungs above it.
still there at 21.5 kHz
kHz
kHz
kHz
kHz
Real music moves the exact rung — where the recording itself has nothing left, the encoder has nothing to cut, so a dark master encoded at 320 walls lower than this. The order does not move, and neither does the gap: 256 and 320 are about 700 Hz apart, which is nearly three rungs.
The one thing that is not a transcode, and looks like one
This is where most advice goes wrong, and where an honest record gets thrown away. Plenty of genuine masters have no energy up top either. A 1970s tape transfer, a dark mastering, an old recording — all of them can end well below 20 kHz having never been near an encoder.
"It ends at 17 kHz, so it's fake"
Height alone convicts real records. The music simply stops being loud up there on a lot of good material, and on a tape transfer the top of the spectrum is hiss, not silence.
Does it fall, or does it end?
An encoder's ceiling is a cliff: energy is there, and then, within a kilohertz, it is gone — down to a floor that is identical from track to track. A dark master fades. Look at the shape, not the height.
The gap is wide
Among files that end at or below 16 kHz, a genuine master loses a few decibels across that edge and a transcoded file loses several times as much. Measured on real music, the two groups did not overlap: there was a gap of several decibels with nothing in it.
One album, twelve tracks
A transcode's floor is nearly the same number on every track of the album, within a few decibels. That is not music. Music does not agree with itself to the decibel.
The edge of what a picture can prove
Everything above is what a spectrum can tell you, and a spectrum has an edge. Knowing where it lies is the difference between reading a spectrogram and trusting one — and it is also why this application does not stop at the picture: the measurement in the next section reaches the files this one cannot.
320 is visible, but it shares a neighbourhood with honest CDs. It walls at about 20.1 kHz, and lossless audio is still going at 21.5 — so the loss is real and it is on the picture. The difficulty is not resolution: it is that a genuine CD master can also end near 20 kHz. Up there the two populations overlap, so a ceiling is evidence of something rather than proof of anything, and you need the shape of the fall to say more.
A ceiling rule cannot convict above 19 kHz without condemning genuine records. Real converters put their own wall up there: on hand-vouched honest masters, the anti-aliasing filter floors between 19.5 and 21 kHz, having never been near an encoder. And the same line that spares them spares every encoder that stops beyond it — a 320 walls at 20.1 kHz and clears this ceiling, and a 256, walling at 19.4, clears it too. Both are caught here anyway, nearly always, by the measurement in the next section; what no ceiling can do is catch them by where they end.
That is not caution where more effort would do. It was tested the only way it can be: by filtering known-lossless masters at 20 kHz — an honest converter's own anti-aliasing curve — and asking where each file's floor begins. On the paired benchmark every filtered master floors at 20 kHz, and so does every 256 and every 320. A line raised far enough to take in those transcodes takes in the honest masters with them, at the same rate. By where they end, the two are not close. They are the same shape.
So a ceiling has to choose which way to be wrong, and this one chooses deliberately. A tool that calls your genuine record a fake has done you more harm than one that stays quiet — and against known-lossless audio this rule convicts none of it. Anyone claiming to catch a 320 from the spectrum alone is guessing; there are also encoders that apply no low-pass at all, and no ceiling of any height finds those. That is the honest limit of the picture, and it is where this application stops looking at pictures and starts looking at something else.
256 and 320 are distinguishable, by about 700 Hz. The application's own measuring grid is coarse — it asks at 19 and at 20 kHz and nothing in between — and that is a fact about the ruler, not about encoders. Measured on 250 Hz rungs they separate cleanly.
What catches the ones the picture cannot
A spectrum reads where the audio ends. This application asks a second question that no spectrogram can answer, and it is the one that catches a 320 laundered into FLAC — the file every ceiling-based test in circulation lets walk: where was the audio cut into frames?
An encoder works on a grid
MP3 compresses in fixed blocks of 576 samples — a ruler stamped invisibly onto the sound. Decoding it back into FLAC copies the audio, and the ruler comes along with it.
Try all 576 alignments
Re-run the encoder's own analysis at every possible position of that ruler and score each one. A file that was an MP3 has one position that stands far above the rest. A file that never met an encoder has no ruler, so every position scores alike.
Six readings, one answer
Each file is read six ways — two channel views by three thresholds. On a transcode the six nearly always name the same alignment out of 576. On honest audio they scatter, and no more than two ever agree. It is six witnesses who did not confer pointing at the same suspect.
No overlap at all
Over the paired benchmark, honest files peak low and never get more than two readings to agree. Every laundered file from 128 to 320 peaks well above the highest honest one, and nearly all of them agree six times of six — including the 320 encoded with no low-pass, which no spectral rule reaches at any threshold.
This is what the application runs, and it is why the section above is not the last word. The two questions are asked of every lossless file: where the audio ends, and where it was framed. The first spares an honest dark master and lets a 320 walk. The second does not care where the audio ends — so the 320 that walks past the ceiling, and the one with no ceiling at all, are caught by their framing instead. A file is called a transcode when one alignment out of 576 stands eight deviations above the rest and at least four of the six readings agree on it. Four, and not six, because the finest reading sometimes lands elsewhere on a file that is a transcode all the same, and no honest file measured reached three. It is not perfect: on the benchmark a rare 320 gets only three readings to agree, and goes free.
What it does not reach, said out loud. The grid is a trace in the samples, so what moves the samples off it erases it: a resample, a change of pitch, and so a DJ edit rendered out of a session at another rate. Measured on a handful of laundered 320s: a tempo change took the trace from some and left it on others; a heavy EQ wore it down to the edge of the line without erasing it; a change of gain, or of container — WAV, AIFF and FLAC alike — did not touch it. When the trace is gone this measurement stays silent rather than guessing, and the spectral rules above are what remains. It is also, today, an MP3 grid: audio that came from AAC or Opus is framed on a different one, and reading those is not built yet.
Nothing about this is guesswork you have to take on trust. The analysis chain is the one in the MPEG-1 standard, its window table ships with the application and names its source, and the recipe of the paired benchmark is in the repository, to be rebuilt from your own files.
How to actually check yours
Two ways, and the first one is free and is not this project.
Spek, or any spectrogram
Spek is free, open source, and draws exactly the picture at the top of this page. Open a track, look at the top of the image: a flat line with black above it is a transcode. This is the right tool when you have one album to settle.
Reading it is the skill this page is about — and now you have it.
DigLibrary
Spek answers one album. DigLibrary answers the shelf: the same measurement over every track you own, with the cliff test applied so dark masters are not condemned, and it says where it could not tell rather than guessing.
But the check is a side effect of what it is actually for — working out what every album is against MusicBrainz and Discogs, and renaming, tagging and filing the whole library to your standard in one plan you approve and can undo. The quality verdict simply rides along in the name.
brew install python ffmpeg pipx && pipx ensurepathpipx install diglibrarydiglibrary
macOS 12 or later, free and open source. What else it does →