Arquitetura — Android e Linux
speech-android fornece processamento de fala no dispositivo para Android e Linux embarcado por meio de um core C++ compartilhado com frontends especificos de plataforma. Toda a inferencia roda localmente usando ONNX Runtime com execution providers acelerados por hardware.
Stack multiplataforma
Android e Linux compartilham o submodulo C++ speech-core, que orquestra o pipeline de fala completo. Cada plataforma fornece um frontend leve que delega para o speech-core atraves de interfaces baseadas em 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)Caminhos por plataforma
Android
O SDK Kotlin (SpeechPipeline.kt) fornece a API publica. Ele chama via JNI para jni_bridge.cpp, que registra callbacks vtable com o speech-core. O ONNX Runtime roda com o execution provider NNAPI para aceleracao por hardware em chipsets Qualcomm, Samsung e Google.
Kotlin SDK → JNI bridge → speech-core → ONNX Runtime (NNAPI)Linux
A API C (speech.h) expoe o mesmo pipeline para alvos Linux embarcados (automotivo, Yocto). Em plataformas automotivas Qualcomm (SA8295P, SA8255P), o ONNX Runtime usa o execution provider QNN para aceleracao no Hexagon DSP.
C API → speech-core → ONNX Runtime (QNN)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. As implementacoes de modelo (VAD, STT, TTS, Enhancer) sao conectadas por interfaces vtable C, tornando a logica do pipeline core agnostica de plataforma.
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 |
| Automotivo | SA8295P / SA8255P | QNN → Hexagon DSP |
| Qualquer | Fallback para CPU | XNNPACK |
Arquivos C++ principais
| Arquivo | Proposito |
|---|---|
jni_bridge.cpp | Conecta implementacoes de modelos ONNX a API C do speech-core via vtables |
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) |
linux/src/speech.cpp | Implementacao da API C para Linux |
linux/include/speech.h | Cabecalho C publico para Linux |
Estrutura de codigo-fonte
speech-android/
speech-core/ C++ submodule (pipeline orchestration)
sdk/src/main/
cpp/ ONNX Runtime model implementations, JNI bridge, audio DSP
kotlin/.../speech/ Kotlin public SDK (SpeechPipeline, ModelManager)
sdk/src/androidTest/ Instrumented e2e tests (23 tests, 5 suites)
linux/
include/speech.h Public C header
src/speech.cpp Linux C API implementation
tests/ Linux test suite (11 tests)
app/ Demo applicationCodigo-fonte: github.com/soniqo/speech-android