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
- Android 8+ (API 26)
- Architecture arm64-v8a
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
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.
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èle | Tâche | Taille |
|---|---|---|
| Parakeet TDT v3 (INT8) | Parole vers texte (114 langues) | 490 Mo |
| Kokoro-82M (INT8) | Texte vers parole (7 langues) | 89 Mo |
| Silero VAD v5 | Détection d'activité vocale | 1,2 Mo |
| DeepFilterNet3 (FP16) | Suppression de bruit | 4,2 Mo |
Code source : github.com/soniqo/speech-android
Prochaines étapes
- Benchmarks — performance d'inférence Android
- API C Linux — configuration Linux embarqué