|
|
|
|
@ -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;` без явных приведений — |
|
|
|
|
|