Automatische vertaling · Engels origineel
Architectuur Android
speech-android is een dunne Kotlin SDK + JNI brug over de speech-core C++-motor. Alle ML-invloeden en pijplijnorkestratie live in speech-core; speech-android behandelt alleen de Android verpakking. Linux / automotive (Yocto, Qualcomm SA8295P/SA8255P met QNN) wordt gehost direct in speech-core/examples/linux.
Stack
De modelwikkels (Silero VAD, Parakeet STT, Kokoro TTS, DeepFilterNet3) rechtstreeks ten uitvoer te leggen speech-core interfaces (VADInterface, STTInterface, TTSInterface, EnhancerInterface), dus de JNI brug bouwt ze en geeft verwijzingen naar speech_core::VoicePipeline zonder C-vtable adapter ketelplaat.
┌──────────────────────────────────────────────┐
│ SpeechPipeline (Kotlin public API) │
│ ↓ JNI │
│ jni_bridge.cpp (~250 lines) │
└──────────────────┬───────────────────────────┘
│
┌──────────────────┴───────────────────────────┐
│ speech_core_models (git submodule) │
│ Silero / Parakeet / Kokoro / DeepFilter │
│ speech_core │
│ Turn detection · Interruptions · Context │
└──┬────────┬────────┬────────┬────────────────┘
│ │ │ │ direct interface impl
┌──┴──┐ ┌──┴──┐ ┌──┴──┐ ┌─┴────────┐
│ VAD │ │ STT │ │ TTS │ │ Enhancer │
└──┬──┘ └──┬──┘ └──┬──┘ └─┬────────┘
└────────┴────────┴────────┘
ONNX Runtime (CPU / NNAPI)Pijpleiding
De spraakpijplijn draait drie fasen achtereenvolgens: VAD → STT → TTS. Voice Activity Detection triggers opnemen, audio wordt door STT getranscribeerd en TTS genereert het antwoord. Barge-in ondersteuning maakt het onderbreken van TTS afspelen mogelijk wanneer de gebruiker begint te spreken mid-respons.
speech-core beheert draaidetectie, onderbrekingsbehandeling en conversatiecontext. De modelwrappers implementeren de interfaces van speech-core direct .Er is geen C-vtable adapterlaag waardoor het even gemakkelijk is om niet-ONNX backends aan te sluiten (bv. de CoreML / MLX implementaties in speech-swift) die overeenkomen met dezelfde interfaces.
Modellen
Alle modellen gebruiken ONNX formaat met INT8 quantisering als standaard. Modellen worden gehost op HuggingFace onder de soniqo org en automatisch downloaden bij eerste gebruik via ModelManager.kt.
| Model | Taak | Kwantisering | Grootte |
|---|---|---|---|
| Parakeet TDT v3 | STT (114 talen, 8192 BPE vocab) | INT8 | ~891 MB |
| Kokoro-82M | TTS | INT8 | ~330 MB |
| Pocket TTS 100M (facultatief) | Streaming text-to-speech (Engels, vaste Alba-stem) | dynamisch INT8 + FP32 | 120,3 MB |
| Silero VAD v5 | Detectie van spraakactiviteit | float32 | ~2 MB |
| DeepFilterNet3 | Geluidsannulering | FP16 | ~8 MB |
Pocket TTS is een optioneel speech-core ONNX backend. Het is niet in de huidige speech-android standaarddownload of JNI modelselectie; Kotlin SDK bedrading blijft het vervolgwerk.
Totale modeldownload is ongeveer 1,2 GB. Na de eerste download draait alle gevolgtrekking volledig offline.
Conclusie: OnnxEngine
De onnx_engine.h wrapper biedt een platform-aware executoriale provider (EP) selectie. Het sondeert beschikbare EP's op runtime en valt gracieus terug:
| Platform | Spaanplaat | Versnelling |
|---|---|---|
| Android | Snapdragon 8 Gen 1+ | NNAPI → Hexagon NPU |
| Android | Samsung Exynos 2200+ | NNAPI → Samsung NPU |
| Android | Google Tensor G2+ | NNAPI → Google TPU |
| Elke Android | CPU fallback | XNNPACK |
Voor automotive Qualcomm SA8295P / SA8255P met QNN (Hexagon DSP), zie speech-core/examples/linux.
Sleutel C++ Bestanden
| Bestand | Betreft |
|---|---|
jni_bridge.cpp | Tekent speech_core::* modelwikkels en verwijzingen naar de handen VoicePipeline |
parakeet_stt.cpp | STT met TDT hebzuchtige decoder en per feature mel normalisatie |
kokoro_tts.cpp | TTS met E2E model en aandachtsmasker |
kokoro_phonemizer.cpp | Woordenboekgebaseerde telefoonmizer voor TTS invoer |
silero_vad.cpp | Detectie van spraakactiviteit |
deepfilter.cpp | Geluidsannulering met STFT/ERB-verwerking |
onnx_engine.h | Platform-aware ONNX Runtime wrapper (NNAPI on Android, QNN on Linux, CPU fallback) |
De modelwrappers en onnx_engine.h verplaatsten naar speech-core in de model-extractierefactor; zie docs/models.md voor de volledige inventaris.
Bronstructuur
speech-android/
speech-core/ C++ engine + ONNX model wrappers (git submodule)
sdk/src/main/
cpp/jni_bridge.cpp Thin JNI bridge over speech_core::VoicePipeline
cpp/CMakeLists.txt Pulls speech-core via add_subdirectory(SPEECH_CORE_WITH_ONNX=ON)
kotlin/.../speech/ Kotlin public SDK (SpeechPipeline, ModelManager)
sdk/src/androidTest/ Instrumented e2e tests
app/ Demo application
Linux / automotive (C ABI, ALSA demo, CLI tools) lives at:
speech-core/examples/linux/Broncode: github.com/soniqo/speech-android