Terjemahan mesin · Versi asli bahasa Inggris
Kokoro TTS suara dan sampel
Kokoro-82M adalah kelas ringan, bukan-autoregresif dari teks ke-bahasa model berdasarkan StyleTTS 2 dengan vocoder ISTFTNet. Ini berjalan sepenuhnya pada Neural Engine via CoreML, menghasilkan alam 24 pidato kHz dari masukan teks dalam satu tahap ke depan.
Kokoro-82M dirancang untuk on- perangkat iOS penyebaran. 82Parameter M (~80 MB dengan 1 ember, INT8), cocok dengan nyaman di iPhone dan iPad. CoreML berjalan pada Neural Engine, meninggalkan GPU bebas untuk tugas lain.
Bahasa Yang Didukung
| Bahasa | Kode | Contoh Suara |
|---|---|---|
| Inggris (AS) | en | af _ heart, am _ adam, af _ sky |
| Inggris (Britania) | en | bf _ emma, bm _ george |
| Spanyol | es | f _ dora |
| Perancis | fr | ff _ siwi |
| Hindi | hi | hf _ alpha, hm _ omega |
| Italia | it | if _ sara |
| Jepang | ja | jf _ alpha, jm _ kumo |
| Portugis | pt | pf _ dora |
| Cina | zh | zf _ xiaobei, zm _ yunjian |
| Jerman | de | dm _ martin, df _ victoria (kotak suara) |
54 mempreset suara total. Konvensi penamaan suara: [language_prefix][gender]_[name] - mis., af_heart = Wanita Amerika "Heart", if_sara = Wanita Italia "Sara".
Suara Jerman
Jerman disajikan oleh dua bundel suara terpisah, kikiri- tts fine- lagu dari Kokoro-82M dengan satu 313 MB CoreML model per suara, daripada oleh suara dari bundel multibahasa. Muat satu dengan model ID dan disintesis dengan language: "de"Nomor, tanggal, waktu, mata uang dan singkatan dieja pada perangkat, dan kata-kata menyelesaikan melalui kamus 50k-kata Jerman.
| ID Model | Suara |
|---|---|
| aufklarer / Kokoro-82M-German-Martin-CoreML | dm_martin (Laki-laki) |
| aufklarer / Kokoro-82M-German-Victoria-CoreML | df_victoria (perempuan) |
let tts = try await KokoroTTSModel.fromPretrained(modelId: KokoroTTSModel.germanMartinModelId)
let audio = try tts.synthesize(text: "Am 3. Oktober um 18:30 Uhr kostet es 12,80 €.",
voice: "dm_martin", language: "de")speech kokoro --model aufklarer/Kokoro-82M-German-Martin-CoreML --language de "Guten Tag, wie geht es Ihnen?" --output guten-tag.wavSampel suara yang ditampilkan
Singkat MP3 klip yang dihasilkan dengan lokal speech-swift Tabel kode suara penuh tetap di bawah untuk penggunaan paste.
af_heartam_puckbf_alicebm_georgeef_doraem_alexff_siwishf_alphahm_omegaif_saraim_nicolajf_alphajm_kumopf_dorapm_alexzf_xiaobeizm_yunjianReferensi Kode Suara
Setiap Kokoro ID suara mengikuti pola yang sama: satu huruf awalan bahasa, satu huruf kode gender, kemudian sebuah garis bawah dan nama suara. Gunakan tabel di bawah ini untuk memetakan sebuah bahasa target ke awalan yang benar.
Fax bahasa tabel
| Awalan | Bahasa | Locale | Gender |
|---|---|---|---|
a | Inggris | Amerika (en- US) | af_, am_ |
b | Inggris | Inggris (en- GB) | bf_, bm_ |
d | Jerman | (de- DE) | dm_, df_ |
e | Spanyol | (es) | ef_, em_ |
f | Perancis | (fr-FR) | ff_ |
h | Hindi | (Hai) | hf_, hm_ |
i | Italia | (itu) | if_, im_ |
j | Jepang | (ja) | jf_, jm_ |
p | Portugis | Brasil (pt-BR) | pf_, pm_ |
z | Cina | Mandarin (zh) | zf_, zm_ |
Semua suara dengan bahasa
Inggris - Amerika (af_*, am_*)
Perempuan: af_alloy, af_aoede, af_bella, af_heart (bawaan), af_jessica, af_kore, af_nicole, af_nova, af_river, af_sarah, af_sky
Pria: am_adam, am_echo, am_eric, am_fenrir, am_liam, am_michael, am_onyx, am_puck, am_santa
Inggrisbf_*, bm_*)
Perempuan: bf_alice, bf_emma, bf_isabella, bf_lily
Pria: bm_daniel, bm_fable, bm_george, bm_lewis
Spanyol (ef_*, em_*)
Perempuan: ef_dora
Pria: em_alex, em_santa
Perancis (ff_*)
Perempuan: ff_siwis
Hindi (hf_*, hm_*)
Perempuan: hf_alpha, hf_beta
Pria: hm_omega, hm_psi
Italia (if_*, im_*)
Perempuan: if_sara
Pria: im_nicola
Jepang (jf_*, jm_*)
Perempuan: jf_alpha, jf_gongitsune, jf_nezumi, jf_tebukuro
Pria: jm_kumo
Portugis - Brasil (pf_*, pm_*)
Perempuan: pf_dora
Pria: pm_alex, pm_santa
Cina - Mandarin (zf_*, zm_*)
Perempuan: zf_xiaobei, zf_xiaoni, zf_xiaoxiao, zf_xiaoyi
Pria: zm_yunjian, zm_yunxi, zm_yunxia, zm_yunyang
Lari speech kokoro --list-voices untuk mencetak setiap suara yang sedang diacak dengan model. ID suara stabil di seberang rilis - gunakan string yang tepat (misalnya, if_sara) ketika memanggil --voice dari CLI atau lewat voice: ke Swift API.
Arsitektur
Kokoro menggunakan 3-stage CoreML pipeline. Tidak ada loop sampling - semua tahap adalah non-autoregresif maju melewati dengan Swiftt-side alignment langkah antara tahap 1 dan 2.
Baris pipa 3-Tahap
| Tahap | Model | Masukan | Keluaran |
|---|---|---|---|
| 1. Durasi | duration.mlmodelc | Phoneme token + voice embedding + speed | Durasi, fitur palsu, pengkodean teks |
| — | Perataan Swift | Durasi + fitur tahap 1 | Fitur teks palsu & amp; teralign |
| 2. / Prosody. | prosody.mlmodelc | Gaya sederhana + | F0 (pitch) + prediksi kebisingan |
| 3, decoder. | decoder_*.mlmodelc | Teks Aligned + F0 + noise + style | Bentuk gelombang audio 24 kHz |
Buket Phoneme (Model Durasi)
Model durasi menggunakan bentuk masukan yang dienumerated. Masukan padded ke ember terkecil yang cocok:
| Bucket | Telepon Max | Gunakan Kasus |
|---|---|---|
| p16 | 16 | Frasa pendek |
| p32 | 32 | Kalimat pendek |
| p64 | 64 | Kalimat medium |
| p128 | 128 | Kalimat panjang |
Buket Decoder
Model decoder berbentuk fixed- untuk panjang audio maksimum yang berbeda (setiap frame = 600 contoh di 24 kHz):
| Bucket | Max Frames | Audio Max |
|---|---|---|
decoder_5s | 200 | 5.0s |
decoder_10s | 400 | 10.0s |
decoder_15s | 600 | 15.0s |
Memerlukan iOS 18+ / macOS 15+.
Phonemizer
Teks dikonversi ke foneme token melalui pipa tiga tingkat - semua Apache-2.0 berlisensi, tidak ada ketergantungan GPL:
- Pencarian dialog - US English and British English pengucapan kamus dengan dukungan heteronym
- Stemming suffix - Dekomposisi morfologi untuk akhiran yang dikenal (mis., "-ing", "-tion")
- BART G2P - Neural grapheme -to -foneme fallback menggunakan terpisah CoreML encoder- model decoder untuk keluar -of -kosakata kata
Pengucapan Gubahan
Nouns yang tepat di luar yang dikirim kamus jatuh melalui tingkat 3, di mana BART menebak dari Inggris aturan ejaan - jadi bukan-nama Anglo keluar salah (Tatiana menjadi tˈitiəniənə). addPronunciations Suntik word -> IPA entri di depan dari tingkat 1:
let tts = try await KokoroTTSModel.fromPretrained()
tts.addPronunciations(["tatiana": "tɑtiˈɑnə"])
Kunci dicocokkan dengan lowercased dan harus berupa kata tunggal - teks dibagi pada whitespace dan tanda baca sebelum resolusi, sehingga kunci berisi ruang, hyphen, atau tanda kutip tidak pernah melihat. IPA harus menggunakan simbol dari kosa model; apa pun yang lain diam-diam dijatuhkan di tokenization. Aktifkan ke jalur Inggris saja - zh, ja, it, fr, es, pt, dan hi pilih fonemizers yang berdedikasi yang tidak pernah berkonsultasi dengan kamus. Pencarian tidak terkunci, jadi masukan register sebelum sintesis mulai berjalan secara kontemporer pada model yang sama.
Model Weights
| Komponen | Ukuran | Format |
|---|---|---|
| Model Durasi | ~ 39 MB | .mlmodelc |
| Model Prosody | ~ 17 MB | .mlmodelc |
| Model decoder (3 ember) | ~ 107 MB masing-masing | .mlmodelc |
| Penggelapan suara (54 suara) | ~ 0.3 MB | JSON (256- dim Float32) |
| G2P enkoder + decoder | ~ 1.5 MB | .mlmodelc |
| Dictionaries + vocab | ~ 6 MB | JSON |
| Total (decoder 1) | ~ 170 MB |
Penampilan
| Metrik | Nilai |
|---|---|
| Parameter | 82M |
| Backend Inferensi | CoreML (Neural Engine) |
| Inferensi RTFx | ~ 0.7 (lebih cepat dari real-time) |
| Laju cuplikan keluaran | 24 kHz |
| Berat memori | ~ 170 MB (1 ember decoder) |
Tidak seperti Qwen3-TTS dan CosyVoice3 yang menghasilkan token step- by- langkah, Kokoro menggunakan 3-stage pipeline tanpa sampling loop. Semua tahap adalah deterministik forward passes.
Penggunaan CLI
speech kokoro "Hello, world!" --voice af_heart --output hello.wav
Opsi
| Opsi | Baku | Deskripsi |
|---|---|---|
<text> | Teks yang akan disintesis | |
--voice | af_heart | Nama awal suara |
--language | en | Kode bahasa: en, es, fr, hi, it, ja, pt, zh, ko, de |
--output, -o | kokoro_output.wav | Path berkas keluaran WAV |
--list-voices | Daftar semua suara yang tersedia dan keluar | |
--model, -m | ID model HuggingFace |
Contoh
# 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 54 voices
speech kokoro --list-voices
Swift API
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 Override
fromPretrained(computeUnits:) memilih perangkat keras mana yang menjalankan model CoreML utama. Baku (baku).all) memungkinkan Core ML lebih memilih Neural Engine, yang merupakan jalur tercepat pada setiap perangkat yang didukung. Pass .cpuAndGPU untuk memotong ANE sebagai fallback pada platform di mana kompiler ANE menghasilkan keluaran yang salah untuk model ini.
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)
Kapan akan menggunakan Kokoro
| Gunakan Kasus | Disarankan TTS |
|---|---|
| Aplikasi iOS, ringan, lemah - efisien | Kokoro (CoreML, 82M params, ~170 MB) |
| Kualitas tertinggi, streaming, suara kloning | Qwen3-TTS (MLX, 600M params, ~1.7 GB) |
| Streaming multibahasa, 9 bahasa | CosyVoice3 (MLX, 500M params, ~1.2 GB) |
| Dialog berbicara full--duplex | PersonaPlex (MLX, 7Params B, ~5.5 GB) |
Lisensi
- Bobot model: Apache-2.0 (hexgrad / Kokoro-82M)
- CoreML konversi: Apache-2.0 (aufklarer / Kokoro-82M-CoreML)
- Dictionaries and G2P: Apache-2.0
Qwen3-ASR speech-to-text · Parakeet TDT speech- to-text · CosyVoice3 voice clone