A higher ratio raises the loudness gate, so it rejects more audio rather than less. The config guidance claimed the opposite; pin the direction with a test.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Silero VAD answers "is this voice-like?", which music, TV and podcasts
satisfy just as well as the user does. With Spotify playing through the
device's own speakers the VAD never went quiet, so record_utterance never
saw the end of the command and ran to the 20 s cap on master and slave
alike -- and music alone was enough to defeat the "no speech during the
grace window" early return.
Wrap the VAD in a SpeechEndpointer that tracks the background loudness of
the recent window and only reports speech while a frame is clearly louder
than it. Both wake-word loops feed their idle audio through observe(), so
the gate is already calibrated when a turn starts, and only non-voice
frames update the background so a long sentence cannot raise the gate onto
itself. Onset/release hysteresis keeps trailing quiet syllables.
The master owns the knob (wake_word.voice_gate_ratio, 0 = off) and pushes
it to satellites in the wake-word block.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Propagate the master's follow-up decision to slave devices and skip wake-word detection for one turn after response playback.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Fall back to CPU for speaker identification and fail speech recognition with an actionable restart message when the NVIDIA driver resets.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>