Maskinoversættelse · Engelsk original
Arkitektur - Android
speech-android er en tynd Kotlin SDK + JNI bro over speech-core C++ motor. Alle ML inference og rørledning orkestrering live i speech-core; speech-android håndterer kun Android emballage. Linux / automobil (Yotto, Qualcomm SA8295P, SA8255P med QNN) er vært direkte i speech-core / eksempler / linux.
Stack
Modelindpakningen (Silero VAD, Parakeet STT, Kokoro TTS, DeepFilterNet3) direkte at gennemføre speech-core grænseflader (VADInterface, STTInterface, TTSInterface, EnhancerInterface), så JNI broen konstruerer dem og giver henvisninger til speech_core::VoicePipeline med ingen C- vtable adapter Mesterplate.
┌──────────────────────────────────────────────┐
│ 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
Taleledningen løber tre trin i træk: VAD → STT → TTS. Stemmeaktivitetsdetektering udløser optagelse, lyd er transskriberet af STT, og TTS genererer svaret. Barge- i støtte tillader afbrydelse TTS afspilning, når brugeren begynder at tale mid- svar.
speech-core håndterer turdetektering, afbrydelseshåndtering og samtalesammenhæng. Modelindskrifterne implementerer speech-core 's grænseflader direkte - ingen C- vtable adapter lag - hvilket gør det lige så nemt at tilslutte ikke-ONNX-backends (fx CoreML / MLX implementeringer i speech-swift), der er i overensstemmelse med de samme grænseflader.
Modeller
Alle modeller bruger ONNX format med INT8 kvantisering som standard. Modeller er hostet på HuggingFace under soniqo org og automatisk download ved første brug via ModelManager.kt.
| Model | Opgave | Kvantificering | Størrelse |
|---|---|---|---|
| Parakeet TDT v3 | STT (114 sprog, 8192 BPE vocab) | INT8 | ~ 891 MB |
| Kokoro-82M | TTS | INT8 | ~ 330 MB |
| Pocket TTS 100M (valgfri) | Streaming text- to- tale (Engelsk, fast Alba stemme) | dynamisk INT8 + FP32 | 120.3 MB |
| Silero VAD v5 | Registrering af taleaktivitet | float32 | ~ 2 MB |
| DeepFilterNet3 | Støjaflysning | FP16 | ~ 8 MB |
Pocket TTS er en valgfri speech-core ONNX motor. Det er ikke i den aktuelle speech-android standard download eller JNI model valg; Kotlin SDK ledninger forbliver opfølgning arbejde.
Samlet model download er ca. 1.2 GB. Efter den indledende download, alle inferens kører helt offline.
Inferens: OnnxEngine
Den onnx_engine.h wrapper giver platform- aware execution provider (EP) selection. Det sonder tilgængelige EPs på runtime og falder tilbage elegant:
| Platform | Chipset | Acceleration |
|---|---|---|
| Android | Snapdragon 8 Gen 1 + | NNAPI → Hexagon NPU |
| Android | Samsung Exynos 2200 + | NNAPI → Samsung NPU |
| Android | Google Tensor G2 + | NNAPI → Google TPU |
| Enhver Android | CPU fallback | XNNPACK |
Med hensyn til automobil Qualcomm SA8295P / SA8255P med QNN (Hexagon DSP), se speech-core / eksempler / linux.
Nøgle C++- filer
| Fil | Formål |
|---|---|
jni_bridge.cpp | Konstruktioner speech_core::* model wrappers og hænder henvisninger til VoicePipeline |
parakeet_stt.cpp | STT med TDT grådige dekoder og per- feature mel normalisering |
kokoro_tts.cpp | TTS med E2E model og opmærksomhed maske |
kokoro_phonemizer.cpp | Dictionary- baseret phonemizer til TTS input |
silero_vad.cpp | Opdagelse af stemmeaktivitet |
deepfilter.cpp | Støjaflysning med STFT / ERB-behandling |
onnx_engine.h | Platform- aware ONNX Runtime papir (NNAPI on Android, QNN on Linux, CPU fald) |
Modellerne indpakning og onnx_engine.h flyttet til speech-core i modelekstraktionsrefaktoren; se docs / models.md for den fulde beholdning.
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/