Primeiros passos — Android

O speech-android oferece processamento de fala no dispositivo para Android usando ONNX Runtime. O pipeline executa VAD + STT + TTS com suporte a barge-in, totalmente offline após o download do modelo.

Requisitos

Baixe o aplicativo de demonstração pré-compilado para experimentar imediatamente:

Dependência Gradle

Adicione o SDK ao seu build.gradle.kts:

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

Início rápido

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

Os modelos são baixados automaticamente do HuggingFace no primeiro uso (~1,2 GB no total). Após o download inicial, toda a inferência roda totalmente offline.

Entrada de voz do sistema (RecognitionService)

O SDK fornece um SpeechRecognitionService pronto para uso que se conecta à API SpeechRecognizer do framework do Android — sem código a escrever. Uma vez que seu app é selecionado como o reconhecedor de voz padrão, qualquer app de terceiros chamando SpeechRecognizer.createSpeechRecognizer(context) (sem ComponentName) obtém STT totalmente no dispositivo através do seu pipeline.

1. Declare RECORD_AUDIO e o serviço em 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. Adicione 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. Defina o serviço como padrão do sistema (Configurações → Sistema → Idiomas e entrada → Seletor de entrada de voz no Android puro, ou via adb):

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

4. Verifique executando a tela Recognizer test do app demo, que chama SpeechRecognizer.createSpeechRecognizer(ctx) (sem componente) e registra cada callback do framework — útil para confirmar o round-trip do binder sem precisar do logcat.

O serviço implementa onCheckRecognitionSupport (API 33+) retornando os 27 idiomas BCP-47 cobertos pelo Parakeet TDT v3, marcados como installedOnDeviceLanguage quando os modelos estão presentes (ou pendingOnDeviceLanguage enquanto eles são baixados). O foco de áudio é adquirido com AUDIOFOCUS_GAIN_TRANSIENT pela duração de uma sessão.

Limitação

Gboard, Samsung Keyboard e Google Assistant agrupam seus próprios reconhecedores e ignoram o padrão do sistema. Apps que chamam explicitamente a API SpeechRecognizer do framework (ou constroem sua própria UI em cima dela) são os que passam pelo seu serviço.

Modelos

Todos os modelos rodam via ONNX Runtime com aceleração NNAPI. Quantizados em INT8 por padrão.

ModeloTarefaTamanho
Parakeet TDT v3 (INT8)Fala para texto (114 idiomas)490 MB
Kokoro-82M (INT8)Texto para fala (7 idiomas)89 MB
Silero VAD v5Detecção de atividade de voz1.2 MB
DeepFilterNet3 (FP16)Cancelamento de ruído4.2 MB

Código-fonte: github.com/soniqo/speech-android

Próximos passos