Architektur — Android & Linux
speech-android bietet Sprachverarbeitung auf dem Gerät für Android und eingebettetes Linux über einen gemeinsamen C++-Kern mit plattformspezifischen Frontends. Die gesamte Inferenz läuft lokal über ONNX Runtime mit hardwarebeschleunigten Execution Providern.
Plattformübergreifender Stack
Android und Linux teilen sich das C++-Submodul speech-core, das die vollständige Sprach-Pipeline orchestriert. Jede Plattform stellt ein dünnes Frontend bereit, das über vtable-basierte Schnittstellen an speech-core delegiert:
┌───────────────────────────────────────────────┐
│ Android: SpeechPipeline (Kotlin/JNI) │
│ Linux: speech.h (C-API) │
└──────────────────┬───────────────────────────┘
│
┌──────────────────┴───────────────────────────┐
│ speech-core (C++-Submodul) │
│ Turn-Erkennung · Unterbrechungen · Kontext │
└──┬────────┬────────┬────────┬────────────────┘
│ │ │ │ vtables
┌──┴──┐ ┌──┴──┐ ┌──┴──┐ ┌─┴────────┐
│ VAD │ │ STT │ │ TTS │ │ Enhancer │
└──┬──┘ └──┬──┘ └──┬──┘ └─┬────────┘
└────────┴────────┴────────┘
ONNX Runtime (CPU / NNAPI / QNN)Plattformpfade
Android
Das Kotlin-SDK (SpeechPipeline.kt) stellt die öffentliche API bereit. Es ruft per JNI in jni_bridge.cpp, das vtable-Callbacks bei speech-core registriert. ONNX Runtime läuft mit dem NNAPI-Execution-Provider für Hardwarebeschleunigung auf Chipsätzen von Qualcomm, Samsung und Google.
Kotlin-SDK → JNI-Bridge → speech-core → ONNX Runtime (NNAPI)Linux
Die C-API (speech.h) stellt dieselbe Pipeline für eingebettete Linux-Ziele bereit (Automotive, Yocto). Auf Qualcomm-Automotive-Plattformen (SA8295P, SA8255P) verwendet ONNX Runtime den QNN-Execution-Provider für Hexagon-DSP-Beschleunigung.
C-API → speech-core → ONNX Runtime (QNN)Pipeline
Die Sprach-Pipeline durchläuft drei Stufen sequenziell: VAD → STT → TTS. Die Sprachaktivitätserkennung löst die Aufnahme aus, das Audio wird vom STT transkribiert und das TTS erzeugt die Antwort. Barge-in-Unterstützung ermöglicht es, die TTS-Wiedergabe zu unterbrechen, wenn der Benutzer mitten in der Antwort zu sprechen beginnt.
speech-core verwaltet Turn-Erkennung, Unterbrechungsbehandlung und Konversationskontext. Die Modellimplementierungen (VAD, STT, TTS, Enhancer) werden über C-vtable-Schnittstellen eingeklinkt, wodurch die Kern-Pipeline-Logik plattformunabhängig ist.
Modelle
Alle Modelle verwenden das ONNX-Format mit INT8-Quantisierung als Standard. Die Modelle werden auf HuggingFace unter der Organisation aufklarer gehostet und automatisch beim ersten Gebrauch über ModelManager.kt heruntergeladen.
| Modell | Aufgabe | Quantisierung | Größe |
|---|---|---|---|
| Parakeet TDT v3 | STT (114 Sprachen, 8192 BPE-Vokabular) | INT8 | ~500 MB |
| Kokoro-82M | TTS | INT8 | ~89 MB |
| Silero VAD v5 | Sprachaktivitätserkennung | float32 | ~1,2 MB |
| DeepFilterNet3 | Rauschunterdrückung | FP16 | ~4,2 MB |
Der gesamte Modell-Download beträgt etwa 1,2 GB. Nach dem ersten Download läuft die gesamte Inferenz vollständig offline.
Inferenz: OnnxEngine
Der Wrapper onnx_engine.h bietet plattformbewusste Auswahl des Execution Providers (EP). Er prüft verfügbare EPs zur Laufzeit und greift bei Bedarf elegant auf Alternativen zurück:
| Plattform | Chipsatz | Beschleunigung |
|---|---|---|
| Android | Snapdragon 8 Gen 1+ | NNAPI → Hexagon NPU |
| Android | Samsung Exynos 2200+ | NNAPI → Samsung NPU |
| Android | Google Tensor G2+ | NNAPI → Google TPU |
| Automotive | SA8295P / SA8255P | QNN → Hexagon DSP |
| Beliebig | CPU-Fallback | XNNPACK |
Wichtige C++-Dateien
| Datei | Zweck |
|---|---|
jni_bridge.cpp | Verbindet ONNX-Modellimplementierungen mit der speech-core-C-API über vtables |
parakeet_stt.cpp | STT mit TDT-Greedy-Decoder und Per-Feature-Mel-Normalisierung |
kokoro_tts.cpp | TTS mit E2E-Modell und Attention-Maske |
kokoro_phonemizer.cpp | Wörterbuchbasierter Phonemizer für TTS-Eingabe |
silero_vad.cpp | Sprachaktivitätserkennung |
deepfilter.cpp | Rauschunterdrückung mit STFT/ERB-Verarbeitung |
onnx_engine.h | Plattformbewusster ONNX-Runtime-Wrapper (NNAPI auf Android, QNN auf Linux, CPU-Fallback) |
linux/src/speech.cpp | Implementierung der Linux-C-API |
linux/include/speech.h | Öffentlicher Linux-C-Header |
Quellstruktur
speech-android/
speech-core/ C++-Submodul (Pipeline-Orchestrierung)
sdk/src/main/
cpp/ ONNX-Runtime-Modellimplementierungen, JNI-Bridge, Audio-DSP
kotlin/.../speech/ Öffentliches Kotlin-SDK (SpeechPipeline, ModelManager)
sdk/src/androidTest/ Instrumentierte E2E-Tests (23 Tests, 5 Suites)
linux/
include/speech.h Öffentlicher C-Header
src/speech.cpp Implementierung der Linux-C-API
tests/ Linux-Test-Suite (11 Tests)
app/ Demo-AnwendungQuellcode: github.com/soniqo/speech-android