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

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
Quan trọng

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.

Lưu ý

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ìnhTá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 v5Phát hiện hoạt động giọng nói1.2 MB
DeepFilterNet3 (FP16)Khử nhiễu4.2 MB

Mã nguồn: github.com/soniqo/speech-android

Bước tiếp theo