Premiers pas — Android

speech-android fournit un traitement vocal embarqué pour Android via ONNX Runtime. Le pipeline exécute VAD + STT + TTS avec support du barge-in, entièrement hors ligne après le téléchargement des modèles.

Prérequis

Téléchargez l'application de démonstration pré-compilée pour l'essayer immédiatement :

Dépendance Gradle

Ajoutez le SDK à votre build.gradle.kts :

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

Démarrage rapide

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) // float32 mono 16 kHz
Important

Les modèles se téléchargent automatiquement depuis HuggingFace à la première utilisation (~1,2 Go au total). Après le téléchargement initial, toute l'inférence s'exécute entièrement hors ligne.

Entrée vocale système (RecognitionService)

Le SDK fournit un SpeechRecognitionService prêt à l'emploi qui s'intègre à l'API SpeechRecognizer du framework Android — aucun code à écrire. Une fois votre app sélectionnée comme reconnaisseur vocal par défaut, toute application tierce appelant SpeechRecognizer.createSpeechRecognizer(context) (sans ComponentName) obtient un STT entièrement on-device via votre pipeline.

1. Déclarez RECORD_AUDIO et le service dans 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. Ajoutez 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. Définissez le service comme valeur par défaut système (Paramètres → Système → Langues et saisie → Sélecteur d'entrée vocale sur Android pur, ou via adb) :

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

4. Vérifiez en lançant l'écran Recognizer test de l'app de démo, qui appelle SpeechRecognizer.createSpeechRecognizer(ctx) (sans composant) et journalise chaque callback du framework — utile pour confirmer l'aller-retour binder sans avoir besoin de logcat.

Le service implémente onCheckRecognitionSupport (API 33+) renvoyant les 27 langues BCP-47 couvertes par Parakeet TDT v3, marquées installedOnDeviceLanguage lorsque les modèles sont présents (ou pendingOnDeviceLanguage pendant leur téléchargement). Le focus audio est acquis avec AUDIOFOCUS_GAIN_TRANSIENT pendant la durée d'une session.

Limitation

Gboard, Samsung Keyboard et Google Assistant intègrent leurs propres reconnaisseurs et contournent la valeur par défaut système. Les applications qui appellent explicitement l'API SpeechRecognizer du framework (ou construisent leur propre UI par-dessus) sont celles qui passent par votre service.

Modèles

Tous les modèles s'exécutent via ONNX Runtime avec accélération NNAPI. Quantifié INT8 par défaut.

ModèleTâcheTaille
Parakeet TDT v3 (INT8)Parole vers texte (114 langues)490 Mo
Kokoro-82M (INT8)Texte vers parole (7 langues)89 Mo
Silero VAD v5Détection d'activité vocale1,2 Mo
DeepFilterNet3 (FP16)Suppression de bruit4,2 Mo

Code source : github.com/soniqo/speech-android

Prochaines étapes