Bit Crusher (8-Bit Arcade) — User Guide

Digital degradation with true time-domain bit-depth quantization and sample-and-hold reduction, plus an alternate stepped spectral-shaping mode.

Author: Shai Cohen Affiliation: Department of Music, Bar-Ilan University, Israel Version: 0.6 (2026) License: MIT License Repo: Praat AudioTools
Contents:

What this does

Time Domain mode is the actual bit crusher. It reduces amplitude resolution with a selectable quantizer and can hold each sample value for several samples, creating the stair-step timing and aliasing associated with sample-rate reduction.

Stepped Spectral Shaping is a different effect. It applies a staircase of gain values across a selected frequency range. It does not quantize spectral magnitude, phase, or spectral word length.

Signal preservation: The script processes every channel independently and keeps the original channel count. Duration, stored sample rate, and the Sound object's original start time are preserved.

Quick start

  1. In Praat, select exactly one Sound.
  2. Run Bit_Crusher__8-Bit_Arcade_.praat.
  3. Choose a preset, or leave Manual for direct control.
  4. For classic bit crushing, use Time Domain mode and adjust Bit_depth and Sample_rate_reduction.
  5. Choose the output-level behavior and click OK.
Starting point: Classic 8-bit uses 8-bit quantization with no sample hold. Heavy and Extreme progressively reduce both bit depth and temporal resolution. Telephone first band-limits the signal to 300–3400 Hz and then applies 8-bit / 4× hold processing.

Processing modes

Time Domain — bit crushing

The signal follows this path:

Optional band limit → amplitude quantization → sample-and-hold → output level stage

Bit_depth controls the amplitude grid. Lower values create larger amplitude steps and stronger quantization distortion.

Sample_rate_reduction is a whole-number hold factor. A value of 4 keeps one sample value for four original samples. The Sound object itself stays at its original sample rate; the displayed “effective SR” is the original rate divided by the hold factor.

Quantizer modes

ModeBehavior
Symmetric, zero-preservingRecommended. Symmetric positive/negative codes with an exact zero. Uses 2^bits − 1 levels, so silence remains exactly silent.
Signed PCMUses exactly 2^bits signed codes including zero. The negative extreme reaches −1; the positive extreme is slightly below +1.
Legacy v0.3Preserves the older response for compatibility. It uses 2 × 2^bits + 1 levels and also contains zero.
1-bit note: In the recommended symmetric mode, the minimum scale is clamped so 1-bit and 2-bit both use the same three levels: −1, 0, +1.

Stepped Spectral Shaping

The sound is transformed to a Spectrum. Inside Lower_frequency … Upper_frequency, each FFT bin is multiplied by a gain determined by its position in that range. The gain changes in discrete steps from 0 to 1.

frequency position → staircase gain with Quantization_steps + 1 levels
outside selected range → × Outside_range_multiplier

The same gain is applied to the real and imaginary components, so the spectral phase is retained. FFT zero-padding is trimmed after resynthesis so the output returns to the input duration.

Presets

PresetModeBit depthHoldBand limit
ManualUses the form valuesForm valueForm valueForm value
Classic 8-bitTime Domain8Off
Subtle (12-bit)Time Domain12Off
Heavy (4-bit)Time Domain4Off
Extreme (2-bit)Time Domain2Off
TelephoneTime Domain8300–3400 Hz
Crunch (6-bit)Time Domain6Off
What presets do not override: Quantizer_mode, the output-level mode, Ceiling_peak, visualization, and playback remain under user control. All built-in presets select Time Domain mode, so Quantization_steps has no audible role in those preset runs.

Parameters

ParameterDefaultMeaning
PresetManualSelects Manual or one of six built-in Time Domain settings.
ModeTime DomainActual bit crushing or stepped spectral gain shaping.
Bit_depth8Whole number from 1 to 24. Used only in Time Domain mode.
Sample_rate_reduction1Whole-number sample-and-hold factor. 1 = no hold reduction.
Quantizer_modeSymmetricSelects the amplitude-code mapping used by Time Domain mode.
Band_limit_before_crushingOffApplies a Hann band-pass before Time Domain quantization. Uses Lower/Upper frequency.
Lower_frequency200 HzLower edge for spectral shaping, or for the optional pre-crush band limit.
Upper_frequency3000 HzUpper edge; values above Nyquist are clamped to Nyquist.
Quantization_steps2Whole number ≥1. In spectral mode this produces steps + 1 staircase gain levels.
Outside_range_multiplier0.5Gain applied outside the selected range in spectral mode. Must be ≥0.
Output_level_modeNoneLeave level unchanged, attenuate only above a ceiling, or normalize every non-silent result to the ceiling.
Ceiling_peak0.99Target used by Safety ceiling or Peak normalize. Valid range: >0 to 1.
Draw_visualizationOnDraws waveform comparison, zoom, and summary.
Play_after_processingOnPlays the final Sound after processing.

Output & visualization

Output level

ModeBehavior
NoneNo automatic level change.
Safety ceilingAttenuates only when the current peak exceeds Ceiling_peak; quieter results are not boosted.
Peak normalizeEvery non-silent result is scaled to Ceiling_peak, up or down.
Level warning: With no peak normalization, very low-bit processing can exceed ±1. The script reports this because saving such a result to integer PCM may clip.

Visualization

The Picture window shows:

The visualization uses the final signal after the selected output-level stage.