stt(mic): микрофон на 48 кГц (нативная частота) + даунсемплинг 48→16 — рваность ARGT78 давала ровные провалы 100 мс

This commit is contained in:
2026-08-25 01:39:12 +03:00
parent 032424f513
commit d78ed4429e
2 changed files with 68 additions and 6 deletions
@@ -118,4 +118,36 @@ class MicChunkTest {
}
private fun recorderWouldReturn(frames: Int) = frames
/*
* Даунсемплинг 48→16 кГц (TASK-mic-48k): микрофон ARGT78 на 16 кГц пишет
* рвано (ровные провалы тишины с периодом 100 мс) — пишем на 48 кГц
* (нативная частота драйвера) и прореживаем каждый 3-й сэмпл.
*/
@Test
fun downsample_4800Frames_gives3200Bytes() {
val buf = ByteArray(MIC_CHUNK_FRAMES * 2) // 4800 кадров = 9600 байт
val out = downsample48To16(buf, MIC_CHUNK_FRAMES)
assertEquals(3_200, out.size, "4800 кадров 48кГц → 1600 сэмплов 16кГц = 3200 байт")
}
@Test
fun downsample_takesEveryThirdSample() {
// 6 кадров 48кГц (12 байт): 0,1,2,3,4,5 → 0 и 3 (каждый 3-й)
val buf = byteArrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
val out = downsample48To16(buf, 6)
assertEquals(4, out.size, "6 кадров → 2 сэмпла = 4 байта")
assertEquals(1, out[0].toInt() and 0xff)
assertEquals(2, out[1].toInt() and 0xff)
assertEquals(7, out[2].toInt() and 0xff)
assertEquals(8, out[3].toInt() and 0xff)
}
@Test
fun downsample_nonMultipleOf3_dropsTail() {
val buf = ByteArray(14) // 7 кадров: 6 usable + 1 отброшен
val out = downsample48To16(buf, 7)
assertEquals(4, out.size, "6 usable кадров → 2 сэмпла")
}
}