Empezar — Android

speech-android proporciona procesamiento de voz en el dispositivo para Android usando ONNX Runtime. El pipeline ejecuta VAD + STT + TTS con soporte de barge-in, totalmente offline tras la descarga del modelo.

Requisitos

Descarga la aplicación de demostración preconstruida para probarla inmediatamente:

Dependencia de Gradle

Añade el SDK a tu build.gradle.kts:

implementation("audio.soniqo:speech:0.0.9")

Inicio rápido

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
Importante

Los modelos se descargan automáticamente desde HuggingFace en el primer uso (~1.2 GB en total). Tras la descarga inicial, toda la inferencia se ejecuta totalmente offline.

Entrada de voz del sistema (RecognitionService)

El SDK incluye un SpeechRecognitionService listo para usar que se conecta a la API SpeechRecognizer del framework de Android — sin código que escribir. Una vez que tu app está seleccionada como reconocedor de voz predeterminado, cualquier app de terceros que llame a SpeechRecognizer.createSpeechRecognizer(context) (sin ComponentName) obtiene STT completamente en el dispositivo a través de tu pipeline.

1. Declara RECORD_AUDIO y el servicio en 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. Añade 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. Configura el servicio como predeterminado del sistema (Ajustes → Sistema → Idiomas e introducción → Selector de entrada de voz en Android puro, o vía adb):

adb shell settings put secure voice_recognition_service \
  your.package/audio.soniqo.speech.service.SpeechRecognitionService

4. Verifica ejecutando la pantalla Recognizer test de la app demo, que llama a SpeechRecognizer.createSpeechRecognizer(ctx) (sin componente) y registra cada callback del framework — útil para confirmar el round-trip del binder sin necesitar logcat.

El servicio implementa onCheckRecognitionSupport (API 33+) devolviendo los 27 idiomas BCP-47 que cubre Parakeet TDT v3, marcados como installedOnDeviceLanguage cuando los modelos están presentes (o pendingOnDeviceLanguage mientras se descargan). Se adquiere foco de audio con AUDIOFOCUS_GAIN_TRANSIENT durante la sesión.

Limitación

Gboard, Samsung Keyboard y Google Assistant incluyen sus propios reconocedores y se saltan el predeterminado del sistema. Las apps que llaman explícitamente a la API SpeechRecognizer del framework (o construyen su propia UI sobre ella) son las que pasan por tu servicio.

Modelos

Todos los modelos se ejecutan vía ONNX Runtime con aceleración NNAPI. Cuantizados en INT8 por defecto.

ModeloTareaTamaño
Parakeet TDT v3 (INT8)Voz a texto (114 idiomas)490 MB
Kokoro-82M (INT8)Texto a voz (7 idiomas)89 MB
Silero VAD v5Detección de actividad vocal1.2 MB
DeepFilterNet3 (FP16)Cancelación de ruido4.2 MB

Código fuente: github.com/soniqo/speech-android

Próximos pasos