Voice Commands

Voice Commands

Voice Commands lets you control your radio by speaking. Tap the capture key (or let the optional wake word listener hear your wake phrase) and Pycom captures what you say, transcribes it to text, and matches it against a fixed set of commands — the same grammar the radio app uses everywhere else. Voice Commands are disabled by default; the transcription backend is the Live Transcription Whisper endpoint, which must be configured and enabled in Config → Speech first.

It is highly recommended to use a headset when using the wake word capability, remote operators can potentially trigger the wake word as the audio has been picked up by your microphone there is no built-in RX suppression. Use the default 1-tap capture key as an alterative trigger.

Privacy: the wake word event capture runs entirely on your computer — your voice does not leave the machine while listening for the wake word, if enabled. When speaking a command, your speech is transferred to a Whisper (speech to text) backend for transcription. This could be either local or remote depending on your configuration.

Quick start: enable Enable Voice Commands in Config → Speech and save, then tap the capture key (default Left Shift) — a ping sounds, the LED turns green and the radio mutes — then speak a command from the table below, for example "tune to 145.5" or "key up". Prefer going hands-free? Also enable Also listen for the wake word and say "Okay radio" instead of tapping the key.

Where the Controls Are #

Voice Commands console tab showing a time-stamped log of wake events, live transcripts, command outcomes, and a text entry box
Config Speech tab showing the Enable Voice Commands checkbox, Capture Key dropdown, wake word checkbox and the Wake Threshold slider

Voice Command Reference #

Every command below works by voice (after a capture key tap or the wake phrase) and typed into the console's entry box. Phrases in quotes are alternatives — say whichever comes naturally. Items in <angle brackets> are placeholders for what you say.

Capture & PTT
Capture, wake word and PTT commands
Say / doAction
Tap the capture key (default Left Shift)Starts listening for a command — ping sounds, LED turns green, radio audio mutes during the capture
"Okay radio"Wake phrase (optional, enable Also listen for the wake word first) — same capture as the key: LED green, ping, radio mutes
"key up" / "PTT on" / "push to talk"Start transmitting
"unkey" / "PTT off" / "drop PTT"Return to receive
"stop transmitting"Return to receive; stops slot playback if one is playing
"stop voice TX"Stop Voice TX slot playback
"play slot <N>" / "transmit slot <N>" (1–8)Transmit a recorded Voice TX slot
Radio connection
Radio connection commands
SayAction
"connect radio" / "connect the radio" / "radio connect"Connect using the radio currently selected in the dropdown
"connect to <radio name>" — e.g. "connect to IC 9700"Selects that radio in the Connection dropdown (loading its saved settings), disconnecting the current radio first if needed

Names match case/space-insensitively with a fuzzy fallback ("9700" → "IC 9700"); unknown names are reported in the console, never guessed.

Frequency & mode
Frequency and mode commands
SayAction
"tune to <freq>"Tune to the frequency (see spoken formats below)
"tune to <freq> <mode>" — e.g. "tune to 145.5 FT8"Tune and set the mode in one breath. FT8 also switches to USB with data mode on; other modes just set the mode
"FT8" / "set FT8" / "mode FT8"Jump to the current band's FT8 calling frequency with USB data and filter 1 (IC-9700: 144.174 / 432.174 / 50.313 / 1296.174 MHz; common HF FT8 frequencies included)
"switch to <mode>" / "mode <mode>" / "change (mode) to <mode>" — e.g. "switch to USB", "mode CW"Set the mode: USB, LSB, FM, AM, CW or RTTY (validated against the radio's supported modes)
Spoken frequency formats
SpokenResolves to
"145.5"145.5 MHz
"fourteen point oh seven four"14.074 MHz
"fourteen oh seven four"14.074 MHz (kHz form)
"432.100.000"432.100 MHz (dotted entry style)

Every frequency is validated against the connected radio's band ranges — a value that lands in no band is rejected rather than sent to the radio.

Filters, data mode & VOX
Filter, data mode and VOX commands
SayAction
"set filter one" / "two" / "three"Select filter 1, 2, or 3
"data mode on" / "data mode off"Data mode on sets USB first — DATA is a per-mode modifier
"vox on" / "vox off" / "disable vox"VOX on/off — only offered on radios that support it
"wake word on" / "enable (the) wake word" / "turn on wake word"Enable the optional always-on wake word listener (the capture key keeps working regardless)
"wake word off" / "disable (the) wake word" / "turn off wake listening"Disable the wake word listener — hands-off control of hands-free mode
Transcription & satellites
Transcription and satellite commands
SayAction
"transcribe" / "start transcribe"Open the Transcribe window and start (the panel's Start/Stop button stays in sync)
"stop transcribe"Stop transcription
"show satellite passes"Open the AMSAT status window and refresh the pass list
"satellite mode on" / "satellite mode off"Run the satellite toggle, including band reconciliation
Memory
Memory commands
SayAction
"apply memory <name>" / "recall memory <name>"Apply the named memory via the Apply button path. Names match case-insensitively with a fuzzy fallback ("satellite pass" → "Satellite Pass (ISS)")

A partially-heard name (cut off mid-utterance) is held back rather than applied.

Mid-transmission (no wake word)
Commands recognised while transmitting (no capture key or wake word needed)
Say (mid-TX only)Action
"tx off" / "transmit off" / "unkey" / "PTT off"Return to receive
"stop transmitting"Return to receive (unkeys the radio)
"stop voice TX"Stop slot playback
"vox off" / "disable vox"VOX off; a VOX-held transmission returns to receive

"tx off" and "transmit off" are mid-transmission-only phrases — they are not part of the normal grammar, so saying them while receiving is simply unrecognized.

How It Works #

  1. Tap the capture key (default Left Shift) — the LED turns green, a soft ping sounds and the radio audio mutes. Alternatively, if Also listen for the wake word is enabled, say "Okay radio" — same effect. The key always works; the wake word listener is optional and can be toggled by voice ("wake word on/off").
  2. Speak a command. The app transcribes what it hears in rounds (about 4, then 7.5, then 10 seconds of accumulated audio) and runs the grammar after each round; the first recognized command executes and capture ends immediately. Outcomes appear in the status bar and the console.
  3. If nothing is recognized, the console shows the last Whisper transcript so you can see exactly what was heard.

A few behaviours worth knowing:

Mid-Transmission Commands

While the radio is transmitting (or receiving with VOX enabled), the capture key and wake path are deliberately disabled — a wake word would itself key a VOX radio, and reaching for the key mid-transmission defeats the point. Instead, a shorter command mode arms automatically: no capture key and no wake word needed, just speak. Only the commands that are safe while keyed are recognised — see the Mid-transmission table in the command reference above.

Everything else — tune, mode, memory, slots, "key up", "vox on" — is rejected while keyed, and speech that contains no command (QSO chatter) is silently discarded: it never executes and never appears in the console. One capture attempt per 5 s at most; silence below conversational level never triggers a capture at all.

What to Expect

Tuning

The Wake Threshold slider (0.30–0.95, live on Save) affects only the wake word: lower hears more wake words but risks false triggers; higher is stricter. The capture key ignores it entirely. Everything else is fixed in code but logged at startup for diagnosis (Wake listener config: ... in ~/Pycom/logs/pycom.log). Near-miss lines log at DEBUG for a diagnosis session.

If near-misses pile up despite a low threshold, the model isn't keyed to your voice: retrain at voicute.com with ~5 recordings of your own voice added, then drop the resulting okay_radio.onnx + model_info.json into ~/Pycom/voice/wakeword/. A user model always wins, survives app updates, and requires no code change.

Availability

File Locations
Voice Commands file locations
ItemLocationPurpose
Wake word model~/Pycom/voice/wakeword/okay_radio.onnx + melspectrogram.onnx + model_info.json. User files take priority and are never overwritten.
Bundled modelinside the app bundle (model/)Factory default, deployed to the user directory on first run
Model notesmodel/wake_word_README.md in the app sourceModel provenance and runtime contract (v9.3)
Command logthe Voice Commands console (Status tabs)Key/wake events, live transcripts, outcomes, typed entry
Application log~/Pycom/logs/pycom.logWake tuning snapshot, near-miss lines (DEBUG), mic errors