Authenticity & spectrum

Spectral cutoff

The cutoff shows how far measurable sound energy extends in the average spectrum. Think of a map from bass to treble: it locates the edge of the occupied region.

Reading the result

A low cutoff does not prove lossy compression. A high cutoff may simply come from noise. This number helps guide spectrogram inspection.

Understanding the measurementIllustrative spectrum without a measurement scale. Different processes can produce the same shape; see the analysis limits.Relative spectral levelFrequency →
Illustrative spectrum without a measurement scale. Different processes can produce the same shape; see the analysis limits.
Go deeperMethod, limits, verification and sources

The cutoff column is a descriptive measurement of the highest frequency that still carries appreciable averaged spectral content. It is not, by itself, an authenticity verdict. A low cutoff may be musical, archival or deliberate; a high cutoff may come from noise rather than useful programme content.

Calculation#

Decoded frames are mixed to mono for this measurement. The analyzer applies a Hann-windowed 8192-point FFT to consecutive windows, accumulates power per bin and converts the averaged magnitude spectrum to dB relative to its strongest bin. At 44.1 kHz the nominal bin spacing is about 5.4 Hz.

A five-bin moving average suppresses isolated bins. The cutoff is the highest smoothed bin above −90 dB relative to the spectral peak. The app also measures approximately 3 kHz below and above that boundary:

ValueMeaning
CutoffHighest frequency with content above the floor
CliffMean level below the cutoff minus mean level above it; a positive value is a drop
AboveMean level in the band above the cutoff, relative to the spectral peak

Short files still receive a spectrum: the final partial input is zero-padded to an FFT window. This is useful for display but gives the usual reduced frequency certainty of a short observation.

Interpretation#

The result reports the averaged response of the decoded material. It can help direct visual inspection in the spectrogram and explain a bandwidth observation. FlacCompagnon keeps it separate from Transcoded; transcoding uses codec re-quantization evidence instead. Upsampling uses a separate time-local MDCT dead-zone test; see Upsampling.

A cutoff near Nyquist says only that the measured spectrum has bins above the content floor. A cutoff well below Nyquist says only that the averaged spectrum did not. Neither statement proves how a file was recorded, converted or encoded.

Limits#

The threshold is relative to the strongest spectral bin, so a small amount of high-frequency noise can extend the reported cutoff. Conversely, a genuine recording with natural roll-off, filtering or no ultrasonic instruments can read low. Mono downmixing can cancel some stereo-only content, and fixed windowing cannot resolve frequency changes that happen inside the average.

Tests#

The helper functions have synthetic spectral unit tests. Run:

cargo test -p flaccompagnon-core analysis::spectrum

For a manual visual check, compare 48 kHz broadband noise with and without a low-pass filter in the app's spectrum and spectrogram:

ffmpeg -n -f lavfi -i 'anoisesrc=color=white:amplitude=0.2:sample_rate=48000:duration=10:seed=42' -c:a pcm_s24le broadband-fixture.wav
ffmpeg -n -i broadband-fixture.wav -af 'lowpass=f=8000' -c:a pcm_s24le lowpass-fixture.wav

The filtered file should show reduced treble, but this filter has a gradual slope: do not expect the measured cutoff to be exactly 8 kHz. A lone 1 kHz sine does not supply a broadband control for this comparison.

Integrating the engine in your software?

Browse the Rust API in Rustdoc ↗