Arquitetura — Android

speech-android e um SDK Kotlin fino + ponte JNI sobre o motor C++ speech-core. Toda a inferencia de ML e a orquestracao do pipeline residem no speech-core; o speech-android cuida apenas do empacotamento Android. Linux / automotivo (Yocto, Qualcomm SA8295P/SA8255P com QNN) e hospedado diretamente em speech-core/examples/linux.

Stack

Os wrappers de modelo (Silero VAD, Parakeet STT, Kokoro TTS, DeepFilterNet3) implementam diretamente as interfaces do speech-core (VADInterface, STTInterface, TTSInterface, EnhancerInterface), de modo que a ponte JNI os constroi e entrega referencias para speech_core::VoicePipeline sem nenhum boilerplate de adaptador 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)

Pipeline

O pipeline de fala roda tres estagios sequencialmente: VAD → STT → TTS. A deteccao de atividade de voz dispara a gravacao, o audio e transcrito pelo STT e o TTS gera a resposta. O suporte a barge-in permite interromper a reproducao do TTS quando o usuario comeca a falar no meio da resposta.

speech-core gerencia a deteccao de turnos, tratamento de interrupcoes e contexto da conversa. Os wrappers de modelo implementam as interfaces do speech-core diretamente — sem camada de adaptador C-vtable — tornando igualmente facil conectar backends nao-ONNX (por exemplo, as implementacoes CoreML / MLX em speech-swift) que estejam em conformidade com as mesmas interfaces.

Modelos

Todos os modelos usam formato ONNX com quantizacao INT8 por padrao. Os modelos sao hospedados no HuggingFace sob a organizacao aufklarer e sao baixados automaticamente no primeiro uso via ModelManager.kt.

ModeloTarefaQuantizacaoTamanho
Parakeet TDT v3STT (114 idiomas, vocabulario BPE de 8192)INT8~500 MB
Kokoro-82MTTSINT8~89 MB
Silero VAD v5Deteccao de atividade de vozfloat32~1.2 MB
DeepFilterNet3Cancelamento de ruidoFP16~4.2 MB

O download total de modelos e de aproximadamente 1.2 GB. Apos o download inicial, toda a inferencia roda totalmente offline.

Inferencia: OnnxEngine

O wrapper onnx_engine.h fornece selecao de execution provider (EP) consciente da plataforma. Ele verifica os EPs disponiveis em tempo de execucao e faz fallback graciosamente:

PlataformaChipsetAceleracao
AndroidSnapdragon 8 Gen 1+NNAPI → Hexagon NPU
AndroidSamsung Exynos 2200+NNAPI → Samsung NPU
AndroidGoogle Tensor G2+NNAPI → Google TPU
Qualquer AndroidFallback para CPUXNNPACK

Para Qualcomm automotivo SA8295P / SA8255P com QNN (Hexagon DSP), veja speech-core/examples/linux.

Arquivos C++ principais

ArquivoProposito
jni_bridge.cppConstroi wrappers de modelo speech_core::* e entrega referencias para VoicePipeline
parakeet_stt.cppSTT com decodificador greedy TDT e normalizacao mel por feature
kokoro_tts.cppTTS com modelo E2E e mascara de atencao
kokoro_phonemizer.cppFonemizador baseado em dicionario para entrada TTS
silero_vad.cppDeteccao de atividade de voz
deepfilter.cppCancelamento de ruido com processamento STFT/ERB
onnx_engine.hWrapper ONNX Runtime consciente da plataforma (NNAPI em Android, QNN em Linux, fallback para CPU)

Os wrappers de modelo e onnx_engine.h migraram para o speech-core no refactor de extracao de modelos; veja docs/models.md para o inventario completo.

Estrutura de codigo-fonte

speech-android/
  speech-core/              C++ engine + ONNX model wrappers (git submodule)
  sdk/src/main/
    cpp/jni_bridge.cpp      Thin JNI bridge over speech_core::VoicePipeline
    cpp/CMakeLists.txt      Pulls speech-core via add_subdirectory(SPEECH_CORE_WITH_ONNX=ON)
    kotlin/.../speech/      Kotlin public SDK (SpeechPipeline, ModelManager)
  sdk/src/androidTest/      Instrumented e2e tests
  app/                      Demo application

Linux / automotive (C ABI, ALSA demo, CLI tools) lives at:
  speech-core/examples/linux/

Codigo-fonte: github.com/soniqo/speech-android