Maskinöversättning · Engelskt original
Arkitektur - Android
speech-android är en tunn Kotlin SDK + JNI-bro över speech-core C++ motor. All ML inferens och pipeline orkestrering bor i speech-core; speech-android hanterar endast Android förpackning. Linux / bil (Yocto, Qualcomm SA8295P/SA8255P med QNN) är värd direkt i speech-core/exempel/linux.
Stack
Modellens wrappers (modellen wrapper)Silero VAD, Parakeet STT, Kokoro TTS, DeepFilterNet3) direkt genomföra speech-core gränssnitt (VADInterface, STTInterface, TTSInterface, EnhancerInterfaceJNI-bron konstruerar dem och handreferenser till speech_core::VoicePipeline utan C-vtable adapter pannor.
┌──────────────────────────────────────────────┐
│ 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)Pipeline
Talet pipeline körs tre steg sekventiellt: VAD → STT → TTS. Voice Activity Detection triggers recording, ljud transkriberas av STT och TTS genererar svaret. Barge-in stöd tillåter avbrott TTS uppspelning när användaren börjar tala mitt svar.
speech-core hanterar vänddetektering, avbrottshantering och konversationskontext. Modellens omslag implementerar speech-core: s gränssnitt direkt - inget C-vtable adapterskikt - vilket gör det lika enkelt att ansluta i icke-ONNX-backends (t.ex. CoreML / MLX-implementeringar i speech-swift) som uppfyller samma gränssnitt.
Modeller
Alla modeller använder ONNX format med INT8 kvantisering som standard. Modeller är värd på HuggingFace under soniqo org och auto-download på första användning via ModelManager.kt.
| Modell | Uppgifter | Kvantisering | Storlek |
|---|---|---|---|
| Parakeet TDT v3 | STT (114 språk, 8192 BPE vocab) | INT8 | ~891 MB |
| Kokoro-82M | TTS | INT8 | ~330 MB |
| Pocket TTS 100M (tillval) | Streaming text-till-tal (engelska, fast Alba röst) | Dynamisk INT8 + FP32 | 120,3 MB |
| Silero VAD v5 | Detektering av röstaktivitet | float32 | 2 MB |
| DeepFilterNet3 | Buller avbokning | FP16 | ~8 MB |
Pocket TTS är en valfri speech-core ONNX backend. Det är inte i nuvarande speech-android standard nedladdning eller JNI-modellval; Kotlin SDK ledning förblir uppföljningsarbete.
Total modell nedladdning är ca 1.2 GB. Efter den första nedladdningen körs all inferens helt offline.
Inferens: OnnxEngine
onnx_engine.h wrapper ger plattformsmedvetna execution provider (EP) urval. Det sondar tillgängliga EPs vid runtime och faller tillbaka graciöst:
| Plattform | Chipset | Acceleration |
|---|---|---|
| Android | Snapdragon 8 Gen 1+ | NNAPI → Hexagon NPU |
| Android | Samsung Exynos 2200+ | NNAPI → Samsung NPU |
| Android | Google Tensor G2+ | NNAPI → Google TPU |
| Alla Android | CPU nedgång | XNNPACK |
För fordons Qualcomm SA8295P / SA8255P med QNN (Hexagon DSP), se speech-core/exempel/linux.
Nyckel C++ Filer
| Fil | syftet |
|---|---|
jni_bridge.cpp | Konstruerar speech_core::* modellomslag och handreferenser till VoicePipeline |
parakeet_stt.cpp | STT med TDT greedy decoder och per-feature mel normalization |
kokoro_tts.cpp | TTS med E2E modell- och uppmärksamhetsmask |
kokoro_phonemizer.cpp | Dictionary-based phonemizer för TTS input |
silero_vad.cpp | Röstaktivitetsdetektering |
deepfilter.cpp | Bulleravbokning med STFT/ERB-behandling |
onnx_engine.h | Plattformsmedveten ONNX Runtime wrapper (NNAPI på Android, QNN på Linux, CPU nedgång) |
Modellen wrappers och onnx_engine.h flyttade in i speech-core i modell-extraction refactor; se docs/models.md för hela inventeringen.
Källa Struktur
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/