Browse Source

Document radio VAD compressor behavior and validation

master
evgeny 1 day ago
parent
commit
13b5136b92
  1. 22
      doc/tasks.md

22
doc/tasks.md

@ -184,8 +184,9 @@
512, фильтр-гистерезис + машина состояний (`src/radio/radio_vad.h`, чистый,
юнит-тестируемый): старт при подтверждении 2 окон (~64мс) выше порога
`radio_vad_threshold`, стоп при тишине `radio_vad_hangover_ms` (200мс) или чужом
разговоре (busy = RX-кадр <200мс). История захвата (pre-roll) удалена; передаётся текущий PCM.
Компрессор в VAD-режиме байпасится. Desktop `radio_audio_engine.cpp` и Android
разговоре (busy = RX-кадр <200мс). Перед BEGIN сохраняется до 1с непереданного PCM;
prefetch отправляется одной задачей перед live без повторов и задержки на стороне отправителя.
VAD использует отдельный компрессор с собственной историей усиления. Desktop `radio_audio_engine.cpp` и Android
`RadioAudioEngine.kt` фидят PCM постоянно в VAD-режиме; JNI `radioVadMode()`.
Тест `test_radio_vad` (ресемплер + FSM). Android: onnxruntime AAR 1.23.2 в
`jniLibs/` + `cpp/onnxruntime/include` + `-DHAVE_SILERO_VAD` в CMake.
@ -196,6 +197,23 @@
SCREEN_OFF освобождает захват, SCREEN_ON автоматически открывает новое окно.
RX остаётся активен; TX освобождается отдельно через `radio_audio_capture_stop()`.
[+] **Отдельный компрессор перед VAD рации** — 03.10.2026:
копия PCM 48кГц/20мс проходит через общий audio_compressor до ресемплера и Silero.
Настройки общие с TX, кроме `radio_vad_compressor_max_gain_db` (15дБ по умолчанию,
1..60дБ); включение также общее. Состояния TX/VAD независимы, prefetch хранит исходный PCM.
Выключенный компрессор не добавляет ожидания блока; разрыв/новый захват сбрасывает AGC и Silero.
Android: отдельный ползунок, DataStore/INI/runtime; диагностика `radio` показывает
параметры, input/output RMS, фактический gain и клиппинг. Диапазоны max_gain согласованы с библиотекой.
test_voice_tx: точный вход Silero, байтовое совпадение Opus/prefetch, mono/stereo,
6/30дБ, переменные PCM-чанки и reset. Настоящий Silero распознаёт речь при амплитуде
0.03 на тихом фоне, останавливается после речи; повторный reset воспроизводит результат.
Чистые сборки ядра/Qt/APK и целевые тесты прошли; Samsung не подключён к ADB.
[ ] **Linux ONNX Runtime: повторная регистрация схем при запуске теста** — 03.10.2026:
test_silero_vad при загрузке модели печатает серии `Schema error: ... already registered`.
Инференс, речь, тишина и reset проходят; отдельно проверить состав и загрузку Linux-библиотек ONNX.
Диагностика: `/tmp/vad-compressor-silero-tests.log`; Android-сборка таких сообщений не содержит.
[+] **chatgui (Qt) не собирался: C++ void* в utun_node.cpp** — сделано. Причина:
`proxy_protocol.h` (C-заголовок, включается в C++ `utun_node.cpp`) делал
`e->dgram = u_malloc(...)` и `struct proxy_flow* f = arg;` без явных приведений —

Loading…
Cancel
Save