สถาปัตยกรรม — Android
speech-android เป็น SDK Kotlin แบบบาง + สะพาน JNI บนเอนจิน C++ speech-core การอนุมาน ML และการประสานงานไปป์ไลน์ทั้งหมดอยู่ใน speech-core; speech-android จัดการเฉพาะการแพ็กเกจสำหรับ Android Linux / ยานยนต์ (Yocto, Qualcomm SA8295P/SA8255P พร้อม QNN) โฮสต์โดยตรงที่ speech-core/examples/linux
สแต็ก
แรปเปอร์ของโมเดล (Silero VAD, Parakeet STT, Kokoro TTS, DeepFilterNet3) ติดตั้งอินเทอร์เฟซของ speech-core โดยตรง (VADInterface, STTInterface, TTSInterface, EnhancerInterface) ดังนั้นสะพาน JNI จึงสร้างแรปเปอร์เหล่านี้และส่งการอ้างอิงไปยัง speech_core::VoicePipeline โดยไม่ต้องมีบอยเลอร์เพลตอะแดปเตอร์ vtable C
┌──────────────────────────────────────────────┐
│ SpeechPipeline (API Kotlin สาธารณะ) │
│ ↓ JNI │
│ jni_bridge.cpp (~250 บรรทัด) │
└──────────────────┬───────────────────────────┘
│
┌──────────────────┴───────────────────────────┐
│ speech_core_models (git submodule) │
│ Silero / Parakeet / Kokoro / DeepFilter │
│ speech_core │
│ การตรวจจับเทิร์น · การขัดจังหวะ · บริบท │
└──┬────────┬────────┬────────┬────────────────┘
│ │ │ │ ติดตั้งอินเทอร์เฟซโดยตรง
┌──┴──┐ ┌──┴──┐ ┌──┴──┐ ┌─┴────────┐
│ VAD │ │ STT │ │ TTS │ │ Enhancer │
└──┬──┘ └──┬──┘ └──┬──┘ └─┬────────┘
└────────┴────────┴────────┘
ONNX Runtime (CPU / NNAPI)ไปป์ไลน์
ไปป์ไลน์เสียงพูดทำงานสามขั้นตอนตามลำดับ: VAD → STT → TTS การตรวจจับกิจกรรมเสียงกระตุ้นการบันทึก เสียงถูก STT ถอดเป็นข้อความ และ TTS สร้างการตอบสนอง การสนับสนุน barge-in อนุญาตให้ขัดจังหวะการเล่น TTS เมื่อผู้ใช้เริ่มพูดในระหว่างการตอบสนอง
speech-core จัดการการตรวจจับเทิร์น การจัดการการขัดจังหวะ และบริบทของการสนทนา แรปเปอร์ของโมเดลติดตั้งอินเทอร์เฟซของ speech-core โดยตรง — ไม่มีเลเยอร์อะแดปเตอร์ vtable C — ทำให้ง่ายต่อการเสียบแบ็กเอนด์ที่ไม่ใช่ ONNX (เช่น การติดตั้ง CoreML / MLX ใน speech-swift) ที่สอดคล้องกับอินเทอร์เฟซเดียวกันได้อย่างเท่าเทียม
โมเดล
โมเดลทั้งหมดใช้รูปแบบ ONNX พร้อมการควอนไทเซชัน INT8 เป็นค่าเริ่มต้น โมเดลโฮสต์อยู่บน HuggingFace ภายใต้องค์กร aufklarer และดาวน์โหลดอัตโนมัติในการใช้งานครั้งแรกผ่าน ModelManager.kt
| โมเดล | งาน | การควอนไทเซชัน | ขนาด |
|---|---|---|---|
| Parakeet TDT v3 | STT (114 ภาษา, คำศัพท์ BPE 8192) | INT8 | ~500 MB |
| Kokoro-82M | TTS | INT8 | ~89 MB |
| Silero VAD v5 | การตรวจจับกิจกรรมเสียง | float32 | ~1.2 MB |
| DeepFilterNet3 | การลดเสียงรบกวน | FP16 | ~4.2 MB |
ขนาดดาวน์โหลดโมเดลรวมประมาณ 1.2 GB หลังจากดาวน์โหลดครั้งแรก การอนุมานทั้งหมดทำงานแบบออฟไลน์เต็มรูปแบบ
การอนุมาน: OnnxEngine
แรปเปอร์ onnx_engine.h ให้บริการการเลือก execution provider (EP) ที่รับรู้แพลตฟอร์ม จะตรวจสอบ EP ที่มีอยู่ในเวลารันและทำการ fallback อย่างนุ่มนวล:
| แพลตฟอร์ม | ชิปเซ็ต | การเร่งความเร็ว |
|---|---|---|
| Android | Snapdragon 8 Gen 1+ | NNAPI → NPU Hexagon |
| Android | Samsung Exynos 2200+ | NNAPI → NPU Samsung |
| Android | Google Tensor G2+ | NNAPI → TPU Google |
| Android ใดก็ได้ | Fallback CPU | XNNPACK |
สำหรับ Qualcomm SA8295P / SA8255P สำหรับยานยนต์พร้อม QNN (Hexagon DSP) ดู speech-core/examples/linux
ไฟล์ C++ ที่สำคัญ
| ไฟล์ | วัตถุประสงค์ |
|---|---|
jni_bridge.cpp | สร้างแรปเปอร์โมเดล speech_core::* และส่งการอ้างอิงไปยัง VoicePipeline |
parakeet_stt.cpp | STT พร้อมเดโคเดอร์ greedy TDT และการนอร์มัลไลซ์ mel ต่อฟีเจอร์ |
kokoro_tts.cpp | TTS พร้อมโมเดล E2E และ attention mask |
kokoro_phonemizer.cpp | โฟนีไมเซอร์ที่ใช้พจนานุกรมสำหรับอินพุต TTS |
silero_vad.cpp | การตรวจจับกิจกรรมเสียง |
deepfilter.cpp | การลดเสียงรบกวนพร้อมการประมวลผล STFT/ERB |
onnx_engine.h | แรปเปอร์ ONNX Runtime ที่รับรู้แพลตฟอร์ม (NNAPI บน Android, QNN บน Linux, fallback CPU) |
แรปเปอร์ของโมเดลและ onnx_engine.h ถูกย้ายเข้าใน speech-core ในการรีแฟกเตอร์การแยกโมเดล; ดู docs/models.md สำหรับสินค้าคงคลังฉบับเต็ม
โครงสร้างซอร์สโค้ด
speech-android/
speech-core/ เอนจิน C++ + แรปเปอร์โมเดล ONNX (git submodule)
sdk/src/main/
cpp/jni_bridge.cpp สะพาน JNI แบบบางบน speech_core::VoicePipeline
cpp/CMakeLists.txt ดึง speech-core ผ่าน add_subdirectory(SPEECH_CORE_WITH_ONNX=ON)
kotlin/.../speech/ SDK Kotlin สาธารณะ (SpeechPipeline, ModelManager)
sdk/src/androidTest/ การทดสอบ e2e ที่มี instrument
app/ แอปพลิเคชันเดโม
Linux / ยานยนต์ (ABI C, เดโม ALSA, เครื่องมือ CLI) อยู่ที่:
speech-core/examples/linux/ซอร์สโค้ด: github.com/soniqo/speech-android