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.
| Modelo | Tarefa | Quantizacao | Tamanho |
|---|---|---|---|
| Parakeet TDT v3 | STT (114 idiomas, vocabulario BPE de 8192) | INT8 | ~500 MB |
| Kokoro-82M | TTS | INT8 | ~89 MB |
| Silero VAD v5 | Deteccao de atividade de voz | float32 | ~1.2 MB |
| DeepFilterNet3 | Cancelamento de ruido | FP16 | ~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:
| Plataforma | Chipset | Aceleracao |
|---|---|---|
| Android | Snapdragon 8 Gen 1+ | NNAPI → Hexagon NPU |
| Android | Samsung Exynos 2200+ | NNAPI → Samsung NPU |
| Android | Google Tensor G2+ | NNAPI → Google TPU |
| Qualquer Android | Fallback para CPU | XNNPACK |
Para Qualcomm automotivo SA8295P / SA8255P com QNN (Hexagon DSP), veja speech-core/examples/linux.
Arquivos C++ principais
| Arquivo | Proposito |
|---|---|
jni_bridge.cpp | Constroi wrappers de modelo speech_core::* e entrega referencias para VoicePipeline |
parakeet_stt.cpp | STT com decodificador greedy TDT e normalizacao mel por feature |
kokoro_tts.cpp | TTS com modelo E2E e mascara de atencao |
kokoro_phonemizer.cpp | Fonemizador baseado em dicionario para entrada TTS |
silero_vad.cpp | Deteccao de atividade de voz |
deepfilter.cpp | Cancelamento de ruido com processamento STFT/ERB |
onnx_engine.h | Wrapper 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