Kokoro TTS

Kokoro-82M là mô hình tổng hợp giọng nói nhẹ, không tự hồi quy dựa trên StyleTTS 2 với vocoder ISTFTNet. Nó chạy hoàn toàn trên Neural Engine thông qua CoreML, tạo ra giọng nói tự nhiên 24 kHz từ văn bản đầu vào trong một forward pass duy nhất.

Sẵn sàng cho iOS

Kokoro-82M được thiết kế cho triển khai on-device trên iOS. Với 82M tham số (~80 MB với 1 bucket, INT8), nó vừa vặn trên iPhone và iPad. CoreML chạy trên Neural Engine, để GPU rảnh rỗi cho các tác vụ khác.

Ngôn ngữ được hỗ trợ

Ngôn ngữGiọng ví dụ
Tiếng Anh (Mỹ)enaf_heart, am_adam, af_sky
Tiếng Anh (Anh)enbf_emma, bm_george
Tiếng Tây Ban Nhaesef_dora
Tiếng Phápfrff_siwis
Tiếng Hindihihf_alpha, hm_omega
Tiếng Ýitif_sara
Tiếng Nhậtjajf_alpha, jm_omega
Tiếng Bồ Đào Nhaptpf_dora
Tiếng Trungzhzf_xiaobei, zm_yunjian
Tiếng Hànkokf_somi

Tổng cộng 50 giọng dựng sẵn. Quy ước đặt tên giọng: [language_prefix][gender]_[name] — ví dụ, af_heart = nữ Mỹ "Heart", if_sara = nữ Ý "Sara".

Tham chiếu mã giọng

Mọi voice ID của Kokoro đều theo cùng một mẫu: tiền tố ngôn ngữ một chữ cái, mã giới tính một chữ cái, rồi gạch dưới và tên giọng. Dùng bảng dưới đây để ánh xạ ngôn ngữ đích sang tiền tố đúng.

Bảng tiền tố ngôn ngữ

Tiền tốNgôn ngữKhu vựcGiới tính
aTiếng AnhMỹ (en-US)af_, am_
bTiếng AnhAnh (en-GB)bf_, bm_
eTiếng Tây Ban Nha(es)ef_, em_
fTiếng Pháp(fr-FR)ff_
hTiếng Hindi(hi)hf_, hm_
iTiếng Ý(it)if_, im_
jTiếng Nhật(ja)jf_, jm_
kTiếng Hàn(ko)kf_
pTiếng Bồ Đào NhaBrazil (pt-BR)pf_, pm_
zTiếng TrungQuan thoại (zh)zf_, zm_

Tất cả giọng theo ngôn ngữ

Tiếng Anh — Mỹ (af_*, am_*)

Nữ: af_alloy, af_aoede, af_bella, af_heart (mặc định), af_jessica, af_kore, af_nicole, af_nova, af_river, af_sarah, af_sky
Nam: am_adam, am_echo, am_eric, am_fenrir, am_liam, am_michael, am_onyx, am_puck, am_santa

Tiếng Anh — Anh (bf_*, bm_*)

Nữ: bf_alice, bf_emma, bf_isabella, bf_lily
Nam: bm_daniel, bm_fable, bm_george, bm_lewis

Tiếng Tây Ban Nha (ef_*, em_*)

Nữ: ef_dora
Nam: em_alex, em_santa

Tiếng Pháp (ff_*)

Nữ: ff_siwis

Tiếng Hindi (hf_*, hm_*)

Nữ: hf_alpha, hf_beta
Nam: hm_omega, hm_psi

Tiếng Ý (if_*, im_*)

Nữ: if_sara
Nam: im_nicola

Tiếng Nhật (jf_*, jm_*)

Nữ: jf_alpha, jf_gongitsune, jf_nezumi, jf_tebukuro
Nam: jm_kumo

Tiếng Hàn (kf_*)

Nữ: kf_somi

Tiếng Bồ Đào Nha — Brazil (pf_*, pm_*)

Nữ: pf_dora
Nam: pm_alex, pm_santa

Tiếng Trung — Quan thoại (zf_*, zm_*)

Nữ: zf_xiaobei, zf_xiaoni, zf_xiaoxiao, zf_xiaoyi
Nam: zm_yunjian, zm_yunxi, zm_yunxia, zm_yunyang

Liệt kê giọng khi chạy

Chạy speech kokoro --list-voices để in tất cả các giọng hiện được đóng gói cùng mô hình. Voice ID ổn định giữa các bản phát hành — dùng chuỗi chính xác (ví dụ if_sara) khi gọi --voice từ CLI hoặc truyền voice: vào API Swift.

Kiến trúc

Kokoro sử dụng pipeline CoreML 3 giai đoạn. Không có vòng lặp sampling — mọi giai đoạn đều là forward pass không tự hồi quy với một bước căn chỉnh phía Swift giữa giai đoạn 1 và 2.

Pipeline 3 giai đoạn

Giai đoạnMô hìnhĐầu vàoĐầu ra
1. Durationduration.mlmodelcToken âm vị + embedding giọng + tốc độThời lượng, đặc trưng ngữ điệu, mã hóa văn bản
Căn chỉnh phía SwiftThời lượng + đặc trưng giai đoạn 1Đặc trưng ngữ điệu và văn bản đã căn chỉnh
2. Prosodyprosody.mlmodelcĐặc trưng ngữ điệu đã căn chỉnh + styleDự đoán F0 (cao độ) + nhiễu
3. Decoderdecoder_*.mlmodelcVăn bản đã căn chỉnh + F0 + nhiễu + styleDạng sóng âm thanh 24 kHz

Bucket âm vị (mô hình duration)

Mô hình duration dùng các hình dạng đầu vào liệt kê. Đầu vào được padding tới bucket nhỏ nhất vừa với nó:

BucketTối đa âm vịTrường hợp sử dụng
p1616Cụm từ ngắn
p3232Câu ngắn
p6464Câu trung bình
p128128Câu dài

Bucket của decoder

Các mô hình decoder hình dạng cố định cho các độ dài âm thanh tối đa khác nhau (mỗi frame = 600 mẫu ở 24 kHz):

BucketTối đa frameTối đa âm thanh
decoder_5s2005.0s
decoder_10s40010.0s
decoder_15s60015.0s

Yêu cầu iOS 18+ / macOS 15+.

Phonemizer

Văn bản được chuyển thành token âm vị qua pipeline ba tầng — tất cả đều có giấy phép Apache-2.0, không có phụ thuộc GPL:

  1. Tra cứu từ điển — Từ điển phát âm tiếng Anh Mỹ và Anh-Anh với hỗ trợ heteronym
  2. Stemming hậu tố — Phân tích hình thái cho các hậu tố đã biết (ví dụ "-ing", "-tion")
  3. BART G2P — Fallback grapheme-to-phoneme bằng nơ-ron qua một mô hình CoreML encoder-decoder riêng cho các từ ngoài từ vựng

Trọng số mô hình

Thành phầnKích thướcĐịnh dạng
Mô hình duration~39 MB.mlmodelc
Mô hình prosody~17 MB.mlmodelc
Mô hình decoder (3 bucket)~107 MB mỗi cái.mlmodelc
Embedding giọng (54 giọng)~0.3 MBJSON (Float32 256 chiều)
G2P encoder + decoder~1.5 MB.mlmodelc
Từ điển + vocab~6 MBJSON
Tổng (1 decoder)~170 MB

Hiệu năng

Chỉ sốGiá trị
Tham số82M
Backend suy luậnCoreML (Neural Engine)
RTFx suy luận~0.7 (nhanh hơn thời gian thực)
Tần số lấy mẫu đầu ra24 kHz
Bộ nhớ trọng số~170 MB (1 bucket decoder)
Không tự hồi quy

Khác với Qwen3-TTS và CosyVoice3 sinh token từng bước, Kokoro dùng pipeline 3 giai đoạn không có vòng lặp sampling. Mọi giai đoạn đều là forward pass tất định.

Sử dụng CLI

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

Tùy chọn

Tùy chọnMặc địnhMô tả
<text>Văn bản cần tổng hợp
--voiceaf_heartTên preset giọng
--languageenMã ngôn ngữ: en, es, fr, hi, it, ja, pt, zh, ko, de
--output, -okokoro_output.wavĐường dẫn file WAV đầu ra
--list-voicesLiệt kê tất cả các giọng có sẵn rồi thoát
--model, -mModel ID trên HuggingFace

Ví dụ

# 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)

Ghi đè compute unit

fromPretrained(computeUnits:) chọn phần cứng nào sẽ chạy mô hình CoreML chính. Mặc định (.all) để Core ML ưu tiên Neural Engine, đây là đường dẫn nhanh nhất trên mọi thiết bị được hỗ trợ. Truyền .cpuAndGPU để bỏ qua ANE như một phương án dự phòng trên các nền tảng mà trình biên dịch ANE tạo ra kết quả không chính xác cho mô hình này.

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)

Khi nào nên dùng Kokoro

Trường hợp sử dụngTTS được đề xuất
App iOS, nhẹ, tiết kiệm pinKokoro (CoreML, 82M params, ~170 MB)
Chất lượng cao nhất, streaming, nhân bản giọng nóiQwen3-TTS (MLX, 600M params, ~1.7 GB)
Streaming đa ngôn ngữ, 9 ngôn ngữCosyVoice3 (MLX, 500M params, ~1.2 GB)
Hội thoại nói full-duplexPersonaPlex (MLX, 7B params, ~5.5 GB)

Giấy phép