快速开始 — Android

speech-android 使用 ONNX Runtime 为 Android 提供端侧语音处理能力。流水线运行 VAD + STT + TTS 并支持 barge-in,在完成模型下载后完全离线运行。

环境要求

下载预构建的 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

下一步