Automatische vertaling · Engels origineel
Kokoro TTS stemmen en monsters
Kokoro-82M is een lichtgewicht, niet-autoregressief tekst-naar-spraakmodel op basis van StyleTTS 2 met een ISTFTNet vocoder. Het draait volledig op de Neural Engine via CoreML, waardoor natuurlijke 24 kHz spraak uit tekstinvoer in één enkele vooruitstrevende pas wordt geproduceerd.
Kokoro-82M is ontworpen voor on-device iOS implementatie. Bij 82M-parameters (~80 MB met 1 emmer, INT8) past het comfortabel op iPhone en iPad. CoreML draait op de Neural Engine, waardoor de GPU vrij is voor andere taken.
Ondersteunde talen
| Taal | Rubriek | Voorbeeld Stemmen |
|---|---|---|
| Engels (US) | nl | af_heart, am_adam, af_sky |
| Engels (UK) | nl | bf_emma, bm_george |
| Spaans | es | ef_dora |
| Frans | fr | ff_siwis |
| Hindi | Hallo. | hf_alpha,hm_omega |
| Italiaans | het | if_sara |
| Japans | ja | jf_alfa, jm_kumo |
| Portugees | pt | pf_dora |
| Chinees | zh | zf_xiaobei, zm_yunjian |
| Duits | de | dm_martin, df_victoria (voice packs) |
54 preset voices totaal. Voicename conventie: [language_prefix][gender]_[name] Zo bijvoorbeeld, af_heart = American Female "Hart," if_sara = Italiaanse vrouw "Sara."
Duitse stemmen
Het Duits wordt bediend door twee afzonderlijke single-voice bundels, kikiri-tts fijne tunes van Kokoro-82M met één 313 MB CoreML model per stem, in plaats van door stemmen van de meertalige bundel. Laad één op model-ID en synthesizer met language: "de". Getallen, data, tijden, valuta en afkortingen worden gespeld op het apparaat, en woorden worden opgelost via het gebundelde 50k-woord Duits woordenboek.
| Model-ID | Stem |
|---|---|
| aufklarer/Kokoro-82M-German-Martin-CoreML | dm_martin (mannelijk) |
| aufklarer/Kokoro-82M-German-Victoria-CoreML | df_victoria (vrouwelijk) |
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.wavUitgelichte stemmonsters
Korte MP3 clips gegenereerd met de lokale speech-swift CLI. De volledige voice-code tabel blijft hieronder voor kopieer-plakken.
af_heart am_puck bf_alice bm_george ef_dora em_alex ff_siwis hf_alpha hm_omega if_sara im_nicola jf_alpha jm_kumo pf_dora pm_alex zf_xiaobei zm_yunjian Referentie stemcodes
Elke Kokoro spraak-ID volgt hetzelfde patroon: een éénletter taalvoorvoegsel, een éénletter- gendercode, dan een underscore en de spraaknaam. Gebruik de onderstaande tabel om een doeltaal naar het juiste voorvoegsel te brengen.
Taalvoorvoegseltabel
| Voorvoegsel | Taal | Lokaal | Geslacht |
|---|---|---|---|
a | Engels | Amerikaans (en-VS) | af_, am_ |
b | Engels | Brits (en-GB) | bf_, bm_ |
d | Duits | DE-DE | dm_, df_ |
e | Spaans | e) | ef_, em_ |
f | Frans | (FR-fr) | ff_ |
h | Hindi | h) | hf_, hm_ |
i | Italiaans | (it) | if_, im_ |
j | Japans | ja) | jf_, jm_ |
p | Portugees | Braziliaans (PT-BR) | pf_, pm_ |
z | Chinees | Mandarijn (zh) | zf_, zm_ |
Alle stemmen per taal
Engels › American (af_*, am_*
Vrouwelijk: af_alloy, af_aoede, af_bella, af_heart (standaard), af_jessica, af_kore, af_nicole, af_nova, af_river, af_sarah, af_sky
Man: am_adam, am_echo, am_eric, am_fenrir, am_liam, am_michael, am_onyx, am_puck, am_santa
Engels: Brits (bf_*, bm_*
Vrouwelijk: bf_alice, bf_emma, bf_isabella, bf_lily
Man: bm_daniel, bm_fable, bm_george, bm_lewis
Spaans (ef_*, em_*)
Female: ef_dora
Man: em_alex, em_santa
Frans (ff_*)
Vrouw: ff_siwis
Hindi (hf_*, hm_*)
Vrouwelijk: hf_alpha, hf_beta
Man: hm_omega, hm_psi
Italiaans (if_*, im_*)
Female: if_sara
Man: im_nicola
Japans (jf_*, jm_*)
Vrouwelijk: jf_alpha, jf_gongitsune, jf_nezumi, jf_tebukuro
Man: jm_kumo
Portugees . . Braziliaans (pf_*, pm_*
Female: pf_dora
Man: pm_alex, pm_santa
Chinees Mandarijn (zf_*, zm_*)
Vrouwelijk: zf_xiaobei, zf_xiaoni, zf_xiaoxiao, zf_xiaoyi
Man: zm_yunjian, zm_yunxi, zm_yunxia, zm_yunyang
Voer speech kokoro --list-voices uit om elke stem die momenteel met het model is gebundeld af te drukken. Voice ID's zijn stabiel over releases heen. Gebruik de exacte string (bijv. if_sara) bij het aanroepen van --voice van de CLI of het doorgeven van voice: naar de Swift API.
Architectuur
Kokoro maakt gebruik van een 3-traps CoreML pijpleiding. Geen bemonsteringslus . Alle fasen zijn niet-autoregressief voorwaarts-passen met een Swift-side uitlijningstap tussen de fasen 1 en 2.
3-Stage Pijpleiding
| Fase | Model | Invoer | Uitvoer |
|---|---|---|---|
| 1. Duur | duration.mlmodelc | Telefoontekens + spraakinbedding + snelheid | Duur, prosody-functies, tekstcodering |
| — | Swift uitlijning | Duur + fase 1 kenmerken | Uitgelijnde prosody & tekstfuncties |
| 2. Prosody | prosody.mlmodelc | Uitgelijnde prosody features + stijl | F0 (pitch) + ruisvoorspellingen |
| 3. Decoder | decoder_*.mlmodelc | Uitgelijnde tekst + F0 + ruis + stijl | 24 kHz audiogolfvorm |
Telefoonemmers (duurmodel)
Het duurmodel maakt gebruik van opsommige invoervormen. De invoer wordt opgevuld aan de kleinste emmer die past:
| Emmer | Max Phonemes | Geval gebruiken |
|---|---|---|
| p16 | 16 | Korte zinnen |
| p32 | 32 | Korte zinnen |
| p64 | 64 | Middelgrote zinnen |
| p128 | 128 | Lange zinnen |
Decoderemmers
Decodermodellen met vaste vorm voor verschillende maximale audiolengtes (elke frame = 600 samples op 24 kHz):
| Emmer | Max frames | Max Audio |
|---|---|---|
decoder_5s | 200 | 5.0s |
decoder_10s | 400 | 10,0' |
decoder_15s | 600 | 15.0s |
Vereist iOS 18+ / macOS 15+.
Telefoonmizer
Tekst wordt omgezet in fome tokens via een drie-tier pipeline, alle Apache-2.0 gelicentieerd, geen GPL afhankelijkheden:
- Dictionary lookup
- Geschiedenis die afremt • Morfologische ontleding voor bekende achtervoegsels (bv. "-ing," "-tion")
- BART G2P De grafeme-to-phone-fallback van de Neurale grafe-to-foneme met behulp van een afzonderlijk CoreML encoder-decoder model voor woorden buiten de woorden
Aangepaste uitspraak
Eigen naamwoorden buiten de verzonden woordenboeken vallen door naar tier 3, waar BART gokt van Engels spelling regels, dus niet-Anglo namen komen er verkeerd uit (Tatiana wordt tˈitiəniənə). addPronunciations injecteert word -> IPA ingangen vóór niveau 1:
let tts = try await KokoroTTSModel.fromPretrained()
tts.addPronunciations(["tatiana": "tɑtiˈɑnə"])
Sleutels zijn gematched met kleine letters en moeten enkele woorden zijn . De tekst wordt gesplitst op witruimte en interpunctie vóór resolutie, dus een sleutel met een spatie, koppelteken, of apostrof wordt nooit opgezocht. IPA moet symbolen uit het model woordenschat gebruiken; iets anders wordt stilletjes gedropt bij tokenization. Inzendingen zijn alleen van toepassing op het Engelse pad. zh, ja, it, fr, es, pten hi selecteer dedicated phonemizers die nooit de woordenboeken raadplegen. De lookup is ontgrendeld, dus register entries voordat synthese begint gelijktijdig te draaien op hetzelfde model.
Modelgewichten
| Onderdeel | Grootte | Formaat |
|---|---|---|
| Duurmodel | ~39 MB | .mlmodelc |
| Prosody model | 17 MB | .mlmodelc |
| Decodermodellen (3 emmers) | ~107 MB elk | .mlmodelc |
| Voice inbeddingen (54 stemmen) | ~0,3 MB | JSON (256-dim Float32) |
| G2P encoder + decoder | ~1,5 MB | .mlmodelc |
| Woordenboeken + vocab | ~6 MB | JSON |
| Totaal (1 decoder) | ~170 MB |
Prestaties
| Metrisch | Waarde |
|---|---|
| Parameters | 82M |
| Inferentiebackend | CoreML (Neural Engine) |
| Interferentie RTFx | ~0,7 (sneller dan real-time) |
| Uitvoermonstersnelheid | 24 kHz |
| Gewichtsgeheugen | ~170 MB (1 decoderemmer) |
In tegenstelling tot Qwen3-TTS en CosyVoice3 die tekens stap voor stap genereren, maakt Kokoro gebruik van een 3-traps pijpleiding zonder bemonsteringslus. Alle stadia zijn deterministisch vooruitstrevende passen.
CLI-gebruik
speech kokoro "Hello, world!" --voice af_heart --output hello.wav
Opties
| Optie | Standaard | Omschrijving |
|---|---|---|
<text> | Te synthetiseren tekst | |
--voice | af_heart | Voice preset name |
--language | en | Taalcode: en, es, fr, hi, it, ja, pt, zh, ko, de |
--output, -o | kokoro_output.wav | Uitvoer WAV bestandspad |
--list-voices | Alle beschikbare stemmen tonen en afsluiten | |
--model, -m | HuggingFace model ID |
Voorbeelden
# 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)
Eenheid overschrijvenComment
fromPretrained(computeUnits:) selecteert welke hardware het hoofdmodel CoreML draait. De standaard (.all) laat Core ML de voorkeur geven aan Neural Engine, wat het snelste pad is op elk ondersteund apparaat. Pas .cpuAndGPU om de ANE te omzeilen als een fallback op platforms waar de ANe compiler een onjuiste uitvoer voor dit model produceert.
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)
Wanneer Kokoro gebruiken
| Geval gebruiken | Aanbevolen TTS |
|---|---|
| iOS app, lichtgewicht, batterij-efficiënt | Kokoro (CoreML, 82M params, ~170 MB) |
| Hoogste kwaliteit, streaming, stemklonen | Qwen3-TTS (MLX, 600M-params, ~1,7 GB) |
| Meertalige streaming, 9 talen | CosyVoice3 (MLX, 500M params, ~1,2 GB) |
| Volledig duplex gesproken dialoog | PersonaPlex (MLX, 7B params, ~5,5 GB) |
Licentie
- Modelgewichten: Apache-2.0 (hexgrad/Kokoro-82M)
- CoreML conversie: Apache-2.0 (aufklarer/Kokoro-82M-CoreML)
- Woordenboeken en G2P: Apache-2.0
Qwen3-ASR spraak-naar-tekst · Parakeet TDT spraak-naar-tekst · CosyVoice3-stemklonen