Архитектура — Android и Linux
speech-android обеспечивает обработку речи на устройстве для Android и встраиваемого Linux через общее C++-ядро с платформо-специфичными фронтендами. Весь инференс выполняется локально через ONNX Runtime с аппаратно ускоренными execution-провайдерами.
Кроссплатформенный стек
Android и Linux совместно используют C++-субмодуль speech-core, который оркестрирует полный речевой пайплайн. Каждая платформа предоставляет тонкий фронтенд, делегирующий вызовы speech-core через интерфейсы на базе vtable:
┌───────────────────────────────────────────────┐
│ Android: SpeechPipeline (Kotlin/JNI) │
│ Linux: speech.h (C API) │
└──────────────────┬───────────────────────────┘
│
┌──────────────────┴───────────────────────────┐
│ speech-core (C++ submodule) │
│ Turn detection · Interruptions · Context │
└──┬────────┬────────┬────────┬────────────────┘
│ │ │ │ vtables
┌──┴──┐ ┌──┴──┐ ┌──┴──┐ ┌─┴────────┐
│ VAD │ │ STT │ │ TTS │ │ Enhancer │
└──┬──┘ └──┬──┘ └──┬──┘ └─┬────────┘
└────────┴────────┴────────┘
ONNX Runtime (CPU / NNAPI / QNN)Платформенные пути
Android
Kotlin SDK (SpeechPipeline.kt) предоставляет публичный API. Он проходит через JNI в jni_bridge.cpp, который регистрирует vtable-колбеки в speech-core. ONNX Runtime работает с execution-провайдером NNAPI для аппаратного ускорения на чипсетах Qualcomm, Samsung и Google.
Kotlin SDK → JNI bridge → speech-core → ONNX Runtime (NNAPI)Linux
C API (speech.h) предоставляет тот же пайплайн для встраиваемых Linux-целей (автомобильные, Yocto). На автомобильных платформах Qualcomm (SA8295P, SA8255P) ONNX Runtime использует execution-провайдер QNN для ускорения на Hexagon DSP.
C API → speech-core → ONNX Runtime (QNN)Пайплайн
Речевой пайплайн последовательно запускает три стадии: VAD → STT → TTS. Детекция голосовой активности запускает запись, STT транскрибирует аудио, а TTS генерирует ответ. Поддержка barge-in позволяет прерывать воспроизведение TTS, когда пользователь начинает говорить посреди ответа.
speech-core управляет детекцией переключения реплик, обработкой прерываний и контекстом диалога. Реализации моделей (VAD, STT, TTS, Enhancer) подключаются через C-интерфейсы на базе vtable, что делает логику ядра пайплайна независимой от платформы.
Модели
Все модели используют формат ONNX с INT8-квантизацией по умолчанию. Модели размещены на HuggingFace в организации aufklarer и автоматически скачиваются при первом использовании через ModelManager.kt.
| Модель | Задача | Квантизация | Размер |
|---|---|---|---|
| Parakeet TDT v3 | STT (114 языков, BPE-словарь 8192) | INT8 | ~500 МБ |
| Kokoro-82M | TTS | INT8 | ~89 МБ |
| Silero VAD v5 | Детекция голосовой активности | float32 | ~1.2 МБ |
| DeepFilterNet3 | Подавление шума | FP16 | ~4.2 МБ |
Полная загрузка моделей составляет примерно 1.2 ГБ. После первой загрузки весь инференс работает полностью офлайн.
Инференс: OnnxEngine
Обёртка onnx_engine.h обеспечивает платформо-зависимый выбор execution-провайдера (EP). Она проверяет доступные EP во время выполнения и корректно откатывается:
| Платформа | Чипсет | Ускорение |
|---|---|---|
| Android | Snapdragon 8 Gen 1+ | NNAPI → Hexagon NPU |
| Android | Samsung Exynos 2200+ | NNAPI → Samsung NPU |
| Android | Google Tensor G2+ | NNAPI → Google TPU |
| Automotive | SA8295P / SA8255P | QNN → Hexagon DSP |
| Любая | CPU fallback | XNNPACK |
Ключевые C++-файлы
| Файл | Назначение |
|---|---|
jni_bridge.cpp | Связывает ONNX-реализации моделей с C API speech-core через vtable |
parakeet_stt.cpp | STT с жадным TDT-декодером и нормализацией мел-признаков |
kokoro_tts.cpp | TTS с end-to-end моделью и attention-маской |
kokoro_phonemizer.cpp | Фонемизатор на основе словаря для входа TTS |
silero_vad.cpp | Детекция голосовой активности |
deepfilter.cpp | Подавление шума с обработкой STFT/ERB |
onnx_engine.h | Платформо-зависимая обёртка ONNX Runtime (NNAPI на Android, QNN на Linux, CPU fallback) |
linux/src/speech.cpp | Реализация Linux C API |
linux/include/speech.h | Публичный C-заголовок Linux |
Структура исходников
speech-android/
speech-core/ C++-субмодуль (оркестрация пайплайна)
sdk/src/main/
cpp/ ONNX Runtime реализации моделей, JNI-мост, аудио DSP
kotlin/.../speech/ Kotlin публичный SDK (SpeechPipeline, ModelManager)
sdk/src/androidTest/ Инструментальные e2e-тесты (23 теста, 5 наборов)
linux/
include/speech.h Публичный C-заголовок
src/speech.cpp Реализация Linux C API
tests/ Linux-набор тестов (11 тестов)
app/ Демо-приложениеИсходный код: github.com/soniqo/speech-android