stt(mic): request frames in frames (inFrameCount), not bytes — each chunk now carries full 100 ms
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user