Начало работы — Android

speech-android обеспечивает обработку речи на устройстве для Android через ONNX Runtime. Пайплайн запускает VAD + STT + TTS с поддержкой barge-in, полностью офлайн после загрузки моделей.

Требования

Скачайте готовое демо-приложение, чтобы попробовать его сразу:

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) // 16 кГц моно float32
Важно

Модели автоматически скачиваются с HuggingFace при первом использовании (~1.2 ГБ всего). После первой загрузки весь инференс работает полностью офлайн.

Системный голосовой ввод (RecognitionService)

SDK включает готовый к использованию SpeechRecognitionService, который подключается к API SpeechRecognizer фреймворка Android — никакого кода писать не нужно. Как только ваше приложение выбрано в качестве распознавателя голоса по умолчанию, любое стороннее приложение, вызывающее SpeechRecognizer.createSpeechRecognizer(context) (без ComponentName), получает полностью локальный STT через ваш конвейер.

1. Объявите RECORD_AUDIO и сервис в AndroidManifest.xml:

<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) (без компонента) и логирует каждый callback фреймворка — удобно для подтверждения binder round-trip без необходимости в logcat.

Сервис реализует onCheckRecognitionSupport (API 33+), возвращающий 27 BCP-47 языков, поддерживаемых Parakeet TDT v3, помеченных как installedOnDeviceLanguage при наличии моделей (или pendingOnDeviceLanguage во время загрузки). Аудиофокус удерживается с AUDIOFOCUS_GAIN_TRANSIENT на время сессии.

Оговорка

Gboard, Samsung Keyboard и Google Assistant поставляются с собственными распознавателями и обходят системное значение по умолчанию. Через ваш сервис проходят только те приложения, которые явно вызывают API SpeechRecognizer фреймворка (или строят на нём собственный UI).

Модели

Все модели работают через ONNX Runtime с ускорением NNAPI. По умолчанию INT8-квантизация.

МодельЗадачаРазмер
Parakeet TDT v3 (INT8)Распознавание речи (114 языков)490 МБ
Kokoro-82M (INT8)Синтез речи (7 языков)89 МБ
Silero VAD v5Детекция голосовой активности1.2 МБ
DeepFilterNet3 (FP16)Подавление шума4.2 МБ

Исходный код: github.com/soniqo/speech-android

Следующие шаги