The uncommitted code from the last session was a working silence-index
subcommand wired through cli.py — but it never landed on main. This
commit:
- Adds render_silence_index() to waveform.py (was already on disk but
uncommitted) — tabular view of silence runs with start/end/duration
and a position bar showing where each run falls in the audio.
- Wires it through cli.py as 'silence-index' (alias: 'si') with
--silence-threshold and --silence-min-duration args.
- Adds 2 tests: test_render_silence_index_empty_audio (silent file
produces 1 run with bar) and test_render_silence_index_no_silences_message
(loud sine at -100dB threshold → 'no silence runs' message).
- Updates README: 'si' added to step-by-step workflow and the
subcommand table, alongside the previously-uncommitted 'mb' (multiband).
64/64 tests passing in 14.6s.
Use case: when picking natural splice points to bracket a bad word,
you want a tabular list of silence runs you can eyeball, not a
waveform. si is the right tool for that — also faster than mb on long
files since it doesn't need to render bars per band.
- waveform.py: render_multiband_waveform() — N rows of ASCII bars, each row
labeled with its band-start time. Makes it easy to find timestamps in
long audio by counting row + column.
- cli.py: new 'multiband' / 'mb' subcommand
- Fixed: multiband band alignment was drifting (off-by-one in samples)
- tests: 1 new multiband smoke test; 62 total all passing