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
- Android 8+ (API 26)
- arquitetura arm64-v8a
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
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.
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.
| Modelo | Tarefa | Tamanho |
|---|---|---|
| Parakeet TDT v3 (INT8) | Fala para texto (114 idiomas) | 490 MB |
| Kokoro-82M (INT8) | Texto para fala (7 idiomas) | 89 MB |
| Silero VAD v5 | Detecção de atividade de voz | 1.2 MB |
| DeepFilterNet3 (FP16) | Cancelamento de ruído | 4.2 MB |
Código-fonte: github.com/soniqo/speech-android
Próximos passos
- Benchmarks — desempenho de inferência em Android
- API C para Linux — configuração para Linux embarcado