Decaud

What TrueHz can tell you

methodology and limitations · Decaud 1.5 · 19 September 2026

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.

Where it can be wrong

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 recipeObserved in the core probe
AAC at 64 kbps, then FLACTranscoded (FAKE@96 in the probe)
44.1 kHz sample rate12,438 Hz detected cutoff
64 kbps encoder setting96 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.