快速开始 — Android
speech-android 使用 ONNX Runtime 为 Android 提供端侧语音处理能力。流水线运行 VAD + STT + TTS 并支持 barge-in,在完成模型下载后完全离线运行。
环境要求
- Android 8+ (API 26)
- arm64-v8a 架构
下载预构建的 demo app 立即试用:
Gradle 依赖
将 SDK 添加到 build.gradle.kts:
implementation("audio.soniqo:speech:0.0.9")
快速开始
val modelDir = ModelManager.ensureModels(context)
val pipeline = SpeechPipeline(SpeechConfig(modelDir = modelDir))
pipeline.events.collect { event ->
when (event) {
is SpeechEvent.TranscriptionCompleted -> println(event.text)
is SpeechEvent.ResponseDone -> pipeline.resumeListening()
else -> {}
}
}
pipeline.start()
pipeline.pushAudio(samples) // 16kHz mono float32
模型在首次使用时从 HuggingFace 自动下载(总计约 1.2 GB)。完成首次下载后,所有推理都完全离线运行。
系统语音输入 (RecognitionService)
SDK 自带可直接使用的 SpeechRecognitionService,接入 Android 框架的 SpeechRecognizer API — 无需编写代码。一旦你的应用被设为默认语音识别器,任何调用 SpeechRecognizer.createSpeechRecognizer(context)(不指定 ComponentName)的第三方应用都能通过你的流水线获得完全本地的 STT。
1. 在 AndroidManifest.xml 中声明 RECORD_AUDIO 和服务:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<application>
<service
android:name="audio.soniqo.speech.service.SpeechRecognitionService"
android:exported="true"
android:permission="android.permission.RECORD_AUDIO">
<intent-filter>
<action android:name="android.speech.RecognitionService" />
</intent-filter>
<meta-data
android:name="android.speech"
android:resource="@xml/recognition_service" />
</service>
</application>
2. 添加 app/src/main/res/xml/recognition_service.xml:
<?xml version="1.0" encoding="utf-8"?>
<recognition-service xmlns:android="http://schemas.android.com/apk/res/android" />
3. 将服务设为系统默认(原生 Android 上 设置 → 系统 → 语言和输入 → 语音输入选择器,或通过 adb):
adb shell settings put secure voice_recognition_service \
your.package/audio.soniqo.speech.service.SpeechRecognitionService
4. 通过运行演示应用的 Recognizer test 界面来验证,它调用 SpeechRecognizer.createSpeechRecognizer(ctx)(不带组件)并记录每个框架回调 — 无需 logcat 即可确认 binder 往返。
服务实现了 onCheckRecognitionSupport(API 33+),返回 Parakeet TDT v3 涵盖的 27 个 BCP-47 语言,在模型存在时标记为 installedOnDeviceLanguage(下载中时为 pendingOnDeviceLanguage)。会话期间使用 AUDIOFOCUS_GAIN_TRANSIENT 获取音频焦点。
Gboard、三星键盘和 Google Assistant 都自带识别器,会跳过系统默认。显式调用框架 SpeechRecognizer API(或在其上构建自己 UI)的应用才会经过你的服务。
模型
所有模型通过 ONNX Runtime 运行,并启用 NNAPI 加速。默认使用 INT8 量化。
| 模型 | 任务 | 大小 |
|---|---|---|
| Parakeet TDT v3 (INT8) | 语音转文字(114 种语言) | 490 MB |
| Kokoro-82M (INT8) | 文本转语音(7 种语言) | 89 MB |
| Silero VAD v5 | 语音活动检测 | 1.2 MB |
| DeepFilterNet3 (FP16) | 降噪 | 4.2 MB |
源码:github.com/soniqo/speech-android
下一步
- Benchmarks — Android 推理性能
- Linux C API — 嵌入式 Linux 配置