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][gender]_[name] — z. B. af_heart = American Female „Heart".

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

audio 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
audio kokoro "Hello, how are you today?" --output hello.wav

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

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

# Alle 50 Stimmen auflisten
audio 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)

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