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

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
Wichtig

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.

Einschränkung

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.

ModellAufgabeGröße
Parakeet TDT v3 (INT8)Sprache-zu-Text (114 Sprachen)490 MB
Kokoro-82M (INT8)Text-zu-Sprache (7 Sprachen)89 MB
Silero VAD v5Sprachaktivitätserkennung1,2 MB
DeepFilterNet3 (FP16)Rauschunterdrückung4,2 MB

Quellcode: github.com/soniqo/speech-android

Nächste Schritte