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èle | Tâche | Quantification | Taille |
|---|---|---|---|
| Parakeet TDT v3 | STT (114 langues, vocab BPE 8192) | INT8 | ~500 Mo |
| Kokoro-82M | TTS | INT8 | ~89 Mo |
| Silero VAD v5 | Détection d'activité vocale | float32 | ~1,2 Mo |
| DeepFilterNet3 | Suppression de bruit | FP16 | ~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 :
| Plateforme | Chipset | Accélération |
|---|---|---|
| Android | Snapdragon 8 Gen 1+ | NNAPI → NPU Hexagon |
| Android | Samsung Exynos 2200+ | NNAPI → NPU Samsung |
| Android | Google Tensor G2+ | NNAPI → TPU Google |
| Automobile | SA8295P / SA8255P | QNN → DSP Hexagon |
| Toutes | Repli CPU | XNNPACK |
Fichiers C++ clés
| Fichier | Rôle |
|---|---|
jni_bridge.cpp | Câble les implémentations de modèles ONNX à l'API C de speech-core via des vtables |
parakeet_stt.cpp | STT avec décodeur glouton TDT et normalisation mel par caractéristique |
kokoro_tts.cpp | TTS avec modèle E2E et masque d'attention |
kokoro_phonemizer.cpp | Phonémiseur basé dictionnaire pour l'entrée TTS |
silero_vad.cpp | Détection d'activité vocale |
deepfilter.cpp | Suppression de bruit avec traitement STFT/ERB |
onnx_engine.h | Wrapper ONNX Runtime sensible à la plateforme (NNAPI sur Android, QNN sur Linux, repli CPU) |
linux/src/speech.cpp | Implémentation de l'API C Linux |
linux/include/speech.h | En-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émonstrationCode source : github.com/soniqo/speech-android