Skip to content

Releases: EvanBoyar/talk-spotter

Talk Spotter 2.1.0-rc1 (experimental)

Pre-release

Choose a tag to compare

@EvanBoyar EvanBoyar released this 07 Jul 20:33

Release candidate built from the experimental-refactor branch. Not merged to main yet.

Highlights

  • RTL-SDR DSP rebuilt (lib/dsp.py): polyphase decimation (~2x less CPU at 960 kS/s — matters on Raspberry Pi), proper instant-attack/slow-release AGC for SSB/AM replacing per-chunk peak normalization, fixed deviation-referenced scaling for FM, anti-alias filtering on the AM/FM paths, stateful DC blocking, and a comfort-noise dither that measurably improves Vosk recognition.
  • Validated end-to-end against Vosk (real speech, modulated and demodulated, strong and weak signals): recognition ≥ 2.0.2 in all six scenarios; weak AM 5% → 79%, weak FM 88% → 94% F1.
  • Thread-safety fixes: command parser locking (no more double-post risk), network posting moved off the audio thread, sources join worker threads before closing devices (fixes potential crash on exit).
  • Dead code removed, POTA/SOTA posting deduplicated, 60+ new tests, new tools/validate_demod_e2e.py regression gate.

The .deb below is built by CI from this tag.

v2.0.2

Choose a tag to compare

@EvanBoyar EvanBoyar released this 09 Mar 20:39

What's New

  • CI test gate: Release workflow now runs all unit tests before building .deb packages
  • --version flag: python talk_spotter.py --version prints the current version
  • Central version constant: lib/version.py is the single source of truth; SOTA User-Agent now stays in sync
  • SOTA spotter tests: 18 new unit tests covering OAuth token storage/refresh and spot posting
  • Updated CLAUDE.md: Reflects the lib/, sources/, spotters/, tests/ layout from 2.0.1

v2.0.1

Choose a tag to compare

@EvanBoyar EvanBoyar released this 09 Mar 19:41

Codebase Reorganization

Reorganized the project into a clean package structure:

  • lib/ — core library modules (command_parser, grammar, transcription)
  • spotters/ — network posting clients (dx_cluster, pota_spotter, sota_spotter)
  • tests/ — all unit tests
  • sources/ — audio source classes (unchanged)

Other changes

  • Removed obsolete standalone scripts (kiwi_stream.py, rtl_stream.py), superseded by sources/
  • Updated debian packaging for new directory layout

No functional changes — all 148 tests pass.

v2.0.0

Choose a tag to compare

@EvanBoyar EvanBoyar released this 09 Mar 09:05

What's New

  • Add transceiver audio source with Hamlib CAT control via rigctld
  • Add KiwiSDR auto-reconnect with exponential backoff (max_retries, retry_delay config options)
  • Add unit tests for grammar, DX cluster, POTA spotter, and transceiver modules
  • Fix duplicate words in Vosk grammar vocabulary
  • Remove unused imports and deleted sound_card source

v1.1.3

Choose a tag to compare

@EvanBoyar EvanBoyar released this 08 Mar 00:58

What's new

  • Local config overrides: Create config.local.yaml to override any settings without modifying the tracked config.yaml. Deep-merged at startup, gitignored by default.
  • Default KiwiSDR host changed to ssi.proxy.kiwisdr.com so the developer's personal server isn't the out-of-box default.

v1.1.2

Choose a tag to compare

@EvanBoyar EvanBoyar released this 07 Mar 15:34

What's Changed

  • Unit tests: 81 tests covering command parser happy paths, unhappy paths, edge cases, timeouts, and frequency parsing
  • Vosk finalization fix: Force-flush Vosk when partial text is stable for 2 seconds — fixes grammar-constrained mode where Vosk recognizes words but never commits them as final results, which was causing "cancel" and other commands to be ignored
  • Memory fixes: raw_text no longer grows unboundedly in idle state; audio buffer switched to bytearray for in-place operations
  • Callsign slashes: "slash" and "stroke" now produce / in callsigns (e.g., VP2E/W1AW, W1AW/VP2/P)
  • Removed keyword highlighting: Redundant feature from early development, now that the command parser handles all voice command recognition

v1.1.0

Choose a tag to compare

@EvanBoyar EvanBoyar released this 07 Mar 06:50

Voice command parser rewrite

The command parser has been significantly improved. The biggest user-facing change is that fields can now be spoken in any order — "frequency ... call ... end" works just as well as the original "call ... frequency ... end".

New features

  • Any field order: callsign and frequency (and optional network) can be spoken in any sequence after the wake phrase
  • "callsign" / "call sign": accepted as alternatives to "call"
  • "cancel": say this at any point after the wake phrase to abort the command and return to idle without posting anything
  • Compound number words: "twenty eight decimal five" now correctly parses as 28.5 MHz; previously tens+units combinations like "twenty eight" were misread as "208"
  • Repeated keywords override: saying "call" (or any field keyword) a second time discards the earlier attempt and uses only what follows the second occurrence

Timeout improvements

  • Idle timeout (10s): auto-finalizes after ~10 seconds of silence following the last spoken words, rather than counting from the wake phrase
  • Session timeout (60s): hard cap from wake phrase as a safety net

Bug fixes

  • NATO phonetic X-ray ("x-ray") now detected correctly in callsigns — Vosk splits it into two tokens ("x" and "ray") which are now merged before lookup

v1.0.1

Choose a tag to compare

@EvanBoyar EvanBoyar released this 07 Mar 00:16

Talk Spotter is now considered stable and out of beta. This is a quick patch release fixing one specific issue discovered after 1.0.0.

Fix

NATO phonetic X-ray was never detected. Vosk transcribes "x-ray" as two separate tokens (x and ray) rather than the hyphenated form. The grammar constraint also couldn't include "x-ray" due to the hyphen being invalid in Vosk grammar tokens. As a result, any callsign containing the letter X was silently dropped.

The fix adds "x ray" as a recognized two-word phrase in the Vosk grammar and merges x + ray bigrams into xray before the NATO alphabet lookup in the parser.

v1.0.0

Choose a tag to compare

@EvanBoyar EvanBoyar released this 06 Mar 22:10

Out of beta! This is the real one!

What's new

  • Grammar-constrained recognition: Vosk is now constrained to command vocabulary (NATO phonetics, number words, keywords) by default, significantly reducing false positives from background radio noise. Use --no-grammar to disable.
  • Spotting always enabled: The --spot-mode flag has been removed — spot posting is now on by default. Use --no-post to suppress posting for testing.
  • "complete" terminator: Added "complete" as an alternative to "end" for finishing a voice command.
  • Voice command parsing fixes:
    • Entire commands spoken in one breath now parse correctly (callsign no longer absorbs frequency words)
    • Premature timeouts from partial results being fed to the command parser are fixed
    • Frequency spoken in the same utterance as "end"/"complete" is now correctly captured

v0.2.0

Choose a tag to compare

@EvanBoyar EvanBoyar released this 02 Feb 20:24

What's New

  • Add POTA spot posting support
  • Add SOTA spot posting support with OAuth authentication
  • Fix RTL-SDR freezing by separating read and process threads
  • Add slow AGC to smooth audio level variations
  • Add DC offset removal to FM demodulator
  • Add second model path option to config
  • Enhance error handling in SOTA authentication