Архитектура — Android

speech-android — это тонкий Kotlin SDK + JNI-мост поверх C++-движка speech-core. Весь ML-инференс и оркестрация пайплайна находятся в speech-core; speech-android занимается только Android-упаковкой. Linux / автомобильные платформы (Yocto, Qualcomm SA8295P/SA8255P с QNN) размещены прямо в speech-core/examples/linux.

Стек

Обёртки моделей (Silero VAD, Parakeet STT, Kokoro TTS, DeepFilterNet3) напрямую реализуют интерфейсы speech-core (VADInterface, STTInterface, TTSInterface, EnhancerInterface), поэтому JNI-мост конструирует их и передаёт ссылки в speech_core::VoicePipeline без бойлерплейта C-vtable адаптеров.

┌───────────────────────────────────────────────┐
│     SpeechPipeline (Kotlin public API)       │
│             ↓ JNI                            │
│     jni_bridge.cpp (~250 lines)              │
└──────────────────┬───────────────────────────┘
                   │
┌──────────────────┴───────────────────────────┐
│       speech_core_models (git submodule)      │
│   Silero / Parakeet / Kokoro / DeepFilter     │
│       speech_core                             │
│   Turn detection · Interruptions · Context   │
└──┬────────┬────────┬────────┬────────────────┘
   │        │        │        │  direct interface impl
┌──┴──┐  ┌──┴──┐  ┌──┴──┐  ┌─┴────────┐
│ VAD │  │ STT │  │ TTS │  │ Enhancer │
└──┬──┘  └──┬──┘  └──┬──┘  └─┬────────┘
   └────────┴────────┴────────┘
       ONNX Runtime (CPU / NNAPI)

Пайплайн

Речевой пайплайн последовательно запускает три стадии: VAD → STT → TTS. Детекция голосовой активности запускает запись, STT транскрибирует аудио, а TTS генерирует ответ. Поддержка barge-in позволяет прерывать воспроизведение TTS, когда пользователь начинает говорить посреди ответа.

speech-core управляет детекцией переключения реплик, обработкой прерываний и контекстом диалога. Обёртки моделей реализуют интерфейсы speech-core напрямую — без слоя C-vtable адаптеров — благодаря чему столь же легко подключать не-ONNX бэкенды (например, реализации CoreML / MLX в speech-swift), соответствующие тем же интерфейсам.

Модели

Все модели используют формат 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
Любой AndroidCPU fallbackXNNPACK

Для автомобильных Qualcomm SA8295P / SA8255P с QNN (Hexagon DSP) см. speech-core/examples/linux.

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

ФайлНазначение
jni_bridge.cppКонструирует обёртки speech_core::* и передаёт ссылки в VoicePipeline
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)

Обёртки моделей и onnx_engine.h переехали в speech-core в рамках рефакторинга по выделению моделей; полный перечень см. в docs/models.md.

Структура исходников

speech-android/
  speech-core/              C++-движок + ONNX-обёртки моделей (git submodule)
  sdk/src/main/
    cpp/jni_bridge.cpp      Тонкий JNI-мост поверх speech_core::VoicePipeline
    cpp/CMakeLists.txt      Подтягивает speech-core через add_subdirectory(SPEECH_CORE_WITH_ONNX=ON)
    kotlin/.../speech/      Kotlin публичный SDK (SpeechPipeline, ModelManager)
  sdk/src/androidTest/      Инструментальные e2e-тесты
  app/                      Демо-приложение

Linux / автомобильные платформы (C ABI, ALSA-демо, CLI-инструменты) находятся здесь:
  speech-core/examples/linux/

Исходный код: github.com/soniqo/speech-android