From f74b10ba38a01b6848f3876ff3b05b41fb04e941 Mon Sep 17 00:00:00 2001 From: Cosmo Date: Mon, 27 Apr 2026 11:03:09 +0000 Subject: [PATCH] =?UTF-8?q?fix(voice):=20=D0=BE=D1=82=D0=BA=D0=B0=D1=82?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20VAD=20preload=20=E2=80=94=20=D0=BC=D0=B5?= =?UTF-8?q?=D1=88=D0=B0=D0=BB=20wake-word=20=D0=BB=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=C2=AB=D0=9A=D0=BE=D1=81=D0=BC=D0=BE=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Параллельный getUserMedia от MicVAD конфликтует со stream'ом wake-word — видимо Chrome применяет AGC/NS по-разному и wake получает «глухое» аудио. Score упал с 0.988 до 0.093 — wake перестал срабатывать. Возвращаемся: VAD создаётся ПОСЛЕ первого wake (~1-2с пауза), но cancel/onSpeechEnd теперь только pause (не destroy), так что повторные wake мгновенные. --- components/VoiceController.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/components/VoiceController.tsx b/components/VoiceController.tsx index 68c68e7..403f167 100644 --- a/components/VoiceController.tsx +++ b/components/VoiceController.tsx @@ -213,10 +213,8 @@ export default function VoiceController() { await wake.start() wakeRef.current = wake setState('listening') - - // Прелоадим VAD в фоне — после первого wake реакция будет мгновенной, - // вместо +1-2с на загрузку Silero VAD. - initVAD().catch((e) => console.warn('[voice] VAD preload failed', e)) + // VAD НЕ прелоадим — его второй getUserMedia мешает wake-word audio. + // Грузится при первом wake (~1-2с), но дальше переиспользуется (см. handleSpeechEnd). } catch (e: any) { console.error('[wake] init failed:', e) setState('error')