Kokoro TTS
Kokoro-82M, ISTFTNet vocoder'lı StyleTTS 2 tabanlı hafif ve otoregresif olmayan bir metinden konuşma modelidir. CoreML aracılığıyla tamamen Neural Engine üzerinde çalışır ve metin girişinden tek bir forward pass'te doğal 24 kHz konuşma üretir.
Kokoro-82M cihaz üstü iOS dağıtımı için tasarlanmıştır. 82M parametre (1 bucket, INT8 ile ~80 MB) ile iPhone ve iPad'e rahatça sığar. CoreML, GPU'yu diğer görevlere bırakacak şekilde Neural Engine üzerinde çalışır.
Desteklenen diller
| Dil | Kod | Örnek sesler |
|---|---|---|
| İngilizce (ABD) | en | af_heart, am_adam, af_sky |
| İngilizce (Birleşik Krallık) | en | bf_emma, bm_george |
| İspanyolca | es | ef_dora |
| Fransızca | fr | ff_siwis |
| Hintçe | hi | hf_alpha, hm_omega |
| İtalyanca | it | if_sara |
| Japonca | ja | jf_alpha, jm_omega |
| Portekizce | pt | pf_dora |
| Çince | zh | zf_xiaobei, zm_yunjian |
| Korece | ko | kf_somi |
Toplam 50 hazır ses. Ses adlandırma kuralı: [language_prefix][gender]_[name] — örneğin, af_heart = Amerikan Kadın "Heart", if_sara = İtalyan Kadın "Sara".
Ses kodları referansı
Her Kokoro voice ID aynı kalıbı izler: tek harfli bir dil öneki, tek harfli bir cinsiyet kodu, ardından alt çizgi ve ses adı. Hedef dili doğru önekle eşlemek için aşağıdaki tabloyu kullanın.
Dil öneki tablosu
| Önek | Dil | Yerel | Cinsiyetler |
|---|---|---|---|
a | İngilizce | Amerikan (en-US) | af_, am_ |
b | İngilizce | İngiliz (en-GB) | bf_, bm_ |
e | İspanyolca | (es) | ef_, em_ |
f | Fransızca | (fr-FR) | ff_ |
h | Hintçe | (hi) | hf_, hm_ |
i | İtalyanca | (it) | if_, im_ |
j | Japonca | (ja) | jf_, jm_ |
k | Korece | (ko) | kf_ |
p | Portekizce | Brezilya (pt-BR) | pf_, pm_ |
z | Çince | Mandarin (zh) | zf_, zm_ |
Dile göre tüm sesler
İngilizce — Amerikan (af_*, am_*)
Kadın: af_alloy, af_aoede, af_bella, af_heart (varsayılan), af_jessica, af_kore, af_nicole, af_nova, af_river, af_sarah, af_sky
Erkek: am_adam, am_echo, am_eric, am_fenrir, am_liam, am_michael, am_onyx, am_puck, am_santa
İngilizce — İngiliz (bf_*, bm_*)
Kadın: bf_alice, bf_emma, bf_isabella, bf_lily
Erkek: bm_daniel, bm_fable, bm_george, bm_lewis
İspanyolca (ef_*, em_*)
Kadın: ef_dora
Erkek: em_alex, em_santa
Fransızca (ff_*)
Kadın: ff_siwis
Hintçe (hf_*, hm_*)
Kadın: hf_alpha, hf_beta
Erkek: hm_omega, hm_psi
İtalyanca (if_*, im_*)
Kadın: if_sara
Erkek: im_nicola
Japonca (jf_*, jm_*)
Kadın: jf_alpha, jf_gongitsune, jf_nezumi, jf_tebukuro
Erkek: jm_kumo
Korece (kf_*)
Kadın: kf_somi
Portekizce — Brezilya (pf_*, pm_*)
Kadın: pf_dora
Erkek: pm_alex, pm_santa
Çince — Mandarin (zf_*, zm_*)
Kadın: zf_xiaobei, zf_xiaoni, zf_xiaoxiao, zf_xiaoyi
Erkek: zm_yunjian, zm_yunxi, zm_yunxia, zm_yunyang
Modelle birlikte gelen tüm sesleri yazdırmak için speech kokoro --list-voices komutunu çalıştırın. Voice ID'ler sürümler arasında sabittir — CLI'den --voice çağırırken veya Swift API'ye voice: geçirirken tam dizeyi (ör. if_sara) kullanın.
Mimari
Kokoro 3 aşamalı bir CoreML pipeline'ı kullanır. Sampling döngüsü yoktur — tüm aşamalar otoregresif olmayan forward pass'lardır ve 1. ile 2. aşama arasında Swift tarafında bir hizalama adımı vardır.
3 aşamalı pipeline
| Aşama | Model | Giriş | Çıkış |
|---|---|---|---|
| 1. Duration | duration.mlmodelc | Fonem token'ları + ses embedding'i + hız | Süreler, prozodi özellikleri, metin kodlaması |
| — | Swift hizalaması | Süreler + 1. aşama özellikleri | Hizalanmış prozodi ve metin özellikleri |
| 2. Prosody | prosody.mlmodelc | Hizalanmış prozodi özellikleri + stil | F0 (perde) + gürültü tahminleri |
| 3. Decoder | decoder_*.mlmodelc | Hizalanmış metin + F0 + gürültü + stil | 24 kHz ses dalga formu |
Fonem bucket'ları (duration modeli)
Duration modeli sıralanmış giriş şekilleri kullanır. Giriş, sığacağı en küçük bucket'a doldurulur:
| Bucket | Maks fonem | Kullanım alanı |
|---|---|---|
| p16 | 16 | Kısa ifadeler |
| p32 | 32 | Kısa cümleler |
| p64 | 64 | Orta cümleler |
| p128 | 128 | Uzun cümleler |
Decoder bucket'ları
Farklı maksimum ses uzunlukları için sabit şekilli decoder modelleri (her frame 24 kHz'de 600 örnek):
| Bucket | Maks frame | Maks ses |
|---|---|---|
decoder_5s | 200 | 5.0s |
decoder_10s | 400 | 10.0s |
decoder_15s | 600 | 15.0s |
iOS 18+ / macOS 15+ gerektirir.
Phonemizer
Metin, üç katmanlı bir pipeline ile fonem token'larına dönüştürülür — tamamı Apache-2.0 lisanslıdır, GPL bağımlılığı yoktur:
- Sözlük araması — Heteronim desteğiyle ABD ve Birleşik Krallık İngilizcesi telaffuz sözlükleri
- Sonek köklendirme — Bilinen sonekler için morfolojik ayrıştırma (ör. "-ing", "-tion")
- BART G2P — Sözlük dışı kelimeler için ayrı bir CoreML encoder-decoder modeli kullanan sinirsel grapheme-to-phoneme yedeklemesi
Model ağırlıkları
| Bileşen | Boyut | Format |
|---|---|---|
| Duration modeli | ~39 MB | .mlmodelc |
| Prosody modeli | ~17 MB | .mlmodelc |
| Decoder modelleri (3 bucket) | ~107 MB her biri | .mlmodelc |
| Ses embedding'leri (54 ses) | ~0.3 MB | JSON (256 boyutlu Float32) |
| G2P encoder + decoder | ~1.5 MB | .mlmodelc |
| Sözlükler + vocab | ~6 MB | JSON |
| Toplam (1 decoder) | ~170 MB |
Performans
| Metrik | Değer |
|---|---|
| Parametreler | 82M |
| Çıkarım arka ucu | CoreML (Neural Engine) |
| Çıkarım RTFx | ~0.7 (gerçek zamandan daha hızlı) |
| Çıkış örnekleme frekansı | 24 kHz |
| Ağırlık belleği | ~170 MB (1 decoder bucket) |
Token'ları adım adım üreten Qwen3-TTS ve CosyVoice3'ten farklı olarak, Kokoro sampling döngüsü olmayan 3 aşamalı bir pipeline kullanır. Tüm aşamalar deterministik forward pass'lardır.
CLI kullanımı
speech kokoro "Hello, world!" --voice af_heart --output hello.wav
Seçenekler
| Seçenek | Varsayılan | Açıklama |
|---|---|---|
<text> | Sentezlenecek metin | |
--voice | af_heart | Ses hazır ayarı adı |
--language | en | Dil kodu: en, es, fr, hi, it, ja, pt, zh, ko, de |
--output, -o | kokoro_output.wav | Çıkış WAV dosyası yolu |
--list-voices | Kullanılabilir tüm sesleri listele ve çık | |
--model, -m | HuggingFace model ID |
Örnekler
# 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
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)
Hesaplama birimi geçersiz kılma
fromPretrained(computeUnits:) ana CoreML modelini hangi donanımın çalıştıracağını seçer. Varsayılan (.all), Core ML'in Neural Engine'i tercih etmesine olanak tanır ki bu, desteklenen her cihazda en hızlı yoldur. ANE'yi atlamak için, ANE derleyicisinin bu model için yanlış çıktı ürettiği platformlarda yedek olarak .cpuAndGPU geçirin.
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 ne zaman kullanılır
| Kullanım alanı | Önerilen TTS |
|---|---|
| iOS uygulaması, hafif, pil dostu | Kokoro (CoreML, 82M params, ~170 MB) |
| En yüksek kalite, streaming, ses klonlama | Qwen3-TTS (MLX, 600M params, ~1.7 GB) |
| Çok dilli streaming, 9 dil | CosyVoice3 (MLX, 500M params, ~1.2 GB) |
| Tam dupleks sesli diyalog | PersonaPlex (MLX, 7B params, ~5.5 GB) |
Lisans
- Model ağırlıkları: Apache-2.0 (hexgrad/Kokoro-82M)
- CoreML dönüşümü: Apache-2.0 (aufklarer/Kokoro-82M-CoreML)
- Sözlükler ve G2P: Apache-2.0