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.20")
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
Die Standardmodelle werden beim ersten Gebrauch automatisch von HuggingFace heruntergeladen (~500 MB gesamt). Nach dem ersten Download läuft die gesamte Inferenz vollständig offline.
Erkennung des Gesprächsendes
Aktiviere Smart Turn v3.2, damit eine VAD-Pause als Entscheidung und nicht als sofortiges Ende behandelt wird. Nach jeder bestätigten Pause bewertet das Modell einmal die letzten acht Sekunden des aktuellen Turns. Ein Wert unter dem Schwellenwert hält denselben Turn offen; die maximale Stilledauer garantiert trotzdem einen Abschluss.
val modelDir = ModelManager.ensureModels(context, enableSmartTurn = true)
val pipeline = SpeechPipeline(
SpeechConfig(
modelDir = modelDir,
enableSmartTurn = true,
turnCompletionThreshold = 0.5f,
turnCompletionMaxSilenceSec = 2.0f,
)
)
Die optionale Funktion ergänzt ein fest gepinntes 11,1-MB-int8-Modell; die Inferenz bleibt vollständig offline. Smart Turn wurde von Pipecat/Daily entwickelt und steht unter BSD-2-Clause.
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) | 891 MB |
| Kokoro-82M (INT8) | Text-zu-Sprache (8 Sprachen) | 330 MB |
| Silero VAD v5 | Sprachaktivitätserkennung | 2 MB |
| DeepFilterNet3 | Rauschunterdrückung | 8 MB |
Quellcode: github.com/soniqo/speech-android
Nächste Schritte
- Benchmarks — Android-Inferenzleistung
- Linux C API — Einrichtung für eingebettetes Linux