Draw the waterfall for everything that never spoke

Every capture that is not voice, or whose voice yields five characters
or fewer of transcript, now gets a PNG of the waterfall it would have
painted on screen: spectrogram from the IQ where it was kept, from the
demodulated audio otherwise, captioned and labelled either way.

The browser shows it in the picture panel, but only when there is no
transcript, Morse or decoded data to show instead.

  bandsaunter waterfall [PATH...] [--all] [--redraw] [--min-chars N]

draws them after the fact for recordings already on disk.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016PsWPTweCT6pwxKngvVxcg
This commit is contained in:
The Dust Council 2026-09-03 18:36:00 -07:00
parent 7e8b9b268d
commit dee262e130
17 changed files with 1383 additions and 35 deletions

View file

@ -120,6 +120,12 @@ Transcribe existing recordings, or list which speech recognisers are
installed with
.BR \-\-engines .
.TP
.B waterfall
Draw a waterfall for every recording in a directory that produced no
readable words. See
.B WATERFALLS
below.
.TP
.B devices
List attached receivers.
.TP
@ -412,6 +418,37 @@ Nothing is joined across a slash: a suffix says where the station is, not
what it is called, so
.I W1AW/B
is W1AW.
.SH WATERFALLS
Most of what a scanner records cannot be turned into words: a data burst, a
keyed carrier, a pager, a control channel, a stretch of something
unidentified. A waterfall says something about every signal there is,
because it shows the shape of the thing rather than its meaning \[em] how
wide it is, how long it lasted, whether it was keyed, swept, hopping or
steady, and whether it was one signal or three side by side.
.PP
So every capture that produced no readable words is drawn beside the audio
as a PNG: no voice, or voice the recogniser came back from with fewer than
.B \-\-waterfall\-min\-chars
characters, which is what a recogniser handed something that is not speech
reliably does. Time runs down the picture and frequency across it, with the
frequency scale on top, the seconds down the left and a caption underneath
saying what the capture was.
.PP
The caption also says what the picture is *of*, and that matters. Where the
raw IQ was kept this draws the radio spectrum around the tuned frequency,
which is the waterfall an operator would have been watching. Where only the
audio was kept \[em] the usual case, since IQ is off by default \[em] it
draws the demodulated audio instead: after an FM detector the frequency axis
is no longer radio frequency, and a picture that did not say so would be a
lie told in a convincing font.
.PP
.B bandsaunter waterfall
does the same for a directory already recorded, drawing only what cannot be
read unless
.B \-\-all
is given, and skipping what it has already drawn unless
.B \-\-redraw
is.
.SH CW AND IDENTIFICATION
Every capture is offered to a CW decoder once it has finished, whatever the
classifier made of it. Most of the Morse on the air is not a conversation: