Voice control + speech announcements for the ham shack, driving AetherSDR over its TCI WebSocket. Speech-to-text is fully local (faster-whisper); the radio is controlled by sending TCI commands to AE (which drives the Flex).
Repo folder is
shackspeach(typo); GitHub project isshackspeak.
- Phase 1 — voice control: WORKING. Push-to-talk (hold Right-Ctrl) → speak →
Whisper transcribes locally → keyword parser → TCI command → radio moves.
A wake-word mode ("Orac", Blake's 7) also works (
MODE = "wake"). - Phase 2 — Zen announcements: in progress. A Blake's-7 Zen ship's-computer TTS voice (en-GB-Thomas, slowed, pitch +10 Hz) to speak band/mode changes off the TCI stream. Voice is tuned; the TCI-watch + announce loop is the next build.
| Say | Action |
|---|---|
| "USB" / "LSB" / "CW" / "data" | set mode |
| "twenty meters" / "forty meters" / … | band change (phone-segment VFO) |
| "tune to 14.250" | set frequency (MHz) |
| "mox" / "receive" | TX / RX |
py -3.12 -m venv venv
venv\Scripts\python -m pip install -r requirements.txt
venv\Scripts\python shackspeak.py
Config lives at the top of shackspeak.py: TCI_URL (AE's TCI), MODE
(ptt / wake), PTT_KEY_NAME, wake MODEL, the band/mode maps.
shackspeak.py— the app: PTT + Orac wake modes, the command parser, TCI link.zen_build.py— build the Zen TTS voice:zen_build.py "+10Hz" out.wav [amb](edge-tts Thomas + optional Liberator ambiance;amb0 = clean voice).zen_analyze.py— FFT a reference Zen clip to measure its pitch + hum tones.- dev helpers:
test_parse.py,test_wake.py,gen_zen.py,zen_mix.py,list_voices.py,dl_model.py.
- STT is local (faster-whisper, CPU int8,
base.en). TTS via edge-tts is cloud (MS neural voices) — fine on a desktop with internet; Piper is the planned fully-local alternative. truststoremakes Python trust the Windows cert store so HTTPS works behind antivirus SSL inspection (HuggingFace model download, edge-tts).- Zen voice (locked): en-GB-Thomas · rate −13% · pitch +10 Hz · no ambiance.