End recording when the user stops, not the music
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>
This commit is contained in:
1 parent
74bc1be2d6
commit
1fa75e58fc
16 files changed
+597
-22
No files matched your search
@@ -56,6 +56,10 @@ wake_word:
|
||||
vad_threshold: 0.5 # silero-vad probability threshold
|
||||
vad_gate: 0.0 # >0: wake only when openWakeWord's own VAD agrees (fewer false wakes from TV/music)
|
||||
silence_ms: 800 # end-of-utterance silence
|
||||
voice_gate_ratio: 3.0 # how much louder than the background a frame must be to count as
|
||||
# the user talking — lets recording end while your own speakers play
|
||||
# music (Silero rates music as speech). 0 = off, raise if commands
|
||||
# get cut off, lower if music keeps the recorder running.
|
||||
|
||||
mcp:
|
||||
servers_config: "mcp_servers.json"
|
||||
|
||||
Reference in new issue
Block a user