Skip to content

Jivetalking 0.6.0

Latest

Choose a tag to compare

@github-actions github-actions released this 21 Jun 00:53
0.6.0
e360692

Highlights ✨

The headline: voice-aware audio analysis, a redesigned live TUI, and structured Markdown/JSON reports. This is the largest release since the tool's first cut.

Audio quality

  • Voice-activity detection (VAD). A single Pass 1 detector finds speech and room tone together, then tunes the gate, denoise, and de-esser per file. It also recognises platform-gated (voice-activated) captures and adapts to them.
  • Measured-profile noise removal. afftdn spectral denoise replaces the old compand stage and runs with a custom per-band noise profile measured from each recording. On the 61-stem validation corpus it cleans the noisiest sources by up to 52 dB while holding speech crest and dynamics, and backs off automatically on voice-activated captures.
  • Deterministic brickwall limiter with adaptive true-peak tuning. Every file lands at -16 LUFS / -1 dBTP. Across the corpus: zero clippers.

Live feedback

  • New status boxes show the adapted filter chain and the Pass-1 measurements while a file processes.
  • The done box adds a Recording score (source-quality stars), true-peak and dynamics before to after, and input-gain advice with a thermometer bar.
  • The file queue scrolls during processing, with a scrollbar and a scroll hint.

Reports and diagnostics

  • An always-on Markdown report per file, plus a structured JSON run-record with sidecars, replacing the old plain-text .log.
  • --diagnostics emits before/after spectrogram PNGs for the whole file, the room tone, and the speech region.

Fixes

  • Re-running a file now overwrites an existing output instead of failing at the final publish after minutes of work.
  • Voice-activated recordings now show a meaningful noise floor and SNR in the TUI instead of digital-silence sentinels.

Under the hood

  • Parallel Pass-1 band measurements and seek-to-region decoding keep analysis fast. Brand names were removed from identifiers and docs, and a new docs/Pipeline.md explains the how and why of the processing chain.

Changes since 0.5.1

  • fix(processor): overwrite existing output instead of failing at publish (e360692)
  • fix(ui): guard separation DB against unmeasured noise floor in voice-activated mode (2287a15)
  • fix(processor,ui): show meaningful noise floor for voice-activated input (cb6be1a)
  • feat(ui): add scrollbar and scroll hint on viewport overflow (9b72de1)
  • fix(ui): make viewport scrollable during file processing (6fdb8df)
  • refactor: address peer-review findings across README and UI layers (b8904a9)
  • refactor(processor): rename calculateSpeechGateThresholdLegacy to calculateSpeechGateThresholdNoProfile (66301bb)
  • refactor: address peer-review findings across seven sub-directories (d2ae790)
  • docs: add sign-posts to Normalisation-Tuning.md from AGENTS.md and README.md (c14a703)
  • docs: extract normalisation tuning rationale to dedicated doc (fc4fbc8)
  • refactor: unify naming and idiomatic Go patterns across audio, CLI, and UI (8427744)
  • ci: pin CGO_ENABLED=1 on builder workflow jobs (627b42d)
  • refactor: improve resource safety, test coverage, and UI purity (dfbcfe2)
  • refactor: remove duplication and dead scaffolding across packages (a8f0ec6)
  • perf: seek to region for spectrograms and cache UI render styles (7d9db27)
  • perf(processor): seek to region before band measurement decodes (2850909)
  • refactor(docs): improve comment accuracy and consistency (98e3a97)
  • refactor: consolidate doc comments and extract spectrogram bounds helper (25102c5)
  • refactor(processor): extend NoiseProfile to the full spectral set (0b9f116)
  • refactor(ui): simplify rgb8 to use RGBAModel.Convert (9963897)
  • refactor(processor): replace math.Max/Min with built-in min/max functions (fbd926f)
  • refactor(cmd): use sync.WaitGroup.Go for cleaner goroutine spawning (44ec734)
  • refactor(processor): remove NoiseFloor field from ProcessingResult (552f2cf)
  • fix(ui): guard live Analysis box noise floor against unmeasured state (94e4432)
  • fix(processor): remove wrong-axis fallback from InputRoomToneFloorDB (4399138)
  • refactor(ui): reconcile noise-floor readouts with input-output before/after pair (eca3b1b)
  • fix(processor): guard levelling-compressor floor against unmeasured astats (fe48aff)
  • fix(processor): add adaptive floor to levelling-compressor threshold (02db698)
  • chore(deps): bump nixpkgs from a799d3e to 567a49d (e9e2392)
  • deps(deps): bump charm.land/lipgloss/v2 in the gomod group (5943961)
  • fix(report): render afftdn noise type in adaptation diagnostics (2f7f4ed)
  • refactor(processor): remove --room-tone-scan-duration flag (830f547)
  • refactor(processor): parallelize post-loop band measurements with bounded goroutines (6f9497a)
  • feat(processor): give afftdn a measured custom noise profile (e11af31)
  • feat(processor): adapt afftdn, disable on voice-activated and seed nf from measured floor (c3ad15e)
  • fix(processor): unify VAD noise seed onto momentary-LUFS axis (524532a)
  • refactor(processor): remove dead SpeechGateAggression diagnostic and sync gate filter comments (4a51543)
  • feat(processor): implement voice-activity-driven speech gate redesign (b793db5)
  • feat(testdata): add process-corpus recipe for binary version A/B analysis (c9e3744)
  • test(processor): verify noise-floor estimation tie-break determinism (56cb179)
  • fix(processor): add deterministic tie-break to candidate sort and sync Voice activated definition (04af1ef)
  • docs(processor): sync docs for unified VAD, speech scoring, and VoiceActivated semantics (1906465)
  • feat(processor): switch VoiceActivated flag from below-split to floored fraction (4760f4c)
  • fix(processor): sanitise non-finite floats in JSON sidecars (11937bc)
  • feat(processor): score speech candidates by SNR and duration saturation (be99232)
  • refactor(processor): retire room-tone candidates concept from schema (0bb5cb1)
  • refactor(processor): remove old voice-activity detector after Phase 1 unified VAD (273c608)
  • fix(processor): widen speech centroid bound from 4500 to 6000 Hz (a3dede6)
  • feat(processor,report): implement unified voice-activity detector in Pass 1 (74a1ca7)
  • fix(processor): decouple speech search from room-tone end (3c78d26)
  • fix(processor): restore speech-gate clamp precedence for crossed bounds (efc333c)
  • refactor: consolidate filter/report/ui code for maintainability (1dc2639)
  • perf(processor,ui,cli): optimise measurement-side reads and TUI render caching (d77e65e)
  • refactor: replace hand-rolled clamps with min/max builtins (4eb6375)
  • refactor(ui): wrap limiter diagnostics in test struct literals (88eec80)
  • refactor(report): extract stageGetter factory to eliminate closure duplication (7c63194)
  • refactor(processor): extract recordWrapper generic for duplicate accessor scaffolding (eca1fe2)
  • refactor(normalise): extract diagnostic structs and helper functions (ea4ee70)
  • refactor(cmd): extract shared artefact-emission spine into emitReportArtefacts (a4f1dce)
  • refactor(processor): bundle speech-gate parameters into context structs (e6d6b26)
  • refactor(cmd): bundle pool plumbing and extract report emission (dac5725)
  • refactor: extract renderFilledBar shared by GainBar and separationBar (62a247d)
  • refactor: extract formatByRule from the twice-copied metricFormat switch (69dd3c4)
  • refactor: collapsed Rumble/Bandlimit into one BiquadFilterConfig + keyword param (6672c14)
  • refactor: inline primaryColor/mutedColor/textColor aliases to canonical constants (0888c35)
  • refactor: drop dead shadowed options param from StyledHelpPrinter (48a345a)
  • refactor: remove dead-code symbols from comprehensive audit (4336a2a)
  • docs: clarify podcast loudness standard and remove stale benchmark reference (aec8922)
  • refactor(cmd): remove deprecated --silence-scan-duration alias (3de3a49)
  • docs(readme): move room-tone scan limiting section to docs/Usage.md (8970865)
  • docs(readme): move reference content to docs/Usage.md and signpost from README (cd689ef)
  • docs(readme): remove stale examples and consolidate development guidance (f3742b1)
  • refactor(docs): consolidate prose (7d729e8)
  • feat(docs): add Pipeline.md — comprehensive how/why guide to audio processing (db9cc6b)
  • docs(refactor): consolidate filter references and retire heritage documentation (e35ad30)
  • refactor: remove brand names from identifiers and documentation (aa0d244)
  • test(processor): remove stale reflection tests and obsolete logging probe (ba69dcc)
  • test(audio): add hermetic unit tests for reader package (1b0e2f0)
  • refactor(cmd): extract analysis report emission into separate function (f9aa602)
  • refactor: standardise spellings to British English (85619cc)
  • refactor(cmd): extract spectrogram render pattern into shared helper (0341993)
  • refactor: migrate test seams to dependency injection structs (93fa22a)
  • fix(docs): correct drifted filter documentation and remove stale process metadata (4987da6)
  • feat(processor): add deterministic brickwall limiter with adaptive loudnorm TP tuning (d7e3560)
  • fix(processor,report): prevent deadlock, handle errors on close, escape markdown pipes (1f7f537)
  • chore: update docs (2931391)
  • chore: update .gif (1dbd4c8)
  • feat(ui): add gain advice with thermometer bar to analysis mode (1c583cc)
  • feat(ui): add source-quality Recording score in done box (e0ef88d)
  • feat(ui): show true peak and dynamics before→after in done box (6f1f7b3)
  • refactor(ui): tighten analysis box padding and relabel gentle mode (b02b766)
  • feat(ui): add status boxes showing adapted config and Pass-1 measurements (19f785e)
  • feat(spectrograms,test): emit before/after spectrogram PNGs with --diagnostics; gate integration tests (a83a3bb)
  • feat(report): emit canonical run-record as structured markdown (2870790)
  • chore(build): update clean target to remove run-record artifacts (214bbe7)
  • docs: rewrite spectral metrics reference to objective definitions (cf68224)
  • feat(processor): emit canonical run-record JSON with sidecars (d7d1186)
  • refactor(processor,logging): reorganise run-record types into domain sub-structs (0e1aa69)

Installation

Download the appropriate binary for your platform below, make it executable, and move it to your PATH:

# Linux (amd64)
chmod +x jivetalking-linux-amd64
sudo mv jivetalking-linux-amd64 /usr/local/bin/jivetalking

# macOS (Apple Silicon)
chmod +x jivetalking-darwin-arm64
sudo mv jivetalking-darwin-arm64 /usr/local/bin/jivetalking

Checksums

SHA256 checksums are provided below for verification.