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.

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
AutomotivoSA8295P / SA8255PQNN → Hexagon DSP
QualquerFallback para CPUXNNPACK

Arquivos C++ principais

ArquivoProposito
jni_bridge.cppConecta implementacoes de modelos ONNX a API C do speech-core via vtables
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)
linux/src/speech.cppImplementacao da API C para Linux
linux/include/speech.hCabecalho 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 application

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