From fc84ba16b6fc947bb17732840c0aacb9e00eab2e Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Mon, 24 Aug 2026 11:10:05 +0300 Subject: [PATCH] =?UTF-8?q?stt(mic):=20request=20frames=20in=20frames=20(i?= =?UTF-8?q?nFrameCount),=20not=20bytes=20=E2=80=94=20each=20chunk=20now=20?= =?UTF-8?q?carries=20full=20100=20ms?= 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 fa5fca5..b05ee88 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 @@ -58,12 +58,13 @@ class SttMicStream( try { recorder.startRecording() log("stt", "микрофон запущен (16 кГц, s16, mono)") - val buf = ByteArray(3_200) + val buf = ByteArray(3_200) // = 1600 кадров (16-бит моно) = 100 мс while (isActive && shouldRun()) { - // read(byte[], int, int) в лимите БАЙТОВ, но ВОЗВРАЩАЕТ ЧИСЛО КАДРОВ (frames). - // 16-бит моно: кадр = 2 байта. Если брать n как байты — уйдёт только - // первая половина каждого куска (50 из 100 мс) → «рваное»/пропущенное аудио. - val frames = recorder.read(buf, 0, buf.size) + // AudioRecord.read(byte[], int, inFrameCount): 3-й аргумент — В КАДРАХ, + // а НЕ в байтах (16-бит моно: кадр = 2 байта). Просим buf.size/2 кадров + // (= buf.size байт = 100 мс), получаем frames — и переводиМ В БАЙТЫ (×2). + // Старый баг: n (кадры) брался как байты → ушла половина куска. + val frames = recorder.read(buf, 0, buf.size / 2) if (frames > 0) { val bytes = frames * 2 val chunk = if (bytes == buf.size) buf else buf.copyOf(bytes)