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.

ModellAufgabeQuantisierungGröße
Parakeet TDT v3STT (114 Sprachen, 8192 BPE-Vokabular)INT8~500 MB
Kokoro-82MTTSINT8~89 MB
Silero VAD v5Sprachaktivitätserkennungfloat32~1,2 MB
DeepFilterNet3RauschunterdrückungFP16~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:

PlattformChipsatzBeschleunigung
AndroidSnapdragon 8 Gen 1+NNAPI → Hexagon NPU
AndroidSamsung Exynos 2200+NNAPI → Samsung NPU
AndroidGoogle Tensor G2+NNAPI → Google TPU
AutomotiveSA8295P / SA8255PQNN → Hexagon DSP
BeliebigCPU-FallbackXNNPACK

Wichtige C++-Dateien

DateiZweck
jni_bridge.cppVerbindet ONNX-Modellimplementierungen mit der speech-core-C-API über vtables
parakeet_stt.cppSTT mit TDT-Greedy-Decoder und Per-Feature-Mel-Normalisierung
kokoro_tts.cppTTS mit E2E-Modell und Attention-Maske
kokoro_phonemizer.cppWörterbuchbasierter Phonemizer für TTS-Eingabe
silero_vad.cppSprachaktivitätserkennung
deepfilter.cppRauschunterdrückung mit STFT/ERB-Verarbeitung
onnx_engine.hPlattformbewusster ONNX-Runtime-Wrapper (NNAPI auf Android, QNN auf Linux, CPU-Fallback)
linux/src/speech.cppImplementierung 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-Anwendung

Quellcode: github.com/soniqo/speech-android