Архитектура — 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 v3STT (114 языков, BPE-словарь 8192)INT8~500 МБ
Kokoro-82MTTSINT8~89 МБ
Silero VAD v5Детекция голосовой активностиfloat32~1.2 МБ
DeepFilterNet3Подавление шумаFP16~4.2 МБ

Полная загрузка моделей составляет примерно 1.2 ГБ. После первой загрузки весь инференс работает полностью офлайн.

Инференс: OnnxEngine

Обёртка onnx_engine.h обеспечивает платформо-зависимый выбор execution-провайдера (EP). Она проверяет доступные EP во время выполнения и корректно откатывается:

ПлатформаЧипсетУскорение
AndroidSnapdragon 8 Gen 1+NNAPI → Hexagon NPU
AndroidSamsung Exynos 2200+NNAPI → Samsung NPU
AndroidGoogle Tensor G2+NNAPI → Google TPU
AutomotiveSA8295P / SA8255PQNN → Hexagon DSP
ЛюбаяCPU fallbackXNNPACK

Ключевые C++-файлы

ФайлНазначение
jni_bridge.cppСвязывает ONNX-реализации моделей с C API speech-core через vtable
parakeet_stt.cppSTT с жадным TDT-декодером и нормализацией мел-признаков
kokoro_tts.cppTTS с 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