Traduzione automatica · Originale inglese
Architettura — Android
speech-android è un sottile ponte Kotlin SDK + JNI sopra il speech-core Il motore C++.Tutta l'inferenza ML e l'orchestrazione delle tubazioni vivono in speech-core; speech-android gestisce solo l'imballaggio Android . Linux / automotive (Yocto, Qualcomm SA8295P/SA8255P con QNN) è ospitato direttamente in speech-core/examples/linux.
Stack
Il modello avvolge (Silero VAD, Parakeet STT, Kokoro TTS, DeepFilterNet3) implementare direttamente speech-core interfacce (VADInterface, STTInterface, TTSInterface, EnhancerInterface), così il ponte JNI li costruisce e le mani fanno riferimento a speech_core::VoicePipeline con nessun adattatore C-vtable piastra caldaia.
┌──────────────────────────────────────────────┐
│ 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
La pipeline di discorso esegue tre fasi sequenziali: VAD → STT → TTS. Registrazione attività vocale attiva la registrazione, l'audio è trascritto da STT, e TTS genera la risposta. Il supporto barge-in consente di interrompere la riproduzione TTS quando l'utente inizia a parlare mid-response.
speech-core gestisce il rilevamento del turno, la gestione delle interruzioni e il contesto di conversazione. I wrapper del modello implementano le interfacce speech-core direttamente - nessun strato di adattatore C-vtable - rendendo altrettanto facile collegare gli backend non-ONNX (ad esempio le implementazioni CoreML / MLX in speech-swift) che si conformano alle stesse interfacce.
Modelli
Tutti i modelli utilizzano il formato ONNX con la quantizzazione INT8 come predefinito. I modelli sono ospitati su HuggingFace sotto soniqo org e scarico automatico sul primo utilizzo tramite ModelManager.kt.
| Modello | Compiti | Quantificazione | Dimensione |
|---|---|---|---|
| Parakeet TDT v3 | STT (114 lingue, 8192 BPE vocab) | INT8 | ~ 891 MB |
| Kokoro-82M | TTS | INT8 | ~ 330 MB |
| Pocket TTS 100M (opzionale) | Streaming di testo-to-speech (Inglese, voce fissa Alba) | dinamica INT8 + FP32 | 120.3 MB |
| Silero VAD v5 | Rilevamento dell’attività vocale | float32 | ~ 2 MB |
| DeepFilterNet3 | Cancellazione del rumore | FP16 | ~ 8 MB |
Pocket TTS è un backend opzionale speech-core ONNX. Non è nell'attuale download predefinito speech-android o nella selezione del modello JNI; il cablaggio Kotlin SDK rimane il lavoro di follow-up.
Il download totale del modello è approssimativamente 1.2 GB . Dopo il download iniziale, tutta l'inferenza viene completamente offline.
Inferenza: OnnxEngine
L'involucro onnx_engine.h fornisce la selezione del fornitore di esecuzione (EP) di platform-aware.
| Piattaforma | Chipset | Accelerazione |
|---|---|---|
| Android | Snapdragon 8 Gen 1+ | NNAPI → Hexagon NPU |
| Android | Samsung Exynos 2200+ | NNAPI → Samsung NPU |
| Android | Google Tensor G2+ | NNAPI → Google TPU |
| Qualsiasi Android | Rimborso CPU | XNNPACK |
Per autoveicoli Qualcomm SA8295P / SA8255P con QNN (Hexagon DSP), vedi speech-core/examples/linux.
File chiave C++
| File | Oggetto |
|---|---|
jni_bridge.cpp | Costruzioni speech_core::* modello wrapper e mani riferimenti a VoicePipeline |
parakeet_stt.cpp | STT con decoder avido TDT e normalizzazione mel per la temperatura |
kokoro_tts.cpp | TTS con il modello E2E e la maschera di attenzione |
kokoro_phonemizer.cpp | fonemizzatore a base di dizionario per TTS |
silero_vad.cpp | Rilevamento delle attività vocali |
deepfilter.cpp | Cancellazione del rumore con trattamento STFT/ERB |
onnx_engine.h | Piattaforma-aware ONNX Runtime wrapper (NNAPI su Android, QNN su Linux, CPU |
Il modello avvolge e onnx_engine.h si è spostato in speech-core nel refattore di estrazione del modello; cfr. docs/models.md per l'inventario completo.
Struttura della fonte
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/Codice sorgente: github.com / soniqo / speech-android