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ìnhTác vụLượng tử hóaKích thước
Parakeet TDT v3STT (114 ngôn ngữ, từ vựng BPE 8192)INT8~500 MB
Kokoro-82MTTSINT8~89 MB
Silero VAD v5Phát hiện hoạt động giọng nóifloat32~1.2 MB
DeepFilterNet3Khử nhiễuFP16~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ảngChipsetTăng tốc
AndroidSnapdragon 8 Gen 1+NNAPI → NPU Hexagon
AndroidSamsung Exynos 2200+NNAPI → NPU Samsung
AndroidGoogle Tensor G2+NNAPI → TPU Google
Mọi AndroidFallback CPUXNNPACK

Đố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ệpMục đích
jni_bridge.cppXây dựng các wrapper mô hình speech_core::* và chuyển tham chiếu tới VoicePipeline
parakeet_stt.cppSTT với decoder greedy TDT và chuẩn hóa mel theo đặc trưng
kokoro_tts.cppTTS với mô hình E2E và mask attention
kokoro_phonemizer.cppPhonemizer dựa trên từ điển cho đầu vào TTS
silero_vad.cppPhát hiện hoạt động giọng nói
deepfilter.cppKhử nhiễu với xử lý STFT/ERB
onnx_engine.hWrapper 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