Kiến trúc — Android
speech-android là một SDK Kotlin nhẹ + cầu JNI trên engine C++ speech-core. Tất cả suy luận ML và điều phối pipeline nằm trong speech-core; speech-android chỉ xử lý việc đóng gói cho Android. Linux / ô-tô (Yocto, Qualcomm SA8295P/SA8255P với QNN) được lưu trữ trực tiếp tại speech-core/examples/linux.
Stack
Các wrapper mô hình (Silero VAD, Parakeet STT, Kokoro TTS, DeepFilterNet3) trực tiếp triển khai các interface của speech-core (VADInterface, STTInterface, TTSInterface, EnhancerInterface), nên cầu JNI xây dựng chúng và chuyển tham chiếu tới speech_core::VoicePipeline mà không cần boilerplate adapter vtable C.
┌──────────────────────────────────────────────┐
│ SpeechPipeline (API Kotlin công khai) │
│ ↓ JNI │
│ jni_bridge.cpp (~250 dòng) │
└──────────────────┬───────────────────────────┘
│
┌──────────────────┴───────────────────────────┐
│ speech_core_models (submodule git) │
│ Silero / Parakeet / Kokoro / DeepFilter │
│ speech_core │
│ Phát hiện lượt · Ngắt lời · Ngữ cảnh │
└──┬────────┬────────┬────────┬────────────────┘
│ │ │ │ triển khai trực tiếp interface
┌──┴──┐ ┌──┴──┐ ┌──┴──┐ ┌─┴────────┐
│ VAD │ │ STT │ │ TTS │ │ Enhancer │
└──┬──┘ └──┬──┘ └──┬──┘ └─┬────────┘
└────────┴────────┴────────┘
ONNX Runtime (CPU / NNAPI)Pipeline
Pipeline giọng nói chạy ba giai đoạn tuần tự: VAD → STT → TTS. Phát hiện hoạt động giọng nói kích hoạt ghi âm, âm thanh được STT chuyển thành văn bản và TTS sinh phản hồi. Hỗ trợ barge-in cho phép ngắt phát TTS khi người dùng bắt đầu nói giữa chừng.
speech-core quản lý phát hiện lượt, xử lý ngắt lời và ngữ cảnh hội thoại. Các wrapper mô hình triển khai trực tiếp các interface của speech-core — không có lớp adapter vtable C — giúp việc cắm vào các backend không phải ONNX (ví dụ các cài đặt CoreML / MLX trong speech-swift) tuân theo cùng interface trở nên dễ dàng tương đương.
Mô hình
Tất cả mô hình dùng định dạng ONNX với lượng tử hóa INT8 mặc định. Các mô hình được lưu trữ trên HuggingFace dưới tổ chức aufklarer và tự động tải xuống ở lần dùng đầu tiên qua ModelManager.kt.
| Mô hình | Tác vụ | Lượng tử hóa | Kích thước |
|---|---|---|---|
| Parakeet TDT v3 | STT (114 ngôn ngữ, từ vựng BPE 8192) | INT8 | ~500 MB |
| Kokoro-82M | TTS | INT8 | ~89 MB |
| Silero VAD v5 | Phát hiện hoạt động giọng nói | float32 | ~1.2 MB |
| DeepFilterNet3 | Khử nhiễu | FP16 | ~4.2 MB |
Tổng dung lượng tải mô hình khoảng 1.2 GB. Sau lần tải ban đầu, toàn bộ suy luận chạy hoàn toàn ngoại tuyến.
Suy luận: OnnxEngine
Wrapper onnx_engine.h cung cấp việc chọn execution provider (EP) theo nền tảng. Nó dò các EP có sẵn ở thời điểm chạy và fallback một cách mượt mà:
| Nền tảng | Chipset | Tăng tốc |
|---|---|---|
| Android | Snapdragon 8 Gen 1+ | NNAPI → NPU Hexagon |
| Android | Samsung Exynos 2200+ | NNAPI → NPU Samsung |
| Android | Google Tensor G2+ | NNAPI → TPU Google |
| Mọi Android | Fallback CPU | XNNPACK |
Đối với Qualcomm SA8295P / SA8255P ô-tô với QNN (Hexagon DSP), xem speech-core/examples/linux.
Các tệp C++ quan trọng
| Tệp | Mục đích |
|---|---|
jni_bridge.cpp | Xây dựng các wrapper mô hình speech_core::* và chuyển tham chiếu tới VoicePipeline |
parakeet_stt.cpp | STT với decoder greedy TDT và chuẩn hóa mel theo đặc trưng |
kokoro_tts.cpp | TTS với mô hình E2E và mask attention |
kokoro_phonemizer.cpp | Phonemizer dựa trên từ điển cho đầu vào TTS |
silero_vad.cpp | Phát hiện hoạt động giọng nói |
deepfilter.cpp | Khử nhiễu với xử lý STFT/ERB |
onnx_engine.h | Wrapper ONNX Runtime theo nền tảng (NNAPI trên Android, QNN trên Linux, fallback CPU) |
Các wrapper mô hình và onnx_engine.h đã được chuyển vào speech-core trong đợt tái cấu trúc tách mô hình; xem docs/models.md để xem danh mục đầy đủ.
Cấu trúc mã nguồn
speech-android/
speech-core/ Engine C++ + wrapper mô hình ONNX (submodule git)
sdk/src/main/
cpp/jni_bridge.cpp Cầu JNI nhẹ trên speech_core::VoicePipeline
cpp/CMakeLists.txt Kéo speech-core qua add_subdirectory(SPEECH_CORE_WITH_ONNX=ON)
kotlin/.../speech/ SDK Kotlin công khai (SpeechPipeline, ModelManager)
sdk/src/androidTest/ Kiểm thử e2e có instrument
app/ Ứng dụng demo
Linux / ô-tô (ABI C, demo ALSA, công cụ CLI) nằm tại:
speech-core/examples/linux/Mã nguồn: github.com/soniqo/speech-android