Strojový překlad · Anglický originál
Architektura - Android
speech-android je tenký Kotlin SDK + JNI most přes speech-core C++ motor. Veškerá ML inference a plynovod orchestr živě v speech-core; speech-android zpracovává pouze obal Android. Linux / automobilový (Yocto, Qualcomm SA8295P nebo SA8255P s QNN) je hostován přímo v speech-core / příklady / linux.
Stack
Obaly modelu (Silero VAD, Parakeet STT, Kokoro TTS, DeepFilterNet3) přímo provádět speech-core Rozhraní (VADInterface, STTInterface, TTSInterface, EnhancerInterface), tak JNI most staví je a ruce odkazuje na speech_core::VoicePipeline bez C- vtable adaptéru.
┌──────────────────────────────────────────────┐
│ 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)Potrubí
Plynovod řeči běží postupně tři fáze: VAD → STT → TTS. Detekce hlasové aktivity spustí nahrávání, zvuk je přepsán STT, a TTS generuje odpověď. Barge- v podpoře umožňuje přerušení přehrávání TTS, když uživatel začne mluvit mid- odpověď.
speech-core spravuje detekci otočení, manipulaci s přerušením a kontext konverzace. Obaly modelu implementují rozhraní speech-core přímo - žádná adaptérová vrstva C- vtable - což umožňuje stejně snadné zapojení ne- ONNX backends (např. implementace CoreML / MLX v speech-swift) které odpovídají stejným rozhraním.
Modely
Všechny modely používají formát ONNX s kvantifikací INT8 jako výchozí. Modely jsou hostovány na HuggingFace pod soniqo org a auto-download při prvním použití přes ModelManager.kt.
| Vzor | Úkol | Kvantizace | Velikost |
|---|---|---|---|
| Parakeet TDT v3 | STT (114 jazyků, 8192 BPE vocab) | INT8 | ~ 891 MB |
| Kokoro-82M | TTS | INT8 | ~ 330 MB |
| Pocket TTS 100M (nepovinné) | Streaming text- to- speak (anglický, fixní hlas Alba) | dynamické INT8 + FP32 | 120.3 MB |
| Silero VAD v5 | Detekce hlasové aktivity | float32 | ~ 2 MB |
| DeepFilterNet3 | Zrušení hluku | FP16 | ~ 8 MB |
Pocket TTS je volitelný speech-core ONNX backend. Není v aktuálním výchozím stahování speech-android nebo v JNI výběru modelu; zapojení Kotlin SDK zůstává v provozu.
Celkové stažení modelu je přibližně 1.2 GBPo počátečním stahování je všechny inference plně offline.
Smysl: OnnxEngine
V onnx_engine.h Obal poskytuje platform- aware výběr poskytovatele provedení (EP). To sondy dostupné EP v runtime a padá zpět elegantně:
| Platforma | Chipset | Zrychlení |
|---|---|---|
| Android | Snapdragon 8 Gen 1 + | NNAPI → Hexagon NPU |
| Android | Samsung Exynos 2200 + | NNAPI → Samsung NPU |
| Android | Google Tensor G2 + | NNAPI → Google TPU |
| Jakékoli Android | Záloha CPU | XNPACK |
Pro automobilový Qualcomm SA8295P / SA8255P s QNN (Hexagon DSP), viz speech-core / příklady / linux.
Soubory C++ klávesy
| Soubor | Účel |
|---|---|
jni_bridge.cpp | Konstrukce speech_core::* modely obalů a odkazů na ruce VoicePipeline |
parakeet_stt.cpp | STT s TDT chamtivým dekodérem a per- feature mel normalizací |
kokoro_tts.cpp | TTS s modelem E2E a maskou pozornosti |
kokoro_phonemizer.cpp | Dictionary- based phonemizer for TTS input |
silero_vad.cpp | Detekce hlasové aktivity |
deepfilter.cpp | Zrušení hluku se zpracováním STFT / ERB |
onnx_engine.h | Platform- aware ONNX Runtime obal (NNAPI zapnutý Android, QNN on Linux, CPU Záloha) |
Obaly modelu a onnx_engine.h přesunuto do speech-core v modelovém extrakčním refaktoru; viz docs / models.md pro kompletní inventuru.
Struktura zdroje
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/