Hearably: quiet speech, gain and compression Published 2026-10-04. This is an educational illustration, not a product benchmark. Each language has three mono, 22050 Hz, 16-bit PCM WAVs: 1. Original: synthesized speech followed by a louder, generated two-tone chime. 2. Gain: the complete original with +6 dB linear gain. 3. Compressed: a full-band hard-knee peak compressor followed by +6 dB gain. The quiet speech peaks at -27 dBFS before processing. The chime peaks at -15 dBFS. Compressor threshold: -25 dBFS; ratio: 4:1; instant attack; 150 ms exponential envelope release; no look-ahead, EQ, limiter or normalization. The detector envelope is max(abs(current sample), previous envelope * decay). Above the threshold the envelope's dB excess is divided by four. The resulting gain reduction is applied to the signal. See generate.mjs for the exact equations. Both processed examples have the SAME +6 dB gain on the quiet speech, which is below the threshold. The compressed version reduces the subsequent louder chime. The files are NOT matched in overall RMS or perceived loudness: the changing level gap is the point of this comparison. The example does not separate speech from simultaneous music, measure intelligibility, or reproduce Netflix sound. This simple compressor is not Hearably's multiband processing or Night Mode. Measurements are calculated from the finished PCM files. Speech RMS covers the entire supplied speech segment, including pauses; chime RMS covers its 0.8-second segment. Their dB difference is a sequential level gap, not an industry-standard dynamic-range or speech-to-noise score. RMS is not LUFS; sample peak is not true peak. File levels do not measure speaker output or listening safety. REPRODUCE THE DSP (no packages, accounts or audio tools needed) Download generate.mjs, provenance.json, voice-en.wav and voice-de.wav into one folder. With Node.js 22 or later, run: node generate.mjs To verify the six published outputs and measurements without writing: node generate.mjs --check Also download the six output WAVs and measurements.json before using --check. The generator verifies source SHA-256, analytical compressor transfer and release, uniform gain, preserved gain-only gap, reduced compressed gap and unclipped PCM. SPEECH PROVENANCE We wrote the two short scripts in provenance.json. Speech was synthesized locally using piper-tts 1.8.0 with the listed versioned models and parameters. English: LJ Speech (model card lists public-domain dataset); German: Thorsten Voice (model card lists CC0 dataset). The original cards are en-MODEL_CARD.txt and de-MODEL_CARD.txt. Model/config/source hashes and upstream URLs are in provenance.json. Engine and model binaries are not distributed here. These are synthetic voices, not a recording of the original dataset speakers reading this script, and no speaker or platform endorsement is implied. OPTIONAL RE-SYNTHESIS (not needed to reproduce DSP) Install piper-tts==1.8.0 in an isolated Python environment. Download the model and config URLs in provenance.json and verify their hashes. For each language run: python -m piper -m MODEL.onnx -f voice-LOCALE.wav --noise-scale 0 --noise-w-scale 0 --length-scale 1 --sentence-silence 0.2 -- 'TRANSCRIPT' Use that language's exact model name and transcript from provenance.json. Different inference runtimes may change synthesized samples; the published fixed source WAVs, not a fresh synthesis, are the input to the byte-reproducible example. SOURCE REFERENCES https://github.com/OHF-Voice/piper1-gpl https://keithito.com/LJ-Speech-Dataset/ https://github.com/thorstenMueller/Thorsten-Voice Reuse: Hearably's original script, chime synthesis and illustrative DSP code are offered under CC0. See the linked source projects and supplied model cards for the speech dataset provenance. Credit and a link to the method help readers understand what the example does and does not demonstrate.