Systems and subsystems
Segment preparation and band match
Training and test audio must look the same to a detector, or the detector learns the difference instead of the voice. This stage low-passes every clip at the test set's roll-off, trims silence, crops training rows to test-like lengths, caps the length and normalizes the level.
In plain words
The test files carry a wall in their spectrum at about 7.2 kHzsource: README.md, section what-worked that no training corpus has, and they are shorter, louder and start faster than the training clips. Each of those differences is a shortcutA difference between training and test data that a model can exploit instead of listening to the voice: peak level, leading silence, clip length, container fields, a missing high band. Each one found was closed before it could be learned. a model would happily learn. So every clip, train and test, deep path and engineered path, goes through the same preparation before a detector sees it. The band matchA low-pass filter applied to every clip, training and test alike, so that the test set's roll-off above about 7 kHz is no longer a fingerprint that separates test audio from training audio. alone took the handcrafted detector from calling 90%source: README.md, section what-worked of the test set synthetic to 42%source: README.md, section what-worked.
What goes in and comes out
In: a 16 kHz mono array, and for training rows a crop length drawn from the test set's duration distribution and a seed. Out: the prepared segment. Training rows are cropped; test rows are never cropped, padded or tiled.
Where it lives
prepare_segment, normalize_windows, embed_segment and test_duration_sampler in embed.py; band_limit and _crop in handcrafted.py. Spectra-AASIST's input path is exactly prepare_segment; M5 uses the same steps in a slightly different order (trim, then band-limit) that differs by at most one 20 ms frame.
Parameters and where each is set
- The band-match filter: a Kaiser FIR low-pass, cutoff 7,250source: src/hearsay/handcrafted.py line 39 (GitHub; assumes main is public) Hz, transition width 600source: src/hearsay/handcrafted.py line 39 (GitHub; assumes main is public) Hz, 45source: src/hearsay/handcrafted.py line 39 (GitHub; assumes main is public) dB attenuation, 71 taps, applied zero-delay by FFT convolution and cached once per process (handcrafted.py, lines 39–52). The rationale in the comment block: 1,602source: src/hearsay/handcrafted.py line 34 (GitHub; assumes main is public) of the 1,671source: README.md, section numbers test files carry the roll-off.
- Order in
prepare_segment: band-limit (unless told the caller already did), silence trim, a seeded random crop for training rows only, then a cap at 8.0source: src/hearsay/embed.py line 23 (GitHub; assumes main is public) s (embed.py, lines 80–102). - Normalization: the deep path normalizes each input to zero mean and unit variance (embed.py, lines 38–43); the engineered path normalizes to an RMS of 0.1source: src/hearsay/handcrafted.py line 69 (GitHub; assumes main is public) (handcrafted.py, lines 55–69). Level is therefore never a feature.
- Crop lengths are drawn from the test set's own durations (embed.py, lines 71–77): the test clips run 3.0source: docs/STATUS.md, section data–13.6source: docs/STATUS.md, section data s with a median of 3.4source: docs/STATUS.md, section data s, and the training clips 5–9 s. One draw per manifest row, offset seeded by row, so an extraction is reproducible.
Status
Built. The deep path gained the band match at about 04:20 on Saturday; every deep number on this site postdates it (the earlier v2 probe numbers are marked as pre-band-match in the README's tables).
Numbers
Length parity alone was worth 0.05source: README.md, section what-worked for the handcrafted detector (0.709source: README.md, section what-worked → 0.661source: README.md, section what-worked). Band matching and real-speaker diversity together took the probe's holdout from 0.159source: README.md, section what-worked to 0.072source: README.md, section what-worked.
Known limits
The wall is matched, not explained: the codec hunt found no MP3 or AAC setting that reproduces it better than this filter, so the test set's low-pass is treated as a resampler's anti-alias filter. Even band-matched, the test recordings keep a darker spectral envelope that the handcrafted features can see (the test-domain offset on What did not work).
Tests that pin it
tests/test_audio_and_submission.py: no tiling and deterministic crops, the sampler's draws match the test range, the band match pushes energy above the cutoff below one part in ten thousand while leaving the 1 kHz passband alone, normalization removes level and offset. tests/test_spectra.py pins that Spectra's input path is prepare_segment; tests/test_m5_crops.py pins M5's deploy path; tests/test_compression_detector.py pins the effective bandwidth after the filter.
Sources
The CPU detectors report, "Trap 2"; Architecture, invariant 2; the shortcut ledger.