เริ่มต้น — Android

speech-android มอบการประมวลผลเสียงพูดแบบบนอุปกรณ์สำหรับ Android โดยใช้ ONNX Runtime ไปป์ไลน์รัน VAD + STT + TTS พร้อมรองรับการขัดจังหวะ (barge-in) ทำงานออฟไลน์อย่างสมบูรณ์หลังจากดาวน์โหลดโมเดลแล้ว

ข้อกำหนด

ดาวน์โหลดแอปสาธิตที่สร้างไว้ล่วงหน้าเพื่อทดลองใช้ทันที:

Gradle Dependency

เพิ่ม SDK เข้าไปใน build.gradle.kts ของคุณ:

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

เริ่มต้นอย่างรวดเร็ว

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
สำคัญ

โมเดลจะดาวน์โหลดอัตโนมัติจาก HuggingFace ในการใช้งานครั้งแรก (รวมประมาณ 1.2 GB) หลังจากการดาวน์โหลดครั้งแรก การ inference ทั้งหมดทำงานออฟไลน์อย่างสมบูรณ์

การป้อนเสียงของระบบ (RecognitionService)

SDK มาพร้อม SpeechRecognitionService สำเร็จรูปที่เสียบเข้ากับ API SpeechRecognizer ของ framework Android โดยตรง — ไม่ต้องเขียนโค้ดเพิ่ม เมื่อแอปของคุณถูกเลือกเป็นตัวรู้จำเสียงเริ่มต้น แอปบุคคลที่สามใดที่เรียก SpeechRecognizer.createSpeechRecognizer(context) (โดยไม่มี ComponentName) จะได้รับ STT แบบบนอุปกรณ์ทั้งหมดผ่านไปป์ไลน์ของคุณ

1. ประกาศ RECORD_AUDIO และ service ใน 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. เพิ่ม 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. ตั้ง service เป็นค่าเริ่มต้นของระบบ (Settings → System → Languages & input → Voice input picker บน Android สต็อก หรือผ่าน adb):

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

4. ตรวจสอบโดยเปิดหน้าจอ Recognizer test ในแอปสาธิต ซึ่งเรียก SpeechRecognizer.createSpeechRecognizer(ctx) (โดยไม่มี component) และบันทึก callback ทุกอันของ framework — มีประโยชน์ในการยืนยัน round-trip ผ่าน binder โดยไม่ต้องใช้ logcat

Service ใช้งาน onCheckRecognitionSupport (API 33+) คืนค่า 27 ภาษา BCP-47 ที่ Parakeet TDT v3 รองรับ ทำเครื่องหมายเป็น installedOnDeviceLanguage เมื่อโมเดลพร้อมใช้ (หรือ pendingOnDeviceLanguage ขณะที่กำลังดาวน์โหลด) โฟกัสเสียงถูกขอด้วย AUDIOFOCUS_GAIN_TRANSIENT ตลอดช่วงเวลาของเซสชัน

หมายเหตุ

Gboard, Samsung Keyboard และ Google Assistant มาพร้อมตัวรู้จำของตัวเองและข้ามค่าเริ่มต้นของระบบ แอปที่เรียก API SpeechRecognizer ของ framework โดยตรง (หรือสร้าง UI ของตัวเองบนนั้น) คือแอปที่ส่งผ่าน service ของคุณ

โมเดล

โมเดลทั้งหมดทำงานผ่าน ONNX Runtime พร้อมการเร่งความเร็วด้วย NNAPI ใช้การ quantize แบบ INT8 เป็นค่าเริ่มต้น

โมเดลงานขนาด
Parakeet TDT v3 (INT8)เสียงพูดเป็นข้อความ (114 ภาษา)490 MB
Kokoro-82M (INT8)ข้อความเป็นเสียงพูด (7 ภาษา)89 MB
Silero VAD v5การตรวจจับกิจกรรมเสียงพูด1.2 MB
DeepFilterNet3 (FP16)การตัดเสียงรบกวน4.2 MB

ซอร์สโค้ด: github.com/soniqo/speech-android

ขั้นตอนถัดไป