listen — An audio file as timed words and voice measures — openbash
Any audio or video file on a mount, or a link: every word timed to the millisecond with its speaker and confidence, pauses, and the voice measured over time (loudness, pitch, brightness, harshness, jitter, shimmer, learned quality scores). Time series, never a summary.
listen
listen is a command on the openbash shell, reachable over HTTP, SSH and MCP with one key. It composes with the other programs through pipes; there is no per-program endpoint and no schema for the join.
listen /attachments/wb1/take-2.mp3 | head -4 start_ms end_ms speaker confidence duration_ms f0_median_hz level_peak_dbfs sibilance_peak text 31 192 0.588 161 107.6 -11.6 0.002 A 212 493 0.9 281 136.2 -7.7 0.5163 model 533 855 0.748 322 154.1 -8.9 0.0878 checker
help
listen: an audio file as measured time series.
USAGE
listen FILE|URL [--speakers N] [--language CODE] [--hop MS] [--print TABLE]
listen wait JOB_ID [--print TABLE]
listen compare JOB_A JOB_B [--print words|voice|file|changed|json]
LISTEN
FILE is an audio or video file on a mount (/attachments/<workbook>/…,
/googledrive/…, /dropbox/…, /tmp/…) up to 200 MB, or a public http(s) link.
Nothing is summarised or reworded: the answer is numbers to check.
words every word: start_ms, end_ms, speaker, the recogniser's
confidence (0 to 1), duration, median pitch, peak level and peak
sibilance over the word. Words it could not place in time
(numerals, symbols) keep their text with null times, and a note
says how many.
turns who speaks from when to when.
gaps every pause of 150 ms or more, and how loud the room is in it.
frames the voice every --hop ms (50 unless said): level (dBFS),
momentary loudness (LUFS, every 100 ms), pitch (Hz, empty when
unvoiced), voiced, spectral centroid (brightness), sibilance
(share of energy 4 to 10 kHz: harshness), alpha ratio (1 to 5 kHz
against 50 Hz to 1 kHz, in dB) and spectral flatness (noisiness).
segments each turn measured as a voice: median pitch, pitch range in
semitones (monotone is small), jitter and shimmer (roughness),
harmonics-to-noise ratio (breathiness or hoarseness is low),
words per minute, loudness, and learned scores: naturalness MOS
(1 to 5) and signal, background and overall MOS (1 to 5).
mos the learned scores per 10 s window, as a series.
file sample rate, channels, codec, duration, integrated loudness,
sample peak, clipped fraction, noise floor, speech level, MOS.
--print picks the table printed, tab-separated with a header; words is
the default and json the whole answer. The whole answer is always written
to /tmp/listen/<job>.json, to cut with jq, csv or awk.
--speakers N when the number of speakers is known; --language CODE (en,
hi, …) when the language is; both are found from the audio otherwise.
Listening takes a while: about a minute for the first file, then a
fraction of the audio's length. A command waits up to 80 seconds, then
prints `listen wait JOB_ID`; run that until the answer comes. Nothing is
listened to or billed twice.
COMPARE
Two finished jobs of the same words (two takes, two voices, two settings),
lined up word by word. Every delta is B minus A: each matched word's
duration, pitch, peak level, sibilance and confidence; the voice measures
(pitch, range, jitter, shimmer, HNR, pace, loudness) and the file's
(loudness, peak, clipping, noise floor, MOS). Words that differ between
the two are listed apart (--print changed). Free.
COSTS
1.5 cents a minute of audio, to the second, and at least five minutes a
file (7.5 cents): starting the listener costs about that much however short
the file. The same file with the same settings again is a cached answer,
free; so is compare.