Architecture — Android et Linux

speech-android fournit le traitement vocal embarqué pour Android et Linux embarqué grâce à un cœur C++ partagé avec des frontends spécifiques à chaque plateforme. Toute l'inférence s'exécute localement en utilisant ONNX Runtime avec des fournisseurs d'exécution accélérés matériellement.

Pile multiplateforme

Android et Linux partagent le sous-module C++ speech-core, qui orchestre le pipeline vocal complet. Chaque plateforme fournit un frontend mince qui délègue à speech-core via des interfaces basées sur des vtables :

┌───────────────────────────────────────────────┐
│   Android : SpeechPipeline (Kotlin/JNI)      │
│   Linux :   speech.h (API C)                 │
└──────────────────┬───────────────────────────┘
                   │
┌──────────────────┴───────────────────────────┐
│            speech-core (sous-module C++)      │
│   Détection de tour · Interruptions · Contexte│
└──┬────────┬────────┬────────┬────────────────┘
   │        │        │        │  vtables
┌──┴──┐  ┌──┴──┐  ┌──┴──┐  ┌─┴────────┐
│ VAD │  │ STT │  │ TTS │  │ Enhancer │
└──┬──┘  └──┬──┘  └──┬──┘  └─┬────────┘
   └────────┴────────┴────────┘
       ONNX Runtime (CPU / NNAPI / QNN)

Chemins par plateforme

Android

Le SDK Kotlin (SpeechPipeline.kt) fournit l'API publique. Il appelle via JNI dans jni_bridge.cpp, qui enregistre des callbacks vtable auprès de speech-core. ONNX Runtime s'exécute avec le fournisseur d'exécution NNAPI pour l'accélération matérielle sur les chipsets Qualcomm, Samsung et Google.

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

Linux

L'API C (speech.h) expose le même pipeline pour les cibles Linux embarquées (automobile, Yocto). Sur les plateformes automobiles Qualcomm (SA8295P, SA8255P), ONNX Runtime utilise le fournisseur d'exécution QNN pour l'accélération DSP Hexagon.

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

Pipeline

Le pipeline vocal exécute trois étapes séquentiellement : VAD → STT → TTS. La détection d'activité vocale déclenche l'enregistrement, l'audio est transcrit par STT, et TTS génère la réponse. Le support du barge-in permet d'interrompre la lecture TTS lorsque l'utilisateur commence à parler au milieu d'une réponse.

speech-core gère la détection de tour, la gestion des interruptions et le contexte de conversation. Les implémentations de modèles (VAD, STT, TTS, Enhancer) sont branchées via des interfaces vtable C, rendant la logique du pipeline principal agnostique à la plateforme.

Modèles

Tous les modèles utilisent le format ONNX avec la quantification INT8 par défaut. Les modèles sont hébergés sur HuggingFace sous l'organisation aufklarer et se téléchargent automatiquement à la première utilisation via ModelManager.kt.

ModèleTâcheQuantificationTaille
Parakeet TDT v3STT (114 langues, vocab BPE 8192)INT8~500 Mo
Kokoro-82MTTSINT8~89 Mo
Silero VAD v5Détection d'activité vocalefloat32~1,2 Mo
DeepFilterNet3Suppression de bruitFP16~4,2 Mo

Le téléchargement total des modèles est d'environ 1,2 Go. Après le téléchargement initial, toute l'inférence s'exécute entièrement hors ligne.

Inférence : OnnxEngine

Le wrapper onnx_engine.h fournit une sélection de fournisseur d'exécution (EP) sensible à la plateforme. Il sonde les EP disponibles à l'exécution et retombe gracieusement :

PlateformeChipsetAccélération
AndroidSnapdragon 8 Gen 1+NNAPI → NPU Hexagon
AndroidSamsung Exynos 2200+NNAPI → NPU Samsung
AndroidGoogle Tensor G2+NNAPI → TPU Google
AutomobileSA8295P / SA8255PQNN → DSP Hexagon
ToutesRepli CPUXNNPACK

Fichiers C++ clés

FichierRôle
jni_bridge.cppCâble les implémentations de modèles ONNX à l'API C de speech-core via des vtables
parakeet_stt.cppSTT avec décodeur glouton TDT et normalisation mel par caractéristique
kokoro_tts.cppTTS avec modèle E2E et masque d'attention
kokoro_phonemizer.cppPhonémiseur basé dictionnaire pour l'entrée TTS
silero_vad.cppDétection d'activité vocale
deepfilter.cppSuppression de bruit avec traitement STFT/ERB
onnx_engine.hWrapper ONNX Runtime sensible à la plateforme (NNAPI sur Android, QNN sur Linux, repli CPU)
linux/src/speech.cppImplémentation de l'API C Linux
linux/include/speech.hEn-tête C public Linux

Structure des sources

speech-android/
  speech-core/              Sous-module C++ (orchestration du pipeline)
  sdk/src/main/
    cpp/                    Implémentations de modèles ONNX Runtime, pont JNI, DSP audio
    kotlin/.../speech/      SDK public Kotlin (SpeechPipeline, ModelManager)
  sdk/src/androidTest/      Tests e2e instrumentés (23 tests, 5 suites)
  linux/
    include/speech.h        En-tête C public
    src/speech.cpp          Implémentation de l'API C Linux
    tests/                  Suite de tests Linux (11 tests)
  app/                      Application de démonstration

Code source : github.com/soniqo/speech-android