Traducere automată · Originalul în engleză
Kokoro TTS voci și eșantioane
Kokoro-82M este un model de text-la-discurs ușor, non-autoregresiv bazat pe StyleTTS 2 cu un VOcodor ISTFTNet. Acesta rulează în întregime pe Neural Engine prin CoreML, producând vorbire naturală 24 kHz de la intrare text într-o singură trecere înainte.
Kokoro-82M este conceput pentru o aplicație iOS. La parametrii 82M (~80 MB cu 1 găleată, INT8), se potrivește confortabil pe iPad și iPad. CoreML rulează pe Neural Engine, lăsând GPU gratuit pentru alte sarcini.
Limbi acceptate
| Limba | Cod | Exemplu Voci |
|---|---|---|
| Engleză (SUA) | to | af_heart, am_adam, af_sky |
| Engleză (UK) | to | bf_emma, bm_ George |
| Spaniolă | es | ef_dora |
| Franceză | f | ff_siwis |
| Hindi | Bună. | hf_alfa, hm_omega |
| Italiană | - Da. | if_sara |
| Japoneză | da | jf_alfa, jm_kumo |
| Portugheză | pt | pf_dora |
| Chineză | Zh | zf_xiaobei, zm_yunjian |
| Germană | de | dm_martin, df_victoria (pachete vocale) |
54 voci preset total. Convenție de denumire vocală: [language_prefix][gender]_[name] de ex., af_heart = American Feminin "Heart," if_sara = Italian Female "Sara."
Voci germane
Germana este deservită de două pachete separate cu o singură voce, kikiri-ts fine-tunes de Kokoro-82M cu un model de 313 MB CoreML per voce, mai degrabă decât de vocile grupului multilingv. Încarcă unul după modelul ID și sintetizează cu language: "de". Numere, date, ori, valută și abrevieri sunt scrise pe dispozitiv, iar cuvintele se rezolvă prin dicționarul german de 50k-cuvântul grupat.
| Model de identificare | Voce |
|---|---|
| aufklarer/Kokoro-82M-German-Martin-CoreML | dm_martin (masculin) |
| aufklater/Kokoro-82M-German-Victoria-CoreML | df_victoria (femeie) |
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.wavMostre de voce recomandate
Scurtă MP3 clipuri generate cu discoteca locală speech-swift CLI. Tabelul complet cu codul vocal rămâne dedesubt pentru utilizarea pastei de copiere.
af_heart am_puckbf_alice bm_georgeef_doraem_alex ff_siwishf_alpha hm_omegaif_saraim_nicolajf_alpha jm_kumo pf_dora pm_alex zf_xiaobeizm_yunjianCoduri vocale de referință
Fiecare ID de voce Kokoro urmează același model: o singură literă prefix limbă, o singură literă Codul de gen, apoi un accent și numele vocii. Utilizați tabelul de mai jos pentru a cartografia un limbaj țintă pentru prefixul corect.
Tabel prefix limbă
| Prefix | Limba | Localizează | Sexuri |
|---|---|---|---|
a | Engleză | American (en-US) | af_, am_ |
b | Engleză | Britanică (en-GB) | bf_, bm_ |
d | Germană | (de-DE) | dm_, df_ |
e | Spaniolă | (s) | ef_, em_ |
f | Franceză | (fr-FR) | ff_ |
h | Hindi | (Hi) | hf_, hm_ |
i | Italiană | (t) | if_, im_ |
j | Japoneză | (ja) | jf_, jm_ |
p | Portugheză | Braziliană (pt-BR) | pf_, pm_ |
z | Chineză | Mandarină (zh) | zf_, zm_ |
Toate vocile după limbă
Engleză ا American (af_*, am_*
Femeie: af_alloy, af_aoede, af_bella, af_heart (default); af_jessica, af_kore, af_nicole, af_nova, af_river, af_sarah, af_sky
Bărbat: am_adam, am_echo, am_eric, am_fenrir, am_liam, am_michael, am_onyx, am_puck, am_santa
Engleză ا Britanică (bf_*, bm_*
Femeie: bf_alice, bf_emma, bf_isabella, bf_lily
Bărbat: bm_daniel, bm_fable, bm_george, bm_lewis
Spaniolă (ef_*, em_*)
Female: ef_dora
Male: em_alex, em_santa
Franceză (ff_*)
Female: ff_siwis
Hindi (hf_*, hm_*)
Femeie: hf_alpha, hf_beta
Bărbat: hm_omega, hm_psi
Italian (if_*, im_*
Female: if_sara
Male: im_nicola
Japoneză (jf_*, jm_*
Femeie: jf_alpha, jf_gongitsune, jf_nezumi, jf_tebukuro
Bărbat: jm_kumo
Portugheză ا Braziliană (pf_*, pm_*)
Female: pf_dora
Male: pm_alex, pm_santa
Chinezesc bază (zf_*, zm_*
Femeie: zf_xiaobei, zf_xiaoni, zf_xiaoxiao, zf_xiaoyi
Bărbat: zm_yunjian, zm_yunxi, zm_yunxia, zm_yunyang
Rulați speech kokoro --list-voices pentru a imprima fiecare voce în prezent închegată cu modelul. ID-urile vocale sunt stabile pe toate lansările . Utilizați șirul exact (de exemplu, if_sara) atunci când apelați --voice de la CLI sau care trece voice: la Swift API.
Arhitectură
Kokoro a 3-stage CoreML conducta. Nici o buclă de prelevare a probelor bază nu sunt permise înainte non-autoregresive cu un pas de aliniere Swift-side între etape 1 şi 2.
Conductă cu 3-stare
| Etape | Model | Intrare | Ieșire |
|---|---|---|---|
| 1. Durata | duration.mlmodelc | Jetoane telefonice + incorporarea vocii + viteza | Durata, caracteristicile prozodie, codificarea textului |
| — | Swift aliniere | Durata + caracteristicile etapei 1 | Caracteristici de prosodie & text aliniate |
| 2. Prosodie | prosody.mlmodelc | Caracteristici de prozodie aliniate + stil | F0 (pitch) + predicții privind zgomotul |
| 3. Decodor | decoder_*.mlmodelc | Text aliniat + F0 + zgomot + stil | 24 kHz formă audio de undă |
Telefonează-mi Buckets (Modelul de Duraţie)
Modelul de durată utilizează forme de intrare enumerate. Intrarea este capitonată la cea mai mică găleată care se potrivește:
| Găleată | Max Phonemes | Folosește cazul |
|---|---|---|
| p16 | 16 | Fraze scurte |
| p32 | 32 | Propoziții scurte |
| p64 | 64 | Propoziții medii |
| p128 | 128 | Propoziții lungi |
Găleți de decodor
Modele de decodor cu model fix pentru lungimi audio maxime diferite (fiecare cadru = 600 de eșantioane la 24 kHz):
| Găleată | Rame Max | Max Audio |
|---|---|---|
decoder_5s | 200 | 5.0s |
decoder_10s | 400 | 10.0s |
decoder_15s | 600 | 15,0 |
Necesită iOS 18+ / macOS 15+.
Telefonizator
Textul este convertit în jetoane foneme prin intermediul unei conducte de trei niveluri, toate Apache-2.0 licențiat, fără dependențe GPL:
- Acţionare de căutare în limba engleză şi engleză cu suport heteronim
- Suffix rezultat
- BART G2P bază de date pentru date neuronale, utilizând un model separat CoreML decodor-decodor pentru cuvinte out-of-vocabular
Pronunții personalizate
Substantivele adecvate din afara dicționarelor expediate cad până la nivelul 3, de unde presupune BART Engleză reguli de ortografie bază astfel încât numele non-Anglo ies greșit (Tatiana devine tˈitiəniənə). addPronunciations injecţii word -> IPA intrările înainte de nivelul 1:
let tts = try await KokoroTTSModel.fromPretrained()
tts.addPronunciations(["tatiana": "tɑtiˈɑnə"])
Cheile sunt egalate cu cele inferioare și trebuie să fie un singur cuvânt textul este împărțit pe whitespace și punctuație înainte de rezoluție, astfel încât o cheie care conține un spațiu, hyphen, sau apostrophe nu este niciodată privit în sus. IPA trebuie să utilizeze simboluri din vocabularul model; orice altceva este scăzut în tăcere la tokenizare. zh, ja, it, fr, es, pt, și hi selectați telefoane dedicate care nu consultă dicționarele. Căutarea este deblocată, astfel încât să înregistreze intrările înainte de sinteză începe să ruleze concomitent pe același model.
Greutatea modelului
| Componentă | Dimensiune | Format |
|---|---|---|
| Model de durată | ~39 MO | .mlmodelc |
| Model Prosody | ~17 MO | .mlmodelc |
| Modele de decodor (3 găleți) | ~107 MO fiecare | .mlmodelc |
| Încorporarea vocii (54 de voci) | ~0.3 MO | JSON (256-dim Float32) |
| G2P codor + decodor | ~1,5 MO | .mlmodelc |
| Dictionare + vocab | ~6 MO | JSON |
| Total (1 decodor) | ~170 MB |
Performanță
| Metrică | Valoare |
|---|---|
| Parametrii | 82M |
| Suport de inferență | CoreML (Neural Engine) |
| Inference RTFx | ~0.7 (mai rapid decât în timp real) |
| Rata eșantionului de ieșire | 24 kHz |
| Memorie greutate | ~170 MB (1 găleată de decodor) |
Spre deosebire de Qwen3-TTS și CosyVoice3 care generează jetoane pas cu pas, Kokoro utilizează o conductă în 3 etape fără buclă de eșantionare. Toate etapele sunt pase forward deterministice.
Utilizarea CLI
speech kokoro "Hello, world!" --voice af_heart --output hello.wav
Opțiuni
| Opțiune | Implicit | Descriere |
|---|---|---|
<text> | Text de sintetizat | |
--voice | af_heart | Numele de prefix vocal |
--language | en | Codul lingvistic: en, es, fr, hi, it, ja, pt, zh, ko, de |
--output, -o | kokoro_output.wav | Ieșire WAV calea fișierului |
--list-voices | Enumeră toate vocile disponibile și ieșirea | |
--model, -m | HuggingFace model ID |
Exemple
# 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)
Suprascrie unitatea de calcul
fromPretrained(computeUnits:) alege care hardware ruleaza modelul principal CoreML. Implicit (.all) permite Core ML preferă Neural Engine, care este cea mai rapidă cale pe fiecare dispozitiv sprijinit. .cpuAndGPU să ocolească ANE ca o rezervă pe platforme în care compilatorul ANE produce o ieșire incorectă pentru acest 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)
Când se utilizează Kokoro
| Folosește cazul | Recomandat TTS |
|---|---|
| iOS aplicaţie, uşoară, eficientă din punct de vedere al bateriei | Kokoro (CoreML, 82M params, ~170 MB) |
| Cea mai înaltă calitate, streaming, clonarea vocii | Qwen3-TTS (MLX, 600M params, ~1.7 GB) |
| Streaming multilingv, 9 limbi | CosyVoice3 (MLX, 500M params, ~1.2 GB) |
| Dialog vorbit complet-duplex | PersonaPlex (MLX, 7B params, ~5.5 GB) |
Licență
- Model de greutate: Apache-2.0 (hexgrad/Kokoro-82M)
- CoreML convertire: Apache-2.0 (aufklater/Kokoro-82M-CoreML)
- Dicționare și G2P: Apache-2.0
Qwen3-ASR speech-to-text · Parakeet TDT speech-to-text · Clonarea vocală CosyVoice3