Kokoro TTS — Android
Kokoro-82M เป็นโมเดลสังเคราะห์เสียงพูดจากข้อความขนาดเล็ก ไม่ใช่ autoregressive ที่รันบน Android ผ่าน ONNX Runtime ผลิตเสียงพูดธรรมชาติ 24 kHz ด้วย 50 เสียง preset ใน 8 ภาษา
ภาษาที่รองรับ
| ภาษา | รหัส | เสียงตัวอย่าง |
|---|---|---|
| อังกฤษ (สหรัฐฯ) | en | af_heart, am_adam, af_sky |
| อังกฤษ (สหราชอาณาจักร) | en | bf_emma, bm_george |
| สเปน | es | ef_dora |
| ฝรั่งเศส | fr | ff_siwis |
| ฮินดี | hi | hf_alpha, hm_omega |
| อิตาลี | it | if_sara |
| ญี่ปุ่น | ja | jf_alpha, jm_omega |
| โปรตุเกส | pt | pf_dora |
| จีน | zh | zf_xiaobei, zm_yunjian |
| เยอรมัน | de | dm_martin, df_victoria (ชุดเสียง) |
รวม 50 เสียง preset ทั้งหมด แบบแผนการตั้งชื่อเสียง: [language][gender]_[name] — เช่น af_heart = หญิงอเมริกัน "Heart"
ชุดเสียงภาษาเยอรมัน
ภาษาเยอรมันไม่ใช่เสียงในชุดหลายภาษาด้านบน: เสียงเยอรมันทั้งสองเป็นการปรับแต่ง Kokoro-82M โดย kikiri-tts แต่ละเสียงเป็นชุดน้ำหนักแยกขนาด 162 MB ที่ฝึกด้วยหน่วยเสียงภาษาเยอรมันเท่านั้น เลือกหนึ่งชุดด้วย KokoroPack ตอนดาวน์โหลด แล้วสังเคราะห์ด้วย language = "de" แต่ละชุดมีแคชของตัวเอง จึงติดตั้งภาษาอังกฤษและเยอรมันควบคู่กันได้
| ชุด | เสียง | ดาวน์โหลด |
|---|---|---|
KokoroPack.GERMAN_MARTIN | dm_martin (ชาย) | soniqo/Kokoro-82M-German-Martin-ONNX (~170 MB) |
KokoroPack.GERMAN_VICTORIA | df_victoria (หญิง) | soniqo/Kokoro-82M-German-Victoria-ONNX (~170 MB) |
val modelDir = ModelManager.ensureTtsModels(
context,
ttsModel = TtsModel.KOKORO_SHORT_TURN,
kokoroPack = KokoroPack.GERMAN_MARTIN, // or GERMAN_VICTORIA
)
val tts = SpeechSynthesizer(SpeechSynthesizerConfig(modelDir = modelDir))
val audio = tts.synthesize("Am 3. Oktober um 18:30 Uhr kostet es 12,80 €.", "de")ตัวเลข ลำดับที่ วันที่ เวลา จำนวนเงิน หน่วย และตัวย่อทั่วไปจะถูกอ่านเป็นคำบนอุปกรณ์ ส่วนคำศัพท์มาจากพจนานุกรมภาษาเยอรมัน 50k คำ พร้อมการผันคำ คำประสม และกฎสำรอง เอนจิน TTS ของระบบ (SpeechTextToSpeechService) มีเสียง Martin เป็น de-DE ควบคู่กับ en-US
ไฟล์โมเดล
| ไฟล์ | ขนาด |
|---|---|
kokoro-e2e.onnx + .onnx.data | ~330 MB |
voices.bin | Embedding เสียง |
| พจนานุกรมหน่วยเสียง | ข้อมูลการออกเสียงเฉพาะภาษา |
HuggingFace: soniqo/Kokoro-82M-ONNX
ประสิทธิภาพ
| ตัวชี้วัด | ค่า |
|---|---|
| พารามิเตอร์ | 82M |
| Backend การประมวลผล | ONNX Runtime |
| อัตราการสุ่มเอาต์พุต | 24 kHz |
Phonemizer
ข้อความถูกแปลงเป็นโทเค็นหน่วยเสียงโดยใช้ phonemizer ที่อิงพจนานุกรมพร้อมรองรับเฉพาะภาษา การ implement บน Android รวม phonemizer สำหรับภาษาอังกฤษ ฝรั่งเศส สเปน อิตาลี โปรตุเกส ฮินดี ญี่ปุ่น และจีน
การผสาน pipeline
บน Android, Kokoro TTS เป็นส่วนหนึ่งของ SpeechPipeline หลังจาก STT ถอดเสียงพูด ข้อความจะถูกแปลงเป็นหน่วยเสียงแล้วสังเคราะห์กลับเป็นเสียง pipeline จัดการกระแสทั้งหมด VAD → STT → TTS อัตโนมัติ
val modelDir = ModelManager.ensureModels(context)
val pipeline = SpeechPipeline(SpeechConfig(modelDir = modelDir))
pipeline.events.collect { event ->
when (event) {
is SpeechEvent.TranscriptionCompleted -> println(event.text)
else -> {}
}
}
pipeline.start()
pipeline.pushAudio(samples) // 16kHz mono float32
ซอร์สโค้ด: github.com/soniqo/speech-android