Skip to content

linuxmatters/jivetalking

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

493 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Jivetalking ๐Ÿ•บ

Raw microphone recordings into broadcast-ready audio in one command. No configuration, and no surprises.

jivetalking LMP-81s-mark.flac LMP-81s-martin.flac LMP-81s-popey.flac

Your files emerge at -16 LUFS / -1 dBTP, the loudness standard for spoken-word podcasts, with room rumble, background hiss, clicks, and harsh sibilance sorted automatically. Multiple files process in parallel, each with its own TUI progress row. Everything needed is embedded in the binary. This is not how audio tools usually work, and that is rather the point.

Example Output

Jivetalking Demo

The Typical Workflow

Record โ†’ Process โ†’ Edit โ†’ Export
  โ”‚         โ”‚         โ”‚         โ”‚
  โ”‚         โ”‚         โ”‚         โ””โ”€ Export
  โ”‚         โ”‚         โ”‚
  โ”‚         โ”‚         โ””โ”€ Import to Audacity, top/tail, edit
  โ”‚         โ”‚
  โ”‚         โ””โ”€ $ jivetalking *.flac (-16 LUFS, matched levels)
  โ”‚
  โ””โ”€ Each presenter records separately, exports FLAC

Include 10-15 seconds of room tone somewhere in your recording. Just sit quietly and let the room breathe - at the start, between sections, or at the end. Jivetalking scans the entire file to find the cleanest room-tone section for building a noise profile, which calibrates the adaptive gate and highpass in Pass 2. The anlmdn โ†’ afftdn noise reduction runs regardless, so recordings without a clean room-tone section are still denoised.


Installation

Single binary. Zero external dependencies. FFmpeg is embedded via ffmpeg-statigo.

bin (Recommended)

Install with bin, a GitHub-aware binary manager:

bin install github.com/linuxmatters/jivetalking

This picks the correct platform and architecture, drops the binary into ~/.local/bin/, and handles updates via bin update. No root required, no path wrangling.

Manual Download

Fetch from the releases page:

# Linux amd64
chmod +x jivetalking-linux-amd64
mv jivetalking-linux-amd64 ~/.local/bin/jivetalking

# Linux arm64
chmod +x jivetalking-linux-arm64
mv jivetalking-linux-arm64 ~/.local/bin/jivetalking

# macOS Intel
chmod +x jivetalking-darwin-amd64
mv jivetalking-darwin-amd64 ~/.local/bin/jivetalking

# macOS Apple Silicon
chmod +x jivetalking-darwin-arm64
mv jivetalking-darwin-arm64 ~/.local/bin/jivetalking

The Four-Pass Pipeline

Jivetalking treats audio processing as measurement science, not guesswork. It analyses your recording first, then adapts every filter to match. A dark-voiced narrator gets gentler de-essing, pre-compressed audio gets lighter compression, and a noisy home office gets different treatment than a clean studio.

Four passes carry a raw recording to a broadcast-ready master:

  1. Analyse: measure loudness, noise floor, and speech; detect the room tone.
  2. Process: run the adapted filter chain.
  3. Measure: read the processed signal back so normalisation has accurate numbers.
  4. Normalise: set the final loudness to -16 LUFS / -1 dBTP.

The Pass 2 filter chain, each stage handing the next a cleaner signal:

downmix โ†’ rumble high-pass โ†’ band-limit low-pass โ†’ noise reduction โ†’ speech gate โ†’ levelling compressor โ†’ de-esser โ†’ analysis โ†’ resample

For the full walkthrough, see docs/Pipeline.md: what each stage does, why it sits where it does, how the adaptive tuning works, and how normalisation reaches -16 LUFS honestly, with a diagram.


Quality Ratings

When a file finishes, the completion box shows two star ratings: Recording (your source capture, the one that varies) and Processed (the output against the -16 LUFS target, almost always five stars). The pair tells the story: a two-star capture taken to a five-star master.

See docs/Usage.md for the three axes behind the Recording score and what a low star is telling you to fix.


Usage

jivetalking [flags] <files...>

Flags

Flag Description
-v, --version Show version and exit
-a, --analysis-only Run analysis only (Pass 1), display results, skip processing
-d, --debug Enable debug logging to jivetalking-debug.log
--diagnostics Write extra diagnostic artefacts: before/after spectrogram PNGs plus .intervals.jsonl/.candidates.jsonl sidecars. Adds extra FFmpeg passes. Off by default
--room-tone-scan-duration=DURATION Cap room-tone candidate scan to the first DURATION of input (e.g. 30s, 1m30s). Default 0s scans the whole file

Examples

# Process multiple presenters in parallel (worker count tracks file count)
jivetalking presenter1.flac presenter2.flac presenter3.flac

# Inspect recordings without processing
jivetalking -a presenter1.flac presenter2.flac

# Debug a problematic recording
jivetalking -d troublesome-recording.flac

# Process all FLAC files in directory
jivetalking *.flac

# Emit before/after spectrograms and interval sidecars
jivetalking --diagnostics presenter1.flac

Processing always writes a Markdown report next to each processed output. For example, recording-LUFS-16-processed.flac gets recording-LUFS-16-processed.md. The report is empirical: every measurement and the exact adapted filter parameters, with objective metric definitions and no quality verdicts. Analysis-only runs write <input>-analysis.md instead.

Diagnostics

--diagnostics writes before/after spectrogram PNGs and .intervals.jsonl / .candidates.jsonl sidecars beside the report, for sweeps and side-by-side comparison. It changes no DSP, so the processed audio is byte-identical with the flag on or off.

See docs/Usage.md for the spectrogram naming scheme and sidecar formats.

Analysis-Only Mode

Pass -a to run Pass 1 only. It writes <input>-analysis.md next to each input and shows the Recording stars plus a one-line gain verdict on screen, without producing any audio. Useful for checking a capture before you commit to a take.

See docs/Usage.md for what the report covers and how to read the gain-advice thermometer.


Development

Requires Go, Nix, and a tolerance for CGO.

# Enter development shell (FFmpeg dependencies provided)
nix develop

# Initialise submodules (ffmpeg-statigo provides embedded FFmpeg)
just setup

# Download static FFmpeg libraries
cd third_party/ffmpeg-statigo && go run ./cmd/download-lib

# Build (never use go build directly - requires CGO + version injection)
just build

# Run tests
just test

# Install to ~/.local/bin
just install

The full source layout, architecture, and contribution standards live in AGENTS.md.

Design Documentation

About

Raw microphone recordings into broadcast-ready audio in one command. No configuration, and no surprises๐Ÿ•บ

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Contributors

Languages