Professional podcast audio preprocessing - broadcast-quality results with zero audio engineering knowledge required
Raw microphone recordings are messy: room rumble, background hiss, awkward silences, inconsistent volume, harsh sibilance. Jivetalking fixes all of this automatically, transforming raw voice recordings into broadcast-ready audio at -18 LUFS (the broadcast/podcast standard).
jivetalking presenter1.flac presenter2.flac presenter3.flacThat's it. No configuration, no knobs to tweak, no audio knowledge required.
| Principle | Implementation |
|---|---|
| Best outcome by default | Professional results with zero configuration |
| Quality over speed | Four-pass processing for measurement-driven accuracy |
| Transparency over depth | Every filter prioritises natural sound |
| Adaptive everything | Parameters tune automatically to your specific recording |
Jivetalking's processing pipeline draws inspiration from legendary studio hardware: the Drawmer DS201 noise gate, noise suppressor, Teletronix LA-2A optical compressor, and UREI 1176 limiter. Each filter in the chain prepares the audio for the next.
Measures your audio's characteristics to drive adaptive processing:
- Integrated loudness, true peak, loudness range (EBU R128)
- Noise floor and silence profile
- Spectral characteristics (centroid, rolloff, kurtosis, skewness)
- Dynamic range and transient sharpness
| Filter | Inspiration | What It Does |
|---|---|---|
| High-pass | DS201 side-chain | Removes subsonic rumble (50β60 Hz, adaptive to voice) |
| Low-pass | DS201 side-chain | Removes ultrasonic content that triggers false processing |
| Noise reduction | Non-Local Means | Adaptive Non-Local Means (anlmdn) denoiser with compand residual suppression |
| Gate | DS201 expander | Soft expansion for natural inter-phrase cleanup |
| Declicker | DC-1 | Autoregressive (AR) interpolation click/pop remover |
| Compressor | LA-2A | Programme-dependent optical compression with ~10ms attack |
| De-esser | - | Tames sibilance (adaptive intensity based on spectral rolloff) |
Two-stage EBU R128 loudness normalisation using FFmpeg's loudnorm filter:
| Pass | What It Does |
|---|---|
| Pass 3: Measure | Analyses processed audio to get integrated loudness, true peak, LRA, and threshold |
| Pass 4: Normalise | Applies loudnorm with linear mode using Pass 3 measurements; UREI 1176-inspired peak limiter creates headroom for full linear gain |
Each filter prepares audio for the next:
- Rumble removal before spectral analysis - prevents low-frequency artifacts from confusing noise profiling
- Denoising before gating - lowers the noise floor so the gate threshold can be set optimally
- Gating before compression - removes silence before dynamics processing amplifies room tone
- Compression before de-essing - compression emphasises sibilance; de-essing corrects it
- Normalisation last - sees the fully processed signal for accurate loudness targeting
- Limiter before loudnorm - creates headroom so loudnorm can apply full linear gain without clipping or falling back to dynamic mode
A dark-voiced narrator doesn't need aggressive de-essing. Pre-compressed audio doesn't need heavy compression. Clean studio recordings need different gating than noisy home offices.
Jivetalking measures your specific audio and adapts every filter automatically. The DS201-inspired gate tunes its threshold to your measured noise floor. The noise reducer adapts its compand expansion based on your measured noise profile. The LA-2A-inspired compressor adjusts ratio and release based on your dynamic range.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 1. Record β
β Each presenter records individually β export as FLAC β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 2. Process β
β $ jivetalking *.flac β
β Output: *-processed.flac (level-matched at -18 LUFS) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 3. Edit in Audacity β
β β’ Import all processed files β
β β’ Top/tail and remove flubs β
β β’ Select all tracks β Tracks menu β Mix β Mix to Mono β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 4. Finalize β
β β’ Analyze β Loudness Normalization (preview to check) β
β β’ Normalize to -16 LUFS (dual-mono required) β
β β’ Export as final podcast file β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Single binary with embedded FFmpegβno external dependencies.
Download the latest release for your platform from the releases page:
# Linux (amd64)
chmod +x jivetalking-linux-amd64
sudo mv jivetalking-linux-amd64 /usr/local/bin/jivetalking
# Linux (arm64)
chmod +x jivetalking-linux-arm64
sudo mv jivetalking-linux-arm64 /usr/local/bin/jivetalking
# macOS (Intel)
chmod +x jivetalking-darwin-amd64
sudo mv jivetalking-darwin-amd64 /usr/local/bin/jivetalking
# macOS (Apple Silicon)
chmod +x jivetalking-darwin-arm64
sudo mv jivetalking-darwin-arm64 /usr/local/bin/jivetalkingSee Development section below.
jivetalking [flags] <files>| Flag | Description |
|---|---|
-v, --version |
Show version information |
-d, --debug |
Enable debug logging to jivetalking-debug.log |
--logs |
Save detailed analysis reports |
# Process multiple files
jivetalking presenter1.flac presenter2.flac
# Process with debug logging and analysis reports
jivetalking -d --logs recording.flac
# Process all FLAC files in directory
jivetalking *.flacProcessed files are saved in the same directory with -processed suffix:
recording.flacβrecording-processed.flac
# Clone with submodules (ffmpeg-statigo provides embedded FFmpeg)
git clone --recursive https://github.com/linuxmatters/jivetalking
cd jivetalking
# Or initialise submodules after cloning
just setup
# Build
just build
# Run tests
just testcmd/jivetalking/main.go # CLI entry point (Kong + Bubbletea)
internal/
βββ audio/ # FFmpeg demuxer/decoder wrapper
βββ processor/
β βββ analyzer.go # Pass 1: ebur128 + astats + spectral analysis
β βββ processor.go # Pass 2: adaptive filter chain execution
β βββ filters.go # Filter chain configuration and building
β βββ adaptive.go # Measurement-driven parameter tuning
βββ ui/ # Bubbletea TUI model and views
- Gate: Drawmer DS201 - Soft expander gate with adaptive threshold
- Declick: CEDAR DC-1 - Autoregressive declicker
- Compressor: LA-2A - Programme-dependent optical compression
- Limiter: UREI 1176 - Adaptive peak limiter
- Spectral Analysis - How measurements drive adaptive processing
# Run tests before committing
just test
# Create a release (validates format, creates annotated tag)
just release X.Y.Z
# Preview changelog
just changelog- Follow Conventional Commits format
- Use
just buildfor releases (CGO + version injection required) - See AGENTS.md for full development guidelines