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.

ModellUppgifterKvantiseringStorlek
Parakeet TDT v3STT (114 språk, 8192 BPE vocab)INT8~891 MB
Kokoro-82MTTSINT8~330 MB
Pocket TTS 100M (tillval)Streaming text-till-tal (engelska, fast Alba röst)Dynamisk INT8 + FP32120,3 MB
Silero VAD v5Detektering av röstaktivitetfloat322 MB
DeepFilterNet3Buller avbokningFP16~8 MB
Pocket TTS

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:

PlattformChipsetAcceleration
AndroidSnapdragon 8 Gen 1+NNAPI → Hexagon NPU
AndroidSamsung Exynos 2200+NNAPI → Samsung NPU
AndroidGoogle Tensor G2+NNAPI → Google TPU
Alla AndroidCPU nedgångXNNPACK

För fordons Qualcomm SA8295P / SA8255P med QNN (Hexagon DSP), se speech-core/exempel/linux.

Nyckel C++ Filer

Filsyftet
jni_bridge.cppKonstruerar speech_core::* modellomslag och handreferenser till VoicePipeline
parakeet_stt.cppSTT med TDT greedy decoder och per-feature mel normalization
kokoro_tts.cppTTS med E2E modell- och uppmärksamhetsmask
kokoro_phonemizer.cppDictionary-based phonemizer för TTS input
silero_vad.cppRöstaktivitetsdetektering
deepfilter.cppBulleravbokning med STFT/ERB-behandling
onnx_engine.hPlattformsmedveten 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/

Källa: github.com/soniqo/speech-android