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.

iOS'a hazır

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

DilKodÖrnek sesler
İngilizce (ABD)enaf_heart, am_adam, af_sky
İngilizce (Birleşik Krallık)enbf_emma, bm_george
İspanyolcaesef_dora
Fransızcafrff_siwis
Hintçehihf_alpha, hm_omega
İtalyancaitif_sara
Japoncajajf_alpha, jm_omega
Portekizceptpf_dora
Çincezhzf_xiaobei, zm_yunjian
Korecekokf_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

ÖnekDilYerelCinsiyetler
aİngilizceAmerikan (en-US)af_, am_
bİngilizceİngiliz (en-GB)bf_, bm_
eİspanyolca(es)ef_, em_
fFransızca(fr-FR)ff_
hHintçe(hi)hf_, hm_
iİtalyanca(it)if_, im_
jJaponca(ja)jf_, jm_
kKorece(ko)kf_
pPortekizceBrezilya (pt-BR)pf_, pm_
zÇinceMandarin (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

Çalışma zamanında sesleri listele

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şamaModelGirişÇıkış
1. Durationduration.mlmodelcFonem token'ları + ses embedding'i + hızSüreler, prozodi özellikleri, metin kodlaması
Swift hizalamasıSüreler + 1. aşama özellikleriHizalanmış prozodi ve metin özellikleri
2. Prosodyprosody.mlmodelcHizalanmış prozodi özellikleri + stilF0 (perde) + gürültü tahminleri
3. Decoderdecoder_*.mlmodelcHizalanmış metin + F0 + gürültü + stil24 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:

BucketMaks fonemKullanım alanı
p1616Kısa ifadeler
p3232Kısa cümleler
p6464Orta cümleler
p128128Uzun cümleler

Decoder bucket'ları

Farklı maksimum ses uzunlukları için sabit şekilli decoder modelleri (her frame 24 kHz'de 600 örnek):

BucketMaks frameMaks ses
decoder_5s2005.0s
decoder_10s40010.0s
decoder_15s60015.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:

  1. Sözlük araması — Heteronim desteğiyle ABD ve Birleşik Krallık İngilizcesi telaffuz sözlükleri
  2. Sonek köklendirme — Bilinen sonekler için morfolojik ayrıştırma (ör. "-ing", "-tion")
  3. 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şenBoyutFormat
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 MBJSON (256 boyutlu Float32)
G2P encoder + decoder~1.5 MB.mlmodelc
Sözlükler + vocab~6 MBJSON
Toplam (1 decoder)~170 MB

Performans

MetrikDeğer
Parametreler82M
Çıkarım arka ucuCoreML (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)
Otoregresif değil

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çenekVarsayılanAçıklama
<text>Sentezlenecek metin
--voiceaf_heartSes hazır ayarı adı
--languageenDil kodu: en, es, fr, hi, it, ja, pt, zh, ko, de
--output, -okokoro_output.wavÇıkış WAV dosyası yolu
--list-voicesKullanılabilir tüm sesleri listele ve çık
--model, -mHuggingFace 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 dostuKokoro (CoreML, 82M params, ~170 MB)
En yüksek kalite, streaming, ses klonlamaQwen3-TTS (MLX, 600M params, ~1.7 GB)
Çok dilli streaming, 9 dilCosyVoice3 (MLX, 500M params, ~1.2 GB)
Tam dupleks sesli diyalogPersonaPlex (MLX, 7B params, ~5.5 GB)

Lisans