What TrueHz can tell you
TrueHz looks for spectral patterns consistent with lossy ancestry. It cannot prove where a recording came from, recover its encoding history, or certify that a high-resolution file contains an original high-resolution recording. Treat its verdict as a reason to inspect a track, not a certificate of authenticity.
What is measured
Analysis runs locally. For ordinary audio files, the current implementation decodes the file to PCM, averages its channels to mono, and selects up to 220 windows of 16,384 samples spread evenly from the beginning to the end. Shorter files use fewer windows. It does not inspect every moment of a long track.
For DSF and DFF, TrueHz seeks to the selected windows and analyzes the decoder's PCM output. It does not load the entire DSD recording into memory. This spectrum describes the decoded analysis signal, including the conversion filter; it does not verify the original DSD bitstream or the playback output.
Each window receives a Hann window before an FFT. TrueHz combines the magnitudes into two spectra: the median at each frequency describes sustained energy across the sampled windows; the peak-hold preserves the strongest energy seen in any sampled window. Both are normalized and smoothed. The displayed peak-hold graph is reduced to 256 points, so it is a summary rather than a full-resolution spectrogram.
The classifier examines sharp cutoffs, steep drops into a noise floor, sustained bandwidth, and the fraction of the upper band with very little energy. It uses the decoder's codec classification when available, falling back to the file extension. Recognizing AAC versus ALAC in an M4A container is different from discovering that a genuine FLAC stream was encoded from a previously decoded MP3.
How to read the verdict
These are the current classifier labels. The words “genuine” and “lossless” in a verdict are stronger than spectral evidence alone can establish.
- Genuine Lossless: for a stream classified as lossless at 48 kHz or below, the sampled spectrum did not meet the suspicious-pattern rules. After cutoff checks, sustained coverage of at least 82% of the available band passes; narrower spectra are flagged when at least 55% of the band above the sustained cutoff is considered dead. Passing does not rule out a lossy source.
- Hi-Res Lossless: after the short/quiet check, analysis rates above 48 kHz take a separate path. An identified sharp cutoff below 20 kHz is flagged; otherwise the classifier returns this label. That branch does not separately require a lossless codec and does not prove original resolution, effective bit depth, or freedom from upsampling.
- Transcoded: the sampled spectrum met a suspicious cutoff or upper-band rule. A legitimately bandwidth-limited recording can meet the same rule. The reported source bitrate is a rough cutoff-based estimate, not recovered encoder metadata.
- Lossy: on the 48 kHz-and-below path, the decoder (or extension fallback) identifies a lossy format. This describes the format, not dishonesty. The displayed bitrate estimate comes from the spectrum.
- Inconclusive: the analyzed signal is too short or too quiet for the classifier. Decode failures are separate errors.
Where it can be wrong
- A real master can look suspicious. Low-pass filtering, older digital transfers, restoration, and naturally limited bandwidth can resemble an encoder cutoff. Dark recordings and analog masters are not guaranteed to pass.
- A lossy source can pass. Noise, hiss, dither, processing, and some encoder settings can preserve or add energy that hides a cutoff. Ultrasonic energy alone does not establish provenance.
- Sampling can miss evidence. A brief event between windows is absent from the analysis. Median and peak-hold spectra also discard the order of events in time.
- Mono averaging changes the signal. Opposite-phase content in different channels can cancel, changing measured energy and the verdict.
- Resolution labels have limits. High sample rate, stored bit depth, and a passing spectrum cannot establish the resolution of the source master. TrueHz does not establish audible superiority or measure playback bit-perfectness.
What has been checked
The implementation has regression tests for full-band signals, sharp cutoffs, gradual rolloffs, dark signals with hiss, quiet signals, silence, and bounded DSD analysis. These test particular behaviors. They are not a published accuracy study across representative music libraries, and no sensitivity or false-positive rate is claimed here.
Try a file with known lossy history
This worked example starts with a synthetic signal and records every encoding step. Its lossy history comes from the recipe, independently of the classifier. Generate the file, analyze it in Decaud on your Mac, and compare the report with the encoding record.
The chain: synthesized 16-bit/44.1 kHz stereo PCM → AAC at 64 kbps CBR, explicitly 44.1 kHz → decoded 16-bit PCM → FLAC. The 30-second source combines seeded synthetic music (gain 0.7) and Gaussian broadband noise (gain 0.12), clipped to [−1, 1]. The seed is 23001. The broadband component makes the codec’s spectral loss observable; this is an illustrative probe, not a representative music sample.
Download the recipe
and generator source (ZIP). The bundle includes the integration test, pinned
Python dependencies, and the reference encoding manifest. No private source
checkout is needed. Use macOS with Python 3.12 or newer; audio conversion uses
Apple’s built-in afconvert.
curl -fLO https://www.decaud.io/assets/truehz/truehz-aac-roundtrip-v1.zip
unzip truehz-aac-roundtrip-v1.zip
cd truehz-aac-roundtrip-v1
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python -c 'import generate; generate.generate_lossy_fixture("output")'
.venv/bin/python test_generate.py
Import output/Vesper Kite/Slow Light (AAC round-trip fixture)/01 Slow
Light (AAC round-trip).flac into Decaud on a Mac, run TrueHz analysis, and
open its Quality report. The adjacent encoding-manifest.json
records the synthesis parameters, exact conversion commands, tool and source
hashes, and hashes of the intermediate and final files. Keep it with your result.
Intermediate WAV and AAC files are temporary; the generator does not embed or
force a TrueHz verdict.
| Known from the recipe | Observed in the core probe |
|---|---|
| AAC at 64 kbps, then FLAC | Transcoded (FAKE@96 in the probe) |
| 44.1 kHz sample rate | 12,438 Hz detected cutoff |
| 64 kbps encoder setting | 96 kbps estimated source bitrate |
The bitrate mismatch is useful: the estimate is inferred from the spectrum, not recovered from the file’s history. The integration test separately checks that AAC changed the source PCM and that the final FLAC preserved the decoded PCM exactly.
A nearby failure: an earlier music-only AAC round trip, using the encoder’s automatic sample-rate selection, was classified as Genuine. The published recipe uses broadband content and an explicit 44.1 kHz rate. These are different test signals and settings; one successful detection is not a claim about accuracy across music or codecs.
Checked on 19 September 2026 with macOS 27.0, Python 3.14,
NumPy 2.5.3, Pillow 12.3.0 and Mutagen 1.48.1; development core
a90c8c680f2243eb31bfbed32300ed0c59176f04. This is a core-probe result;
the 1.5.1 app UI retake has not been verified. Your macOS codecs, fonts and
Decaud version can change bytes or results. Compare your manifest and record
your app version rather than assuming an identical verdict.
Recipe ZIP SHA-256: c26f04f9b9113745a3087803d6232120161c85d7cb735826002b3c7dce4cd3ee.
When a verdict looks wrong
Keep the original file. Compare the graph with what you know about the recording and its source. A verdict alone is not a reason to delete music or accuse a supplier.
Send a report through support with the Decaud version, format and sample rate, verdict, screenshot, and the result you expected. A reproducible example you can share helps distinguish a classifier limitation from a decoding bug.
Decaud is closed-source donationware. It is free to use; optional tips unlock no features. See privacy for network features and website download records, or return to the player.