From d34d15ecef803d1dca21d4e19e480584541d9d3a Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Tue, 25 Aug 2026 03:00:47 +0300 Subject: [PATCH] =?UTF-8?q?stt(dump):=20=D1=81=D1=8B=D1=80=D0=BE=D0=B9=20W?= =?UTF-8?q?AV=20=D0=B2=D1=81=D0=B5=D0=B3=D0=BE=20=D0=BF=D0=BE=D1=82=D0=BE?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BC=D0=B8=D0=BA=D1=80=D0=BE=D1=84=D0=BE=D0=BD?= =?UTF-8?q?=D0=B0=20(=D0=B4=D0=BE=20=D1=83=D1=81=D0=B8=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F/VAD)=20=E2=80=94=20=D1=87=D1=82=D0=BE=20=D1=80?= =?UTF-8?q?=D0=B5=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=20=D1=81=D0=BB=D1=8B=D1=88?= =?UTF-8?q?=D0=B0=D1=82=20=D0=BE=D1=87=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pw/binom/viewmate/glasses/stt/SttMicStream.kt | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/app-glasses/src/main/kotlin/pw/binom/viewmate/glasses/stt/SttMicStream.kt b/app-glasses/src/main/kotlin/pw/binom/viewmate/glasses/stt/SttMicStream.kt index d046f2a..b99d08b 100644 --- a/app-glasses/src/main/kotlin/pw/binom/viewmate/glasses/stt/SttMicStream.kt +++ b/app-glasses/src/main/kotlin/pw/binom/viewmate/glasses/stt/SttMicStream.kt @@ -87,9 +87,14 @@ class SttMicStream( val n = recorder.read(frame, 0, VAD_FRAME_SIZE) // кадры if (n <= 0) continue val data = if (n == VAD_FRAME_SIZE) frame else frame.copyOf(n) + // СЫРОЙ дамп: весь поток микрофона (до усиления/VAD) — что реально слышат очки. + if (dumpWriter != null) { + runCatching { dumpWriter.write(shortsToPcm16(listOf(data))) } + .onFailure { log("stt", "dump микрофона: ${it.message}") } + } // VAD на СЫРОМ фрейме: WebRTC VAD рассчитан на нормальный уровень // (-21 dBFS у ARGT78 — ок), усиление ×10 клиппует и ломает детекцию. - // Усиленный фрейм — только в сегмент (для whisper и дампа). + // Усиленный фрейм — только в сегмент (для whisper). val boosted = gainShort(data) if (vad.isSpeech(data)) { if (!speeching) { @@ -138,10 +143,6 @@ class SttMicStream( private suspend fun closeSegment(segment: List, dumpWriter: WavWriter?) { if (segment.isEmpty()) return val pcm = shortsToPcm16(segment) - if (dumpWriter != null) { - runCatching { dumpWriter.write(pcm) } - .onFailure { log("stt", "dump микрофона: ${it.message}") } - } log("stt", "🔇 сегмент речи: ${segment.size * VAD_FRAME_SIZE / 16} мс → на телефон") onChunk(pcm) }