Bắt đầu — Android
speech-android cung cấp xử lý giọng nói trên thiết bị cho Android dựa trên ONNX Runtime. Pipeline chạy VAD + STT + TTS có hỗ trợ ngắt lời (barge-in), hoàn toàn ngoại tuyến sau khi tải mô hình.
Yêu cầu
- Android 8+ (API 26)
- Kiến trúc arm64-v8a
Tải ứng dụng demo đã dựng sẵn để thử ngay:
Phụ thuộc Gradle
Thêm SDK vào build.gradle.kts của bạn:
implementation("audio.soniqo:speech:0.0.9")
Khởi động nhanh
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
Các mô hình tự tải từ HuggingFace ở lần dùng đầu tiên (~1.2 GB tổng cộng). Sau lần tải đầu, mọi suy luận đều chạy hoàn toàn ngoại tuyến.
Nhập giọng nói của hệ thống (RecognitionService)
SDK đi kèm SpeechRecognitionService dựng sẵn, cắm thẳng vào API SpeechRecognizer trong framework của Android — không phải viết thêm dòng mã nào. Khi ứng dụng của bạn được chọn làm trình nhận dạng giọng nói mặc định, mọi ứng dụng bên thứ ba gọi SpeechRecognizer.createSpeechRecognizer(context) (không truyền ComponentName) đều dùng STT hoàn toàn trên thiết bị thông qua pipeline của bạn.
1. Khai báo RECORD_AUDIO và service trong 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. Thêm 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. Đặt service làm mặc định của hệ thống (Cài đặt → Hệ thống → Ngôn ngữ và nhập → Trình chọn nhập giọng nói trên Android gốc, hoặc qua adb):
adb shell settings put secure voice_recognition_service \
your.package/audio.soniqo.speech.service.SpeechRecognitionService
4. Kiểm tra bằng cách mở màn hình Recognizer test trong ứng dụng demo, nó gọi SpeechRecognizer.createSpeechRecognizer(ctx) (không kèm component) và ghi lại mọi callback của framework — tiện để xác nhận round-trip qua binder mà không cần logcat.
Service triển khai onCheckRecognitionSupport (API 33+), trả về 27 ngôn ngữ BCP-47 mà Parakeet TDT v3 hỗ trợ, được đánh dấu installedOnDeviceLanguage khi mô hình đã có sẵn (hoặc pendingOnDeviceLanguage khi đang tải). Audio focus được lấy với AUDIOFOCUS_GAIN_TRANSIENT trong suốt phiên làm việc.
Gboard, Samsung Keyboard và Google Assistant đi kèm trình nhận dạng riêng và bỏ qua mặc định của hệ thống. Các ứng dụng gọi rõ ràng API SpeechRecognizer của framework (hoặc dựng UI riêng trên đó) mới đi qua service của bạn.
Mô hình
Tất cả mô hình chạy trên ONNX Runtime với gia tốc NNAPI. Mặc định lượng tử hóa INT8.
| Mô hình | Tác vụ | Kích thước |
|---|---|---|
| Parakeet TDT v3 (INT8) | Giọng nói thành văn bản (114 ngôn ngữ) | 490 MB |
| Kokoro-82M (INT8) | Văn bản thành giọng nói (7 ngôn ngữ) | 89 MB |
| Silero VAD v5 | Phát hiện hoạt động giọng nói | 1.2 MB |
| DeepFilterNet3 (FP16) | Khử nhiễu | 4.2 MB |
Mã nguồn: github.com/soniqo/speech-android
Bước tiếp theo
- Benchmarks — hiệu năng suy luận trên Android
- API C cho Linux — thiết lập trên Linux nhúng