From c940a7e0eb3ceadb775da47ff7de366a9702255f Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Mon, 24 Aug 2026 11:08:27 +0300 Subject: [PATCH] =?UTF-8?q?stt(mic):=20AudioRecord.read=20=D0=B2=D0=BE?= =?UTF-8?q?=D0=B7=D0=B2=D1=80=D0=B0=D1=89=D0=B0=D0=B5=D1=82=20=D0=9A=D0=90?= =?UTF-8?q?=D0=94=D0=A0=D0=AB,=20=D0=B0=20=D0=BD=D0=B5=20=D0=B1=D0=B0?= =?UTF-8?q?=D0=B9=D1=82=D1=8B=20=E2=80=94=20=D0=BD=D0=B5=20=D1=82=D0=B5?= =?UTF-8?q?=D1=80=D1=8F=D1=82=D1=8C=20=D0=B2=D1=82=D0=BE=D1=80=D1=83=D1=8E?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BB=D0=BE=D0=B2=D0=B8=D0=BD=D1=83=20=D0=BA?= =?UTF-8?q?=D0=B0=D0=B6=D0=B4=D0=BE=D0=B3=D0=BE=20100-=D0=BC=D1=81=20?= =?UTF-8?q?=D1=87=D0=B0=D0=BD=D0=BA=D0=B0=20(=D0=B2=D0=BF=D0=B5=D1=87?= =?UTF-8?q?=D0=B0=D1=82=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20'=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=BF=D1=83=D1=81=D0=BA=D0=B0=D0=B5=D1=82=20=D1=87=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B7=20=D0=BE=D0=B4=D0=B8=D0=BD')?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pw/binom/viewmate/glasses/stt/SttMicStream.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 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 37f1e46..fa5fca5 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 @@ -60,9 +60,13 @@ class SttMicStream( log("stt", "микрофон запущен (16 кГц, s16, mono)") val buf = ByteArray(3_200) while (isActive && shouldRun()) { - val n = recorder.read(buf, 0, buf.size) - if (n > 0) { - val chunk = if (n == buf.size) buf else buf.copyOf(n) + // read(byte[], int, int) в лимите БАЙТОВ, но ВОЗВРАЩАЕТ ЧИСЛО КАДРОВ (frames). + // 16-бит моно: кадр = 2 байта. Если брать n как байты — уйдёт только + // первая половина каждого куска (50 из 100 мс) → «рваное»/пропущенное аудио. + val frames = recorder.read(buf, 0, buf.size) + if (frames > 0) { + val bytes = frames * 2 + val chunk = if (bytes == buf.size) buf else buf.copyOf(bytes) if (dumpWriter != null) { runCatching { dumpWriter.write(chunk) } .onFailure { log("stt", "dump микрофона: ${it.message}") }