Skip to content

voice-goio docs

Platform Status

Component macOS Windows Linux
normalise, radio chain, voices, grammar parser ✅ ✅ ✅
TTS ✅ say (dev) + piper ✅ piper, in use in both consumers ✅ piper
Playback (audio, speaker) ✅ afplay, default device only ✅ winmm, device per channel, in use in both consumers WAV files
Recognition ✅ stt/fake ⏳ stt/sapi — written, not exercised by current consumers, never run against a live engine stt/fake

The consumers are the MyCrew app and the simconnect airport map; both run piper, the speaker and winmm playback on Windows hardware. Neither imports stt/....

stt/sapi

It has never run against a live engine. It is complete — COM creation, audio input selection, grammar load, dynamic callsign rule, PTT, event pump, semantic property extraction — and it compiles and vets clean for windows/amd64. What it has not done is talk to SAPI. The struct layouts are pinned by layout_windows_test.go, which runs in CI on windows-latest, and every failure path returns a typed error. Expect to spend a session on bring-up.

tts/piper

It runs against the real piper binary on Windows in both consumers (sentence-at-a-time synthesis since v0.11.1). The tests still run against testdata/fakepiper, which speaks the same protocol.

Acceptance status

Against the criteria of the design spec §9:

Criterion Status
go.mod zero requires; CGO_ENABLED=0 builds for darwin/arm64, windows/amd64, linux/amd64 ✅ enforced by test and CI
Normaliser covers every row of §4.1 ✅ testdata/normalise/*.txt, one deviation documented in Design notes
≥ 100 voices, ≥ 10 accents ✅ 1145 voices, 23 accents (voicecheck voices)
≥ 95 % intent + callsign on the corpus; off-grammar yields say_again ✅ 34/34 on stt/fake (voicecheck recog)
Radio profiles audibly distinct; speech intelligible through center ✅ asserted in audio/radio, audible via demo -mode profiles
macOS output documented as default-device only ✅ SetDevice is a no-op there and says so
Windows output device selection ✅ winmm, per channel (SetDeviceFor), in use in both consumers
Network disabled: full flow on Windows ⏳ output side runs offline once piper and the models are installed; recognition needs SAPI bring-up
TTS first sample < 300 ms warm ⏳ not measured