Kokoro TTS — Android

Kokoro-82M เป็นโมเดลสังเคราะห์เสียงพูดจากข้อความขนาดเล็ก ไม่ใช่ autoregressive ที่รันบน Android ผ่าน ONNX Runtime ผลิตเสียงพูดธรรมชาติ 24 kHz ด้วย 50 เสียง preset ใน 8 ภาษา

ภาษาที่รองรับ

ภาษารหัสเสียงตัวอย่าง
อังกฤษ (สหรัฐฯ)enaf_heart, am_adam, af_sky
อังกฤษ (สหราชอาณาจักร)enbf_emma, bm_george
สเปนesef_dora
ฝรั่งเศสfrff_siwis
ฮินดีhihf_alpha, hm_omega
อิตาลีitif_sara
ญี่ปุ่นjajf_alpha, jm_omega
โปรตุเกสptpf_dora
จีนzhzf_xiaobei, zm_yunjian
เยอรมันdedm_martin, df_victoria (ชุดเสียง)

รวม 50 เสียง preset ทั้งหมด แบบแผนการตั้งชื่อเสียง: [language][gender]_[name] — เช่น af_heart = หญิงอเมริกัน "Heart"

ชุดเสียงภาษาเยอรมัน

ภาษาเยอรมันไม่ใช่เสียงในชุดหลายภาษาด้านบน: เสียงเยอรมันทั้งสองเป็นการปรับแต่ง Kokoro-82M โดย kikiri-tts แต่ละเสียงเป็นชุดน้ำหนักแยกขนาด 162 MB ที่ฝึกด้วยหน่วยเสียงภาษาเยอรมันเท่านั้น เลือกหนึ่งชุดด้วย KokoroPack ตอนดาวน์โหลด แล้วสังเคราะห์ด้วย language = "de" แต่ละชุดมีแคชของตัวเอง จึงติดตั้งภาษาอังกฤษและเยอรมันควบคู่กันได้

ชุดเสียงดาวน์โหลด
KokoroPack.GERMAN_MARTINdm_martin (ชาย)soniqo/Kokoro-82M-German-Martin-ONNX (~170 MB)
KokoroPack.GERMAN_VICTORIAdf_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.binEmbedding เสียง
พจนานุกรมหน่วยเสียงข้อมูลการออกเสียงเฉพาะภาษา

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