feat(voice): кнопка X в overlay закрывает прослушивание
All checks were successful
Deploy / deploy (push) Successful in 2m13s
All checks were successful
Deploy / deploy (push) Successful in 2m13s
В overlay появляется крестик в правом верхнем углу. Тап = эмитит voice-cancel → VoiceController прерывает активный VAD-захват и сам overlay закрывается. Wake-word, если был активен, продолжает слушать в фоне.
This commit is contained in:
@@ -68,7 +68,23 @@ export default function VoiceController() {
|
||||
|
||||
useEffect(() => {
|
||||
console.log('[VoiceController] mounted, state=idle, ждём тап на микрофон')
|
||||
|
||||
// Кнопка X в overlay шлёт voice-cancel → прерываем активную запись фразы,
|
||||
// но wake-word оставляем слушать в фоне (если он включён).
|
||||
const onCancel = () => {
|
||||
console.log('[voice] cancel — прерываю запись')
|
||||
try { vadRef.current?.pause?.() } catch {}
|
||||
try { vadRef.current?.destroy?.() } catch {}
|
||||
vadRef.current = null
|
||||
busyRef.current = false
|
||||
try { wakeRef.current?.resume?.() } catch {}
|
||||
setState((s) => (wakeRef.current ? 'listening' : 'idle'))
|
||||
emitLocal('idle', AGENT)
|
||||
}
|
||||
window.addEventListener('voice-cancel', onCancel)
|
||||
|
||||
return () => {
|
||||
window.removeEventListener('voice-cancel', onCancel)
|
||||
try { vadRef.current?.destroy?.() } catch {}
|
||||
try { wakeRef.current?.stop?.() } catch {}
|
||||
vadRef.current = null
|
||||
|
||||
Reference in New Issue
Block a user