Erste Schritte — Android
speech-android bietet Sprachverarbeitung auf dem Gerät für Android über ONNX Runtime. Die Pipeline führt VAD + STT + TTS mit Barge-in-Unterstützung aus und läuft nach dem Modell-Download vollständig offline.
Voraussetzungen
- Android 8+ (API 26)
- arm64-v8a-Architektur
Lade die vorgebaute Demo-App herunter, um sie sofort auszuprobieren:
Gradle-Abhängigkeit
Füge das SDK zu deiner build.gradle.kts hinzu:
implementation("audio.soniqo:speech:0.0.9")
Schnellstart
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 kHz Mono float32
Modelle werden beim ersten Gebrauch automatisch von HuggingFace heruntergeladen (~1,2 GB gesamt). Nach dem ersten Download läuft die gesamte Inferenz vollständig offline.
Systemweite Spracheingabe (RecognitionService)
Das SDK enthält einen einsatzbereiten SpeechRecognitionService, der sich in die SpeechRecognizer-API des Android-Frameworks einklinkt — kein Code zu schreiben. Sobald deine App als Standard-Spracherkennung ausgewählt ist, erhält jede Drittanbieter-App, die SpeechRecognizer.createSpeechRecognizer(context) (ohne ComponentName) aufruft, vollständiges On-Device-STT über deine Pipeline.
1. Deklariere RECORD_AUDIO und den Dienst in 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. Füge app/src/main/res/xml/recognition_service.xml hinzu:
<?xml version="1.0" encoding="utf-8"?>
<recognition-service xmlns:android="http://schemas.android.com/apk/res/android" />
3. Setze den Dienst als System-Standard (Einstellungen → System → Sprachen & Eingabe → Spracheingabe-Auswahl auf Stock-Android, oder über adb):
adb shell settings put secure voice_recognition_service \
your.package/audio.soniqo.speech.service.SpeechRecognitionService
4. Verifiziere, indem du den Recognizer test-Bildschirm der Demo-App ausführst, der SpeechRecognizer.createSpeechRecognizer(ctx) (ohne Komponente) aufruft und jeden Framework-Callback protokolliert — nützlich, um den Binder-Roundtrip ohne logcat zu bestätigen.
Der Dienst implementiert onCheckRecognitionSupport (API 33+) und gibt die 27 BCP-47-Sprachen zurück, die Parakeet TDT v3 abdeckt, markiert als installedOnDeviceLanguage, sobald Modelle vorhanden sind (oder pendingOnDeviceLanguage, während sie heruntergeladen werden). Während einer Sitzung wird Audiofokus mit AUDIOFOCUS_GAIN_TRANSIENT angefordert.
Gboard, Samsung Keyboard und Google Assistant bringen eigene Erkenner mit und überspringen den System-Standard. Apps, die die Framework-SpeechRecognizer-API explizit aufrufen (oder eine eigene UI darauf aufbauen), gehen über deinen Dienst.
Modelle
Alle Modelle laufen über ONNX Runtime mit NNAPI-Beschleunigung. Standardmäßig INT8-quantisiert.
| Modell | Aufgabe | Größe |
|---|---|---|
| Parakeet TDT v3 (INT8) | Sprache-zu-Text (114 Sprachen) | 490 MB |
| Kokoro-82M (INT8) | Text-zu-Sprache (7 Sprachen) | 89 MB |
| Silero VAD v5 | Sprachaktivitätserkennung | 1,2 MB |
| DeepFilterNet3 (FP16) | Rauschunterdrückung | 4,2 MB |
Quellcode: github.com/soniqo/speech-android
Nächste Schritte
- Benchmarks — Android-Inferenzleistung
- Linux C API — Einrichtung für eingebettetes Linux