Arquitectura — Android y Linux

speech-android proporciona procesamiento de voz en el dispositivo para Android y Linux embebido a través de un núcleo C++ compartido con frontends específicos por plataforma. Toda la inferencia se ejecuta localmente usando ONNX Runtime con proveedores de ejecución acelerados por hardware.

Stack multiplataforma

Android y Linux comparten el submódulo C++ speech-core, que orquesta el pipeline completo de voz. Cada plataforma proporciona un frontend ligero que delega en speech-core a través de interfaces basadas en vtables:

┌──────────────────────────────────────────────┐
│   Android: SpeechPipeline (Kotlin/JNI)       │
│   Linux:   speech.h (API C)                  │
└──────────────────┬───────────────────────────┘
                   │
┌──────────────────┴───────────────────────────┐
│            speech-core (submódulo C++)        │
│   Detección de turnos · Interrupciones · Contexto   │
└──┬────────┬────────┬────────┬────────────────┘
   │        │        │        │  vtables
┌──┴──┐  ┌──┴──┐  ┌──┴──┐  ┌─┴────────┐
│ VAD │  │ STT │  │ TTS │  │ Enhancer │
└──┬──┘  └──┬──┘  └──┬──┘  └─┬────────┘
   └────────┴────────┴────────┘
       ONNX Runtime (CPU / NNAPI / QNN)

Rutas por plataforma

Android

El SDK de Kotlin (SpeechPipeline.kt) proporciona la API pública. Llama a través de JNI a jni_bridge.cpp, que registra callbacks de vtables con speech-core. ONNX Runtime se ejecuta con el execution provider NNAPI para aceleración por hardware en chipsets de Qualcomm, Samsung y Google.

Kotlin SDK → JNI bridge → speech-core → ONNX Runtime (NNAPI)

Linux

La API C (speech.h) expone el mismo pipeline para targets de Linux embebido (automoción, Yocto). En plataformas automotrices de Qualcomm (SA8295P, SA8255P), ONNX Runtime usa el execution provider QNN para aceleración en Hexagon DSP.

API C → speech-core → ONNX Runtime (QNN)

Pipeline

El pipeline de voz ejecuta tres etapas secuencialmente: VAD → STT → TTS. La detección de actividad vocal dispara la grabación, el STT transcribe el audio y el TTS genera la respuesta. El soporte de barge-in permite interrumpir la reproducción del TTS cuando el usuario empieza a hablar a mitad de respuesta.

speech-core gestiona la detección de turnos, el manejo de interrupciones y el contexto de la conversación. Las implementaciones de los modelos (VAD, STT, TTS, Enhancer) se conectan a través de interfaces C basadas en vtables, haciendo que la lógica del pipeline central sea agnóstica a la plataforma.

Modelos

Todos los modelos usan el formato ONNX con cuantización INT8 por defecto. Los modelos están alojados en HuggingFace bajo la organización aufklarer y se descargan automáticamente en el primer uso vía ModelManager.kt.

ModeloTareaCuantizaciónTamaño
Parakeet TDT v3STT (114 idiomas, vocabulario BPE de 8192)INT8~500 MB
Kokoro-82MTTSINT8~89 MB
Silero VAD v5Detección de actividad vocalfloat32~1.2 MB
DeepFilterNet3Cancelación de ruidoFP16~4.2 MB

La descarga total de los modelos es de aproximadamente 1.2 GB. Tras la descarga inicial, toda la inferencia se ejecuta totalmente offline.

Inferencia: OnnxEngine

El wrapper onnx_engine.h proporciona selección de execution providers (EP) con conocimiento de la plataforma. Prueba los EPs disponibles en tiempo de ejecución y hace fallback de forma elegante:

PlataformaChipsetAceleración
AndroidSnapdragon 8 Gen 1+NNAPI → NPU Hexagon
AndroidSamsung Exynos 2200+NNAPI → NPU Samsung
AndroidGoogle Tensor G2+NNAPI → TPU Google
AutomociónSA8295P / SA8255PQNN → Hexagon DSP
CualquieraFallback a CPUXNNPACK

Archivos C++ clave

ArchivoPropósito
jni_bridge.cppConecta las implementaciones de modelos ONNX a la API C de speech-core mediante vtables
parakeet_stt.cppSTT con decoder greedy TDT y normalización mel por característica
kokoro_tts.cppTTS con modelo E2E y máscara de atención
kokoro_phonemizer.cppFonemizador basado en diccionario para la entrada del TTS
silero_vad.cppDetección de actividad vocal
deepfilter.cppCancelación de ruido con procesamiento STFT/ERB
onnx_engine.hWrapper de ONNX Runtime con conocimiento de la plataforma (NNAPI en Android, QNN en Linux, fallback a CPU)
linux/src/speech.cppImplementación de la API C de Linux
linux/include/speech.hCabecera C pública de Linux

Estructura del código fuente

speech-android/
  speech-core/              Submódulo C++ (orquestación del pipeline)
  sdk/src/main/
    cpp/                    Implementaciones de modelos ONNX Runtime, puente JNI, DSP de audio
    kotlin/.../speech/      SDK público de Kotlin (SpeechPipeline, ModelManager)
  sdk/src/androidTest/      Pruebas e2e instrumentadas (23 tests, 5 suites)
  linux/
    include/speech.h        Cabecera C pública
    src/speech.cpp          Implementación de la API C de Linux
    tests/                  Suite de tests de Linux (11 tests)
  app/                      Aplicación de demostración

Código fuente: github.com/soniqo/speech-android