Kokoro TTS

Kokoro-82M ist ein leichtgewichtiges, nicht-autoregressives Text-zu-Sprache-Modell, das auf StyleTTS 2 mit einem ISTFTNet-Vocoder basiert. Es läuft vollständig über CoreML auf der Neural Engine und erzeugt in einem einzigen Forward-Pass natürliche 24-kHz-Sprache aus Texteingaben.

iOS-tauglich

Kokoro-82M ist für die On-Device-Bereitstellung auf iOS entworfen. Mit 82M Parametern (~80 MB mit 1 Bucket, INT8) passt es bequem auf iPhone und iPad. CoreML läuft auf der Neural Engine und lässt die GPU für andere Aufgaben frei.

Unterstützte Sprachen

SpracheCodeBeispielstimmen
Englisch (US)enaf_heart, am_adam, af_sky
Englisch (UK)enbf_emma, bm_george
Spanischesef_dora
Französischfrff_siwis
Hindihihf_alpha, hm_omega
Italienischitif_sara
Japanischjajf_alpha, jm_omega
Portugiesischptpf_dora
Chinesischzhzf_xiaobei, zm_yunjian
Koreanischkokf_somi

Insgesamt 50 voreingestellte Stimmen. Namenskonvention: [language_prefix][gender]_[name] — z. B. af_heart = amerikanische Frau „Heart“, if_sara = italienische Frau „Sara“.

Sprachcode-Referenz

Jede Kokoro-Stimm-ID folgt demselben Muster: ein einbuchstabiges Sprachpräfix, ein einbuchstabiger Geschlechtscode, ein Unterstrich und dann der Stimmname. Verwenden Sie die untenstehende Tabelle, um Ihre Zielsprache dem richtigen Präfix zuzuordnen.

Sprachpräfix-Tabelle

PräfixSpracheLocaleGeschlechtssuffixe
aEnglischAmerikanisch (en-US)af_, am_
bEnglischBritisch (en-GB)bf_, bm_
eSpanisch(es)ef_, em_
fFranzösisch(fr-FR)ff_
hHindi(hi)hf_, hm_
iItalienisch(it)if_, im_
jJapanisch(ja)jf_, jm_
kKoreanisch(ko)kf_
pPortugiesischBrasilianisch (pt-BR)pf_, pm_
zChinesischMandarin (zh)zf_, zm_

Alle Stimmen nach Sprache

Englisch — Amerikanisch (af_*, am_*)

Weiblich: af_alloy, af_aoede, af_bella, af_heart (Standard), af_jessica, af_kore, af_nicole, af_nova, af_river, af_sarah, af_sky
Männlich: am_adam, am_echo, am_eric, am_fenrir, am_liam, am_michael, am_onyx, am_puck, am_santa

Englisch — Britisch (bf_*, bm_*)

Weiblich: bf_alice, bf_emma, bf_isabella, bf_lily
Männlich: bm_daniel, bm_fable, bm_george, bm_lewis

Spanisch (ef_*, em_*)

Weiblich: ef_dora
Männlich: em_alex, em_santa

Französisch (ff_*)

Weiblich: ff_siwis

Hindi (hf_*, hm_*)

Weiblich: hf_alpha, hf_beta
Männlich: hm_omega, hm_psi

Italienisch (if_*, im_*)

Weiblich: if_sara
Männlich: im_nicola

Japanisch (jf_*, jm_*)

Weiblich: jf_alpha, jf_gongitsune, jf_nezumi, jf_tebukuro
Männlich: jm_kumo

Koreanisch (kf_*)

Weiblich: kf_somi

Portugiesisch — Brasilianisch (pf_*, pm_*)

Weiblich: pf_dora
Männlich: pm_alex, pm_santa

Chinesisch — Mandarin (zf_*, zm_*)

Weiblich: zf_xiaobei, zf_xiaoni, zf_xiaoxiao, zf_xiaoyi
Männlich: zm_yunjian, zm_yunxi, zm_yunxia, zm_yunyang

Stimmen zur Laufzeit auflisten

Führen Sie speech kokoro --list-voices aus, um alle aktuell mit dem Modell gebündelten Stimmen aufzulisten. Stimmen-IDs sind über Releases hinweg stabil — verwenden Sie die exakte Zeichenfolge (z. B. if_sara), wenn Sie --voice über die CLI aufrufen oder voice: an die Swift-API übergeben.

Architektur

Kokoro verwendet eine 3-stufige CoreML-Pipeline. Keine Sampling-Schleife — alle Stufen sind nicht-autoregressive Forward-Passes mit einem Swift-seitigen Alignment-Schritt zwischen den Stufen 1 und 2.

3-Stufen-Pipeline

StufeModellEingabeAusgabe
1. Dauerduration.mlmodelcPhonem-Tokens + Stimmen-Embedding + GeschwindigkeitDauern, Prosodie-Merkmale, Textkodierung
Swift-AlignmentDauern + Merkmale aus Stufe 1Ausgerichtete Prosodie- & Textmerkmale
2. Prosodieprosody.mlmodelcAusgerichtete Prosodie-Merkmale + StilF0 (Tonhöhe) + Rausch-Vorhersagen
3. Decoderdecoder_*.mlmodelcAusgerichteter Text + F0 + Rauschen + Stil24-kHz-Audiowellenform

Phonem-Buckets (Duration-Modell)

Das Duration-Modell verwendet aufgezählte Eingabeformen. Die Eingabe wird auf den kleinsten passenden Bucket aufgefüllt:

BucketMax. PhonemeAnwendungsfall
p1616Kurze Phrasen
p3232Kurze Sätze
p6464Mittlere Sätze
p128128Lange Sätze

Decoder-Buckets

Decoder-Modelle mit fester Form für unterschiedliche maximale Audiolängen (jeder Frame = 600 Samples bei 24 kHz):

BucketMax. FramesMax. Audio
decoder_5s2005,0 s
decoder_10s40010,0 s
decoder_15s60015,0 s

Erfordert iOS 18+ / macOS 15+.

Phonemizer

Text wird über eine dreistufige Pipeline in Phonem-Tokens umgewandelt — alles Apache-2.0-lizenziert, ohne GPL-Abhängigkeiten:

  1. Wörterbuchsuche — Aussprache-Wörterbücher für US-Englisch und britisches Englisch mit Unterstützung für Homographen
  2. Suffix-Stemming — Morphologische Zerlegung für bekannte Suffixe (z. B. „-ing", „-tion")
  3. BART-G2P — Neuronaler Graphem-zu-Phonem-Fallback mit separatem CoreML-Encoder-Decoder-Modell für unbekannte Wörter

Modellgewichte

KomponenteGrößeFormat
Duration-Modell~39 MB.mlmodelc
Prosodie-Modell~17 MB.mlmodelc
Decoder-Modelle (3 Buckets)jeweils ~107 MB.mlmodelc
Stimmen-Embeddings (54 Stimmen)~0,3 MBJSON (256-dim Float32)
G2P-Encoder + Decoder~1,5 MB.mlmodelc
Wörterbücher + Vokabular~6 MBJSON
Gesamt (1 Decoder)~170 MB

Leistung

KennzahlWert
Parameter82M
Inferenz-BackendCoreML (Neural Engine)
Inferenz-RTFx~0,7 (schneller als Echtzeit)
Ausgabe-Abtastrate24 kHz
Gewichtsspeicher~170 MB (1 Decoder-Bucket)
Nicht-autoregressiv

Im Gegensatz zu Qwen3-TTS und CosyVoice3, die Tokens schrittweise erzeugen, verwendet Kokoro eine 3-stufige Pipeline ohne Sampling-Schleife. Alle Stufen sind deterministische Forward-Passes.

CLI-Verwendung

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

Optionen

OptionStandardBeschreibung
<text>Zu synthetisierender Text
--voiceaf_heartName der Stimmvoreinstellung
--languageenSprachcode: en, es, fr, hi, it, ja, pt, zh, ko, de
--output, -okokoro_output.wavPfad der Ausgabe-WAV-Datei
--list-voicesListet alle verfügbaren Stimmen auf und beendet
--model, -mHuggingFace-Modell-ID

Beispiele

# Englisch mit Standardstimme
speech kokoro "Hello, how are you today?" --output hello.wav

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

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

# Alle 50 Stimmen auflisten
speech kokoro --list-voices

Swift-API

import KokoroTTS
import AudioCommon

let tts = try await KokoroTTSModel.fromPretrained()
// Lädt beim ersten Ausführen ~170 MB herunter

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:) selects which hardware runs the main CoreML model. The default (.all) lets Core ML prefer the Neural Engine, which is the fastest path on every supported device. Pass .cpuAndGPU to bypass the ANE as a fallback on platforms where the ANE compiler produces incorrect output for this model.

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)

Wann Kokoro verwenden

AnwendungsfallEmpfohlenes TTS
iOS-App, leichtgewichtig, akkuschonendKokoro (CoreML, 82M Parameter, ~170 MB)
Höchste Qualität, Streaming, StimmklonenQwen3-TTS (MLX, 600M Parameter, ~1,7 GB)
Mehrsprachiges Streaming, 9 SprachenCosyVoice3 (MLX, 500M Parameter, ~1,2 GB)
Vollduplex-SprachdialogPersonaPlex (MLX, 7B Parameter, ~5,5 GB)

Lizenz