架构 — Android 与 Linux
speech-android 通过共享的 C++ 内核和针对各平台的前端,为 Android 与嵌入式 Linux 提供端侧语音处理能力。所有推理都在本地通过 ONNX Runtime 运行,并使用硬件加速的 execution provider。
跨平台技术栈
Android 和 Linux 共享 speech-core C++ 子模块,由它编排完整的语音流水线。每个平台都提供一个轻薄的前端,通过基于 vtable 的接口委派给 speech-core:
┌────────────────────────────────────────────────┐
│ Android: SpeechPipeline (Kotlin/JNI) │
│ Linux: speech.h (C API) │
└──────────────────┬───────────────────────────┘
│
┌──────────────────┴───────────────────────────┐
│ speech-core (C++ submodule) │
│ Turn detection · Interruptions · Context │
└──┬────────┬────────┬────────┬────────────────┘
│ │ │ │ vtables
┌──┴──┐ ┌──┴──┐ ┌──┴──┐ ┌─┴────────┐
│ VAD │ │ STT │ │ TTS │ │ Enhancer │
└──┬──┘ └──┬──┘ └──┬──┘ └─┬────────┘
└────────┴────────┴────────┘
ONNX Runtime (CPU / NNAPI / QNN)各平台路径
Android
Kotlin SDK(SpeechPipeline.kt)提供公开 API。它通过 JNI 调用进入 jni_bridge.cpp,后者向 speech-core 注册 vtable 回调。ONNX Runtime 使用 NNAPI execution provider,在高通、三星和 Google 芯片上获得硬件加速。
Kotlin SDK → JNI bridge → speech-core → ONNX Runtime (NNAPI)Linux
C API(speech.h)为嵌入式 Linux 目标平台(汽车、Yocto)暴露相同的流水线。在 Qualcomm 汽车平台(SA8295P、SA8255P)上,ONNX Runtime 使用 QNN execution provider 进行 Hexagon DSP 加速。
C API → speech-core → ONNX Runtime (QNN)流水线
语音流水线按顺序运行三个阶段:VAD → STT → TTS。语音活动检测触发录音,音频由 STT 转写,TTS 生成回复。Barge-in 支持允许用户在中途说话时打断 TTS 播放。
speech-core 负责管理轮次检测、打断处理和对话上下文。模型实现(VAD、STT、TTS、Enhancer)通过 C vtable 接口插入,使核心流水线逻辑与平台无关。
模型
所有模型默认使用 INT8 量化的 ONNX 格式。模型托管在 HuggingFace 上的 aufklarer 组织下,首次使用时通过 ModelManager.kt 自动下载。
| 模型 | 任务 | 量化 | 大小 |
|---|---|---|---|
| Parakeet TDT v3 | STT(114 种语言,8192 BPE 词表) | 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,并按顺序优雅回退:
| 平台 | 芯片组 | 加速 |
|---|---|---|
| Android | Snapdragon 8 Gen 1+ | NNAPI → Hexagon NPU |
| Android | Samsung Exynos 2200+ | NNAPI → Samsung NPU |
| Android | Google Tensor G2+ | NNAPI → Google TPU |
| 汽车 | SA8295P / SA8255P | QNN → Hexagon DSP |
| 任意 | CPU 回退 | XNNPACK |
关键 C++ 文件
| 文件 | 用途 |
|---|---|
jni_bridge.cpp | 通过 vtable 将 ONNX 模型实现接入 speech-core C API |
parakeet_stt.cpp | 带 TDT 贪心解码器和逐特征 mel 归一化的 STT |
kokoro_tts.cpp | 带 E2E 模型与注意力 mask 的 TTS |
kokoro_phonemizer.cpp | 用于 TTS 输入的字典型音素化器 |
silero_vad.cpp | 语音活动检测 |
deepfilter.cpp | 带 STFT/ERB 处理的降噪 |
onnx_engine.h | 平台感知的 ONNX Runtime 包装器(Android 上 NNAPI、Linux 上 QNN、CPU 回退) |
linux/src/speech.cpp | Linux C API 实现 |
linux/include/speech.h | Linux 公开 C 头文件 |
源码结构
speech-android/
speech-core/ C++ submodule (pipeline orchestration)
sdk/src/main/
cpp/ ONNX Runtime model implementations, JNI bridge, audio DSP
kotlin/.../speech/ Kotlin public SDK (SpeechPipeline, ModelManager)
sdk/src/androidTest/ Instrumented e2e tests (23 tests, 5 suites)
linux/
include/speech.h Public C header
src/speech.cpp Linux C API implementation
tests/ Linux test suite (11 tests)
app/ Demo application