Terjemahan mesin · Versi asli bahasa Inggris
Arsitektur - Android
speech-android adalah sebuah jembatan Kotlin SDK + JNI tipis di atas speech-core C++ mesin. Semua ML inferensi dan orkestra pipa hidup di speech-core; speech-android handel hanya Android Mengepak. Linux / otomotif (Yocto, Qualcomm SA8295P/SA8255P dengan QNN) diselenggarakan langsung di speech-core / contoh / linux.
Stack
Pembungkus model (Silero VAD, Parakeet STT, Kokoro TTS, DeepFilterNet3) secara langsung mengimplementasikan speech-core antarmuka (VADInterface, STTInterface, TTSInterface, EnhancerInterface), jadi jembatan JNI membangun mereka dan referensi tangan ke speech_core::VoicePipeline tidak ada C-vtable adapter boilerplate.
┌──────────────────────────────────────────────┐
│ 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)Baris pipa
Pipa bicara berjalan tiga tahap secara berurutan: VAD ASAL STT OLEH TTSDeteksi Aktivitas Suara merekam pemicu, audio ditranskripsi oleh STT, dan TTS menghasilkan respon. Barge- dalam dukungan memungkinkan mengganggu TTS pemutaran ketika pengguna mulai berbicara mid- respons.
speech-core mengelola deteksi turn, penanganan interrupt, dan konteks percakapan. Model pembungkus diimplementasi speech-core antarmuka langsung - tidak ada C-vtable lapisan adaptor - membuatnya sama mudah untuk plug dalam backends bukan-ONNX (misalnya CoreML / MLX implementasi dalam speech-swift) yang sesuai dengan antarmuka yang sama.
Model
Semua model menggunakan ONNX format dengan INT8 kuantisasi sebagai default. Model diselenggarakan pada HuggingFace di bawah soniqo org dan auto-download pada penggunaan pertama via ModelManager.kt.
| Model | Tugas | Kuantisasi | Ukuran |
|---|---|---|---|
| Parakeet TDT v3 | STT (114 bahasa, vokal BPE 8192) | INT8 | ~ 891 MB |
| Kokoro-82M | TTS | INT8 | ~ 330 MB |
| Pocket TTS 100M (opsional) | Teks streaming - to- pidato (bahasa Inggris, suara Alba tetap) | dinamis INT8 + FP32 | 120,3 MB |
| Silero VAD v5 | Deteksi aktivitas suara | float32 | ~ 2 MB |
| DeepFilterNet3 | Cancellation Suara | FP16 | ~ 8 MB |
Pocket TTS adalah sebuah opsional speech-core ONNX backend. Ini tidak dalam saat ini speech-android unduh baku atau pemilihan model JNI; Kotlin SDK kabel tetap mengikuti pekerjaan.
Pengunduhan total model kira-kira 1.2 GB. Setelah download awal, semua kesimpulan berjalan sepenuhnya offline.
Inferensi: OnnxEngine
The onnx_engine.h wrapper menyediakan platform-aware operator eksekusi (EP) pilihan. Ini probe tersedia EP pada waktu-jalan dan jatuh kembali anggun:
| Platform | Chipset | Percepatan |
|---|---|---|
| Android | Snapdragon 8 Gen 1 + | NNAPI ASAP Hexagon NPU |
| Android | Samsung Exynos 2200 + | NNAPI ASASON Samsung NPU |
| Android | Google Tensor G2 + | Google TPU NAPI |
| Android | CPU fallback | XNPack |
Untuk komunikasi otomotif SA8295P / SA8255P dengan QNN (Hexagon DSP), lihat speech-core / contoh / linux.
Berkas kunci C++
| Berkas | Tujuan |
|---|---|
jni_bridge.cpp | Konstruks speech_core::* Model pembungkus dan referensi tangan ke VoicePipeline |
parakeet_stt.cpp | STT dengan decoder serakah TDT dan per- fitur mel normalisasi |
kokoro_tts.cpp | TTS dengan model E2E dan masker perhatian |
kokoro_phonemizer.cpp | Dictionary- berbasis fonemizer untuk masukan TTS |
silero_vad.cpp | Deteksi aktivitas suara |
deepfilter.cpp | Pemrosesan suara dengan STFT / ERB |
onnx_engine.h | Platform- sadar ONNX Runtime wrapper (NNAPI hidup Android, QNN on Linux, CPU fallback) |
Model pembungkus dan onnx_engine.h pindah ke speech-core dalam model-refactor ekstraksi; lihat docs / models.md untuk persediaan penuh.
Struktur Sumber
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/Kode sumber: gitub.com /soniqo/speech-android