stt(mic): AudioRecord.read возвращает КАДРЫ, а не байты — не терять вторую половину каждого 100-мс чанка (впечатление 'пропускает через один')
This commit is contained in:
@@ -60,9 +60,13 @@ class SttMicStream(
|
|||||||
log("stt", "микрофон запущен (16 кГц, s16, mono)")
|
log("stt", "микрофон запущен (16 кГц, s16, mono)")
|
||||||
val buf = ByteArray(3_200)
|
val buf = ByteArray(3_200)
|
||||||
while (isActive && shouldRun()) {
|
while (isActive && shouldRun()) {
|
||||||
val n = recorder.read(buf, 0, buf.size)
|
// read(byte[], int, int) в лимите БАЙТОВ, но ВОЗВРАЩАЕТ ЧИСЛО КАДРОВ (frames).
|
||||||
if (n > 0) {
|
// 16-бит моно: кадр = 2 байта. Если брать n как байты — уйдёт только
|
||||||
val chunk = if (n == buf.size) buf else buf.copyOf(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) {
|
if (dumpWriter != null) {
|
||||||
runCatching { dumpWriter.write(chunk) }
|
runCatching { dumpWriter.write(chunk) }
|
||||||
.onFailure { log("stt", "dump микрофона: ${it.message}") }
|
.onFailure { log("stt", "dump микрофона: ${it.message}") }
|
||||||
|
|||||||
Reference in New Issue
Block a user