stt(dump): сырой WAV всего потока микрофона (до усиления/VAD) — что реально слышат очки

This commit is contained in:
2026-08-25 03:00:47 +03:00
parent 19fe1b34bc
commit d34d15ecef
@@ -87,9 +87,14 @@ class SttMicStream(
val n = recorder.read(frame, 0, VAD_FRAME_SIZE) // кадры
if (n <= 0) continue
val data = if (n == VAD_FRAME_SIZE) frame else frame.copyOf(n)
// СЫРОЙ дамп: весь поток микрофона (до усиления/VAD) — что реально слышат очки.
if (dumpWriter != null) {
runCatching { dumpWriter.write(shortsToPcm16(listOf(data))) }
.onFailure { log("stt", "dump микрофона: ${it.message}") }
}
// VAD на СЫРОМ фрейме: WebRTC VAD рассчитан на нормальный уровень
// (-21 dBFS у ARGT78 — ок), усиление ×10 клиппует и ломает детекцию.
// Усиленный фрейм — только в сегмент (для whisper и дампа).
// Усиленный фрейм — только в сегмент (для whisper).
val boosted = gainShort(data)
if (vad.isSpeech(data)) {
if (!speeching) {
@@ -138,10 +143,6 @@ class SttMicStream(
private suspend fun closeSegment(segment: List<ShortArray>, dumpWriter: WavWriter?) {
if (segment.isEmpty()) return
val pcm = shortsToPcm16(segment)
if (dumpWriter != null) {
runCatching { dumpWriter.write(pcm) }
.onFailure { log("stt", "dump микрофона: ${it.message}") }
}
log("stt", "🔇 сегмент речи: ${segment.size * VAD_FRAME_SIZE / 16} мс → на телефон")
onChunk(pcm)
}