Kokoro TTS

Kokoro-82M เป็นโมเดลสังเคราะห์เสียงพูดจากข้อความขนาดเล็ก ไม่ใช่ autoregressive ที่อิงจาก StyleTTS 2 พร้อม vocoder ISTFTNet ทำงานทั้งหมดบน Neural Engine ผ่าน CoreML สร้างเสียงพูดธรรมชาติ 24 kHz จากข้อความอินพุตใน forward pass ครั้งเดียว

พร้อมสำหรับ iOS

Kokoro-82M ถูกออกแบบสำหรับการ deploy แบบ on-device บน iOS ด้วย 82M พารามิเตอร์ (~80 MB ด้วย 1 bucket, INT8) มันลงตัวบน iPhone และ iPad CoreML รันบน Neural Engine ทำให้ GPU ว่างสำหรับงานอื่นๆ

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

ภาษารหัสเสียงตัวอย่าง
อังกฤษ (สหรัฐฯ)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
เกาหลีkokf_somi

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

อ้างอิงรหัสเสียง

ทุก voice ID ของ Kokoro ใช้รูปแบบเดียวกัน: คำนำหน้าภาษาตัวอักษรเดียว รหัสเพศตัวอักษรเดียว แล้วตามด้วยขีดล่างและชื่อเสียง ใช้ตารางด้านล่างเพื่อจับคู่ภาษาเป้าหมายกับคำนำหน้าที่ถูกต้อง

ตารางคำนำหน้าภาษา

คำนำหน้าภาษาภูมิภาคเพศ
aอังกฤษอเมริกัน (en-US)af_, am_
bอังกฤษบริติช (en-GB)bf_, bm_
eสเปน(es)ef_, em_
fฝรั่งเศส(fr-FR)ff_
hฮินดี(hi)hf_, hm_
iอิตาลี(it)if_, im_
jญี่ปุ่น(ja)jf_, jm_
kเกาหลี(ko)kf_
pโปรตุเกสบราซิล (pt-BR)pf_, pm_
zจีนแมนดาริน (zh)zf_, zm_

เสียงทั้งหมดตามภาษา

อังกฤษ — อเมริกัน (af_*, am_*)

หญิง: af_alloy, af_aoede, af_bella, af_heart (ค่าเริ่มต้น), af_jessica, af_kore, af_nicole, af_nova, af_river, af_sarah, af_sky
ชาย: am_adam, am_echo, am_eric, am_fenrir, am_liam, am_michael, am_onyx, am_puck, am_santa

อังกฤษ — บริติช (bf_*, bm_*)

หญิง: bf_alice, bf_emma, bf_isabella, bf_lily
ชาย: bm_daniel, bm_fable, bm_george, bm_lewis

สเปน (ef_*, em_*)

หญิง: ef_dora
ชาย: em_alex, em_santa

ฝรั่งเศส (ff_*)

หญิง: ff_siwis

ฮินดี (hf_*, hm_*)

หญิง: hf_alpha, hf_beta
ชาย: hm_omega, hm_psi

อิตาลี (if_*, im_*)

หญิง: if_sara
ชาย: im_nicola

ญี่ปุ่น (jf_*, jm_*)

หญิง: jf_alpha, jf_gongitsune, jf_nezumi, jf_tebukuro
ชาย: jm_kumo

เกาหลี (kf_*)

หญิง: kf_somi

โปรตุเกส — บราซิล (pf_*, pm_*)

หญิง: pf_dora
ชาย: pm_alex, pm_santa

จีน — แมนดาริน (zf_*, zm_*)

หญิง: zf_xiaobei, zf_xiaoni, zf_xiaoxiao, zf_xiaoyi
ชาย: zm_yunjian, zm_yunxi, zm_yunxia, zm_yunyang

รายการเสียงตอนรันไทม์

รัน speech kokoro --list-voices เพื่อพิมพ์ทุกเสียงที่บันเดิลมาพร้อมโมเดลปัจจุบัน Voice ID เสถียรตลอดทุกรีลีส — ใช้สตริงที่แน่นอน (เช่น if_sara) เมื่อเรียก --voice จาก CLI หรือส่ง voice: ไปยัง API Swift

สถาปัตยกรรม

Kokoro ใช้ pipeline CoreML 3 ขั้นตอน ไม่มีลูป sampling — ทุกขั้นตอนเป็น forward pass ที่ไม่ใช่ autoregressive พร้อมขั้นจัดเรียงฝั่ง Swift ระหว่างขั้นที่ 1 และ 2

Pipeline 3 ขั้นตอน

ขั้นตอนโมเดลอินพุตเอาต์พุต
1. Durationduration.mlmodelcโทเค็นหน่วยเสียง + embedding เสียง + ความเร็วระยะเวลา, ฟีเจอร์ ของน้ำเสียง, การเข้ารหัสข้อความ
การจัดเรียงฝั่ง Swiftระยะเวลา + ฟีเจอร์ขั้นที่ 1ฟีเจอร์น้ำเสียงและข้อความที่จัดเรียงแล้ว
2. Prosodyprosody.mlmodelcฟีเจอร์น้ำเสียงที่จัดเรียงแล้ว + styleการทำนาย F0 (ระดับเสียง) + nosie
3. Decoderdecoder_*.mlmodelcข้อความที่จัดเรียงแล้ว + F0 + nosie + styleรูปคลื่นเสียง 24 kHz

Bucket หน่วยเสียง (โมเดล duration)

โมเดล duration ใช้รูปร่างอินพุตแบบ enumerated อินพุตจะถูก pad ไปยัง bucket ที่เล็กที่สุดที่พอดี:

Bucketหน่วยเสียงสูงสุดกรณีการใช้งาน
p1616วลีสั้น
p3232ประโยคสั้น
p6464ประโยคปานกลาง
p128128ประโยคยาว

Bucket ของ decoder

โมเดล decoder รูปร่างคงที่สำหรับความยาวเสียงสูงสุดต่างๆ (แต่ละ frame = 600 ตัวอย่างที่ 24 kHz):

BucketFrame สูงสุดเสียงสูงสุด
decoder_5s2005.0s
decoder_10s40010.0s
decoder_15s60015.0s

ต้องการ iOS 18+ / macOS 15+

Phonemizer

ข้อความถูกแปลงเป็นโทเค็นหน่วยเสียงผ่าน pipeline สามชั้น — ทั้งหมดมีสัญญาอนุญาต Apache-2.0 ไม่มีการพึ่งพา GPL:

  1. การค้นหาในพจนานุกรม — พจนานุกรมการออกเสียงภาษาอังกฤษอเมริกันและบริติชพร้อมรองรับ heteronym
  2. Stemming คำต่อท้าย — การแยกส่วนรูปทางสัณฐานวิทยาสำหรับคำต่อท้ายที่รู้จัก (เช่น "-ing", "-tion")
  3. BART G2P — Fallback grapheme-to-phoneme แบบนิวรัลโดยใช้โมเดล CoreML encoder-decoder แยกต่างหากสำหรับคำที่อยู่นอกพจนานุกรม

น้ำหนักโมเดล

องค์ประกอบขนาดรูปแบบ
โมเดล duration~39 MB.mlmodelc
โมเดล prosody~17 MB.mlmodelc
โมเดล decoder (3 bucket)~107 MB ต่อตัว.mlmodelc
Embedding เสียง (54 เสียง)~0.3 MBJSON (Float32 256 มิติ)
G2P encoder + decoder~1.5 MB.mlmodelc
พจนานุกรม + vocab~6 MBJSON
รวม (1 decoder)~170 MB

ประสิทธิภาพ

ตัวชี้วัดค่า
พารามิเตอร์82M
Backend การประมวลผลCoreML (Neural Engine)
RTFx การประมวลผล~0.7 (เร็วกว่าเวลาจริง)
อัตราการสุ่มเอาต์พุต24 kHz
หน่วยความจำน้ำหนัก~170 MB (1 bucket decoder)
ไม่ใช่ Autoregressive

ต่างจาก Qwen3-TTS และ CosyVoice3 ที่สร้างโทเค็นทีละขั้น Kokoro ใช้ pipeline 3 ขั้นตอนโดยไม่มีลูป sampling ทุกขั้นเป็น forward pass ที่กำหนดผลแน่นอน

การใช้งาน CLI

speech kokoro "Hello, world!" --voice af_heart --output hello.wav

ตัวเลือก

ตัวเลือกค่าเริ่มต้นคำอธิบาย
<text>ข้อความที่จะสังเคราะห์
--voiceaf_heartชื่อ preset เสียง
--languageenรหัสภาษา: en, es, fr, hi, it, ja, pt, zh, ko, de
--output, -okokoro_output.wavเส้นทางไฟล์ WAV เอาต์พุต
--list-voicesรายการเสียงทั้งหมดที่มีและออก
--model, -mModel ID บน HuggingFace

ตัวอย่าง

# English with default voice
speech kokoro "Hello, how are you today?" --output hello.wav

# French
speech kokoro "Bonjour le monde" --voice ff_siwis --language fr --output bonjour.wav

# Japanese
speech kokoro "こんにちは世界" --voice jf_alpha --language ja --output konnichiwa.wav

# List all 50 voices
speech kokoro --list-voices

API Swift

import KokoroTTS
import AudioCommon

let tts = try await KokoroTTSModel.fromPretrained()
// Downloads ~170 MB on first run

let audio = try tts.synthesize(text: "Hello world", voice: "af_heart")
// audio: [Float] — 24 kHz mono PCM

try WAVWriter.write(samples: audio, sampleRate: 24000, to: outputURL)

การกำหนด compute unit

fromPretrained(computeUnits:) เลือกฮาร์ดแวร์ที่จะรันโมเดล CoreML หลัก ค่าเริ่มต้น (.all) ให้ Core ML เลือก Neural Engine เป็นอันดับแรก ซึ่งเป็นเส้นทางที่เร็วที่สุดบนทุกอุปกรณ์ที่รองรับ ส่ง .cpuAndGPU เพื่อข้าม ANE เป็นทางเลือกสำรองบนแพลตฟอร์มที่ compiler ของ ANE ให้ผลลัพธ์ที่ไม่ถูกต้องกับโมเดลนี้

import CoreML
import KokoroTTS

// Default: ANE preferred
let tts = try await KokoroTTSModel.fromPretrained()

// Fallback: bypass the Neural Engine
let tts = try await KokoroTTSModel.fromPretrained(computeUnits: .cpuAndGPU)

เมื่อใดควรใช้ Kokoro

กรณีการใช้งานTTS ที่แนะนำ
แอป iOS, น้ำหนักเบา, ประหยัดแบตเตอรี่Kokoro (CoreML, 82M params, ~170 MB)
คุณภาพสูงสุด, streaming, การโคลนเสียงQwen3-TTS (MLX, 600M params, ~1.7 GB)
Streaming หลายภาษา, 9 ภาษาCosyVoice3 (MLX, 500M params, ~1.2 GB)
สนทนาพูดแบบ full-duplexPersonaPlex (MLX, 7B params, ~5.5 GB)

สัญญาอนุญาต