stt(mic): AudioRecord.read возвращает КАДРЫ, а не байты — не терять вторую половину каждого 100-мс чанка (впечатление 'пропускает через один')
This commit is contained in:
@@ -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}") }
|
||||
|
||||
Reference in New Issue
Block a user