架构 — 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 v3STT(114 种语言,8192 BPE 词表)INT8~500 MB
Kokoro-82MTTSINT8~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,并按顺序优雅回退:

平台芯片组加速
AndroidSnapdragon 8 Gen 1+NNAPI → Hexagon NPU
AndroidSamsung Exynos 2200+NNAPI → Samsung NPU
AndroidGoogle Tensor G2+NNAPI → Google TPU
汽车SA8295P / SA8255PQNN → 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.cppLinux C API 实现
linux/include/speech.hLinux 公开 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

源码:github.com/soniqo/speech-android