Maskinoversettelse · Engelsk original
Arkitektur — Android
speech-android er en tynn Kotlin SDK + JNI bro over speech-core C++ motor. Alle ML inferens og rørledningsorkester lever i speech-core; speech-android håndterer bare Android emballasjen. Linux / bil (Yocto, Qualcomm SA8295P/SA8255P med QNN) er vert direkte i speech-core/Service/linux.
Stack
Modellen wrappers (Silero VAD, Parakeet STT, Kokoro TTS, DeepFilterNet3) direkte implementere speech-core grensesnitt (VADInterface, STTInterface, TTSInterface, EnhancerInterface), så JNI broen konstruerer dem og hender referanser til speech_core::VoicePipeline uten C-vtable adapter kjeleplate.
┌──────────────────────────────────────────────┐
│ 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
Talerørledningen kjører tre trinn sekvensielt: VAD → STT → TTS. Stemmeaktivitetsdetektering utløser opptak, lyden transkriberes av STT, og TTS genererer responsen. Barge-in-støtte tillater å avbryte TTS
speech-core administrerer dreiedeteksjon, avbruddshåndtering og samtalekontekst. Modellinnpakningene implementerer speech-core sine grensesnitt direkte - ingen C-vtable adapterlag - noe som gjør det like enkelt å koble i ikke-ONNX-motorer (f.eks. CoreML / MLX implementasjoner i speech-swift) som er i samsvar med de samme grensesnittene.
Modeller
Alle modeller bruker ONNX format med INT8 kvantisering som standard. Modeller er hostet på HuggingFace under soniqo org og auto-download ved første bruk via ModelManager.kt.
| Modell | Oppgave | Kvantisering | Størrelse |
|---|---|---|---|
| Parakeet TDT v3 | STT (114 språk, 8192 BPE vokab) | INT8 | ~891 MB |
| Kokoro-82M | TTS | INT8 | ~330 MB |
| Pocket TTS 100M (valgfritt) | Streaming tekst-til-speech (engelsk, fast Alba stemme) | dynamisk INT8 + FP32 | 120.3 MB |
| Silero VAD v5 | Påvisning av taleaktivitet | float32 | ~ 2 MB |
| DeepFilterNet3 | Støyavbestilling | FP16 | ~ 8 MB |
Pocket TTS er en valgfri speech-core ONNX motor. Det er ikke i gjeldende speech-android standard nedlasting eller JNI modellvalg; Kotlin SDK ledninger forblir oppfølgingsarbeid.
Total modell nedlasting er omtrent 1.2 GB. Etter den opprinnelige nedlastingen, kjører all inferens helt frakoblet.
Inferens: OnnxEngine
onnx_engine.h wrapper gir plattform-aware-utførelsesleverandør (EP) -valg. Det prober tilgjengelige EPer ved kjøring og faller tilbake graciøst:
| Plattform | Chipset | Akselerasjon |
|---|---|---|
| Android | Snapdragon 8 Gen 1+ | NNAPI → Hexagon NPU |
| Android | Samsung Exynos 2200+ | NNAPI → Samsung NPU |
| Android | Google Tensor G2+ | NNAPI → Google TPU |
| Alle Android | CPU tilbakefall | XNNPACK |
For bil Qualcomm SA8295P / SA8255P med QNN (Hexagon DSP), se speech-core/sepex/linux.
Nøkkel C++ Filer
| Fil | Formål |
|---|---|
jni_bridge.cpp | Konstruerer speech_core::* modellompakninger og hender referanser til VoicePipeline |
parakeet_stt.cpp | STT med TDT grådig dekoder og per-feature mel normalisering |
kokoro_tts.cpp | TTS med E2E modell og oppmerksomhetsmaske |
kokoro_phonemizer.cpp | Ordbokbasert fonemizer for TTS input |
silero_vad.cpp | Deteksjon av stemmeaktivitet |
deepfilter.cpp | Støyavbestilling med STFT/ERB-behandling |
onnx_engine.h | Plattform-aware ONNX Runtime wrapper (NAPI på Android, QNN på Linux, CPU tilbakefall) |
Modellen wrappers og onnx_engine.h flyttet inn speech-core i modellen-utdrag refaktor; se docs/models.md for hele lageret.
Kildestruktur
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/Kildekode: github.com/soniqo/speech-android