diff --git a/doc/tasks.md b/doc/tasks.md index f04a29a7..a999bd98 100644 --- a/doc/tasks.md +++ b/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;` без явных приведений —