Traduzione automatica · Originale inglese
Kokoro TTS
Kokoro-82M è un modello di testo-to-speech leggero e non autoregressivo basato su StyleTTS 2 con un vocoder ISTFTNet. Funziona interamente sul Neural Engine via CoreML, producendo un discorso naturale 24 kHz da input di testo in un singolo passo avanti.
Kokoro-82M è progettato per l'implementazione iOS on-device. A 82M parametri (~80 MB con secchio 1, INT8), si adatta comodamente su iPhone e iPad. CoreML funziona su Neural Engine lasciando gli altri compiti GPU gratuiti
Lingue supportate
| Lingua | Codice | Esempio Voci |
|---|---|---|
| Inglese (USA) | E' una cosa da fare. | af_heart, am_adam, af_sky |
| Inglese (Regno Unito) | E' una cosa da fare. | bf_emma, bm_george |
| Spagnolo | e) | Ef_dora |
| Francese | fr. | ff_siwis |
| Hindi | Ciao. | hf_alpha, hm_omega |
| Italiano | E' vero. | # Se # |
| Giapponese | - Ciao. | jf_alpha, jm_kumo |
| Portoghese | P | pf_dora |
| Cinese | zh | zf_xiaobei, zm_yunjian |
| Germania | de la de la de de de de la de | dm_martin, df_victoria (voice pack) |
54 voci preset totali. Convegno di denominazione vocale: [language_prefix][gender]_[name] — ad esempio, af_heart = American Female "Heart", if_sara = Italian Female "Sara".
Voci tedesche
Il tedesco è servito da due distinti fasci a singola voce, kikiri-tts fine-tunes di Kokoro-82M con un modello 313 MB CoreML per voce, piuttosto che con voci del fascio multilingue. language: "de". Numeri, date, orari, valuta e abbreviazioni sono scritte sul dispositivo, e le parole si risolvono attraverso il dizionario tedesco di parola 50k in bundle.
| ID modello | Voce |
|---|---|
| aufklarer/Kokoro-82M-German-Martin-CoreML | dm_martin (maschio) |
| aufklarer/Kokoro-82M-German-Victoria-CoreML | df_victoria (femmina) |
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.wavCampioni vocali in evidenza
Breve MP3 clip generate con il locale speech-swift CLI. La tabella completa del codice vocale rimane qui sotto per l'uso di copia-incolla.
af_heartam_puckbf_alicebm_georgeef_doraem_alexff_siwishf_alphahm_omegaif_saraim_nicolajf_alphajm_kumopf_dorapm_alexzf_xiaobeizm_yunjianCodici vocali Riferimento
Ogni ID vocale Kokoro segue lo stesso modello: un unico elemento prefisso linguistico, una sola lettera codice di genere, poi un sottofondo e il nome della voce. Utilizzare la tabella qui sotto per mappare una lingua di destinazione al prefisso corretto.
Tabella prefisso linguistico
| Prefisso | Lingua | Locale | Genitori |
|---|---|---|---|
a | Inglese | Americano (en-US) | af_, am_ |
b | Inglese | Inglese (en-GB) | bf_, bm_ |
d | Germania | (de-DE) | dm_, df_ |
e | Spagnolo | (es) | ef_, em_ |
f | Francese | (en-FR) | ff_ |
h | Hindi | (hi) | hf_, hm_ |
i | Italiano | (it) | if_, im_ |
j | Giapponese | (ja) | jf_, jm_ |
p | Portoghese | Brasiliano (pt-BR) | pf_, pm_ |
z | Cinese | Mandarino (zh) | zf_, zm_ |
Tutte le voci per lingua
Inglese — Americano ( af_*, am_*
Femmina: af_alloy, af_aoede, af_bella, af_heart (default) af_jessica, af_kore, af_nicole, af_nova, af_river, af_sarah, af_sky
Maschio: am_adam, am_echo, am_eric, am_fenrir, am_liam, am_michael, am_onyx, am_puck, am_santa
Inglese — Inglese ( bf_*, bm_*
Femmina: bf_alice, bf_emma, bf_isabella, bf_lily
Maschio: bm_daniel, bm_fable, bm_george, bm_lewis
Spagnolo (Spagnolo)ef_*, em_*)
Femmina: ef_dora
Maschio: em_alex, em_santa
Francese ( ff_*)
Femmina: ff_siwis
Indagine ( hf_*, hm_*
Femmina: hf_alpha, hf_beta
Maschio: hm_omega, hm_psi
Italiano ( if_*, im_*
Femmina: if_sara
Maschio: im_nicola
Giapponese ( jf_*, jm_*
Femmina: jf_alpha, jf_gongitsune, jf_nezumi, jf_tebukuro
Maschio: jm_kumo
Portogallo — Brasiliano ( pf_*, pm_*
Femmina: pf_dora
Maschio: pm_alex, pm_santa
Cinese — Mandarino ( zf_*, zm_*
Femmina: zf_xiaobei, zf_xiaoni, zf_xiaoxiao, zf_xiaoyi
Maschio: zm_yunjian, zm_yunxi, zm_yunxia, zm_yunyang
Corri! speech kokoro --list-voices per stampare ogni voce attualmente in bundle con il modello. I ID vocali sono stabili attraverso le versioni — utilizzare la stringa esatta (ad esempio, if_sara) quando si chiama --voice dal CLI o passando voice: alla Swift API.
Architettura
Kokoro utilizza una pipeline a 3 stadi CoreML. Nessun loop di campionamento — tutte le fasi sono passi avanti non autorigressivi con un passo di allineamento a Swift tra le fasi 1 e 2.
3Stage Pipeline
| Fase | Modello | Input | Produzione |
|---|---|---|---|
| 1. Durata | duration.mlmodelc | Token fonemi + voce incorporata + velocità | Durata, caratteristiche della prosodia, codifica del testo |
| — | Allineamento Swift | Durata + stadio 1 caratteristiche | Prosodia allineata e funzioni di testo |
| 2. Prosodia | prosody.mlmodelc | Caratteristiche della prosodia allineate + stile | F0 (pitch) + previsioni del rumore |
| 3. Decoder | decoder_*.mlmodelc | Testo allineato + F0 + rumore + stile | 24 kHz audio forma d'onda |
Secchi per fonemi (modello diDuration)
Il modello di durata utilizza forme di input enumerate. L'ingresso è imbottito al più piccolo secchio che si adatta:
| Fibbia | Max Phones | Utilizzare il caso |
|---|---|---|
| p16 | 16 | Frasi brevi |
| p32 | 32 | Frasi brevi |
| p64 | 64 | Condanne medie |
| p128 | 128 | frasi lunghe |
Secchietti Decoder
Modelli di decoder a forma fissa per diverse lunghezze audio massime (ogni frame = 600 campioni a 24 kHz):
| Fibbia | Telaio Max | Max Audio |
|---|---|---|
decoder_5s | 200 | 5,0 |
decoder_10s | 400 | 10,0 |
decoder_15s | 600 | 15.0 |
Richiede iOS 18+ / macOS 15+.
Telefono
Il testo viene convertito in token fonemi tramite una pipeline a tre livelli — tutti Apache-2.0 con licenza, senza dipendenze GPL:
- Dizionario di ricerca — Dizionari di pronuncia inglese e inglese americano con supporto eteronimo
- Suffix stemming — Decomposizione morfologica per suffissi noti (ad esempio, "-ing", "-tion")
- BART G2P — Fallback grafico-to-phoneme neurale utilizzando un modello separato di codificatore CoreML per parole fuori catalogo
Pronuncia personalizzata
Proper sostantivi al di fuori dei dizionari spediti cadono fino a 3, dove BART indovina da Inglese regole di ortografia — così i nomi non anglo escono male (Tatiana diventa diventa tˈitiəniənə). addPronunciations iniezioni word -> IPA voci in anticipo di 1:
let tts = try await KokoroTTSModel.fromPretrained()
tts.addPronunciations(["tatiana": "tɑtiˈɑnə"])
Le chiavi sono abbinate in minuscole e devono essere parole singole — il testo è diviso su biancospazio e la punteggiatura prima della risoluzione, quindi una chiave contenente uno spazio, trattino, o apostrofo non è mai guardato in su. IPA deve usare simboli dal vocabolario modello; qualsiasi altra cosa è silenziosamente caduto a tokenization. zh, ja, it, fr, es, pte hi seleziona fonemiti dedicati che non consultano mai i dizionari. La ricerca è sbloccata, quindi registra le voci prima che la sintesi inizi a funzionare contemporaneamente sullo stesso modello.
Peso del modello
| Componenti | Dimensione | Formato |
|---|---|---|
| Modello di durata | ~ 39 MB | .mlmodell. |
| Modello Prosody | ~ 17 MB | .mlmodell. |
| Modelli di decoder (3 secchi) | ~107 MB ciascuno | .mlmodell. |
| Embeddings vocale (54 voci) | ~0.3 MB | JSON (256-dim Float32 |
| G2P encoder + decoder | ~ 1,5 MB | .mlmodell. |
| Dizionisti + vocabolario | ~ 6 MB | JSON |
| Totale (1 decoder) | ~ 170 MB |
Prestazioni
| Metrico | Valore |
|---|---|
| Parametri | 82M |
| Inferenza backend | CoreML (Neural Engine) |
| RTFonte di riferimento | ~0.7 (più veloce del tempo reale) |
| Tasso di campionamento in uscita | 24 kHz |
| Memoria di peso | ~170 MB (1 secchio decoder) |
A differenza di Qwen3-TTS e CosyVoice3 che genera token passo-passo, Kokoro utilizza una pipeline a 3 stadi senza loop di campionamento. Tutte le fasi sono passaggi anteriori deterministici.
Uso CLI
speech kokoro "Hello, world!" --voice af_heart --output hello.wav
Opzioni
| Opzione | Predefinito | Designazione |
|---|---|---|
<text> | Testo per sintetizzare | |
--voice | af_heart | Nome della voce preimpostata |
--language | en | Codice linguistico: en, es, fr, hi, it, ja, pt, zh, ko, de |
--output, -o | kokoro_output.wav | Uscita WAV percorso file |
--list-voices | Elenca tutte le voci e le uscite disponibili | |
--model, -m | ID modello HuggingFace |
Esempi
# 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)
Unità di calcolo Override
fromPretrained(computeUnits:) seleziona quale hardware esegue il modello CoreML principale..all) consente a Core ML di preferire lo Neural Engine, che è il percorso più veloce su ogni dispositivo supportato. .cpuAndGPU per bypassare l'ANE come un fallback su piattaforme in cui il compilatore ANE produce output errato per questo modello.
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)
Quando usare Kokoro
| Utilizzare il caso | Raccomandato TTS |
|---|---|
| iOS app, leggero, a batteria | Kokoro ( CoreML, 82M params, ~170 MB) |
| Alta qualità, streaming, clonazione vocale | Qwen3-TTS ( MLX, 600M params, ~1.7 GB) |
| streaming multilingue, 9 lingue | CosyVoice3 ( MLX, 500M params, ~1.2 GB) |
| Dialogo parlato full-duplex | PersonaPlex ( MLX, 7B params, ~5.5 GB) |
Licenza
- Peso del modello: Apache-2.0 ( hexgrad/ Kokoro-82M
- CoreML: Apache-2.0 ( aufklarer/ Kokoro-82M-CoreML
- Dizionari e G2P: Apache-2.0
Qwen3-ASR discorso-testo · Parakeet TDT discorso-to-text · clonazione vocale CosyVoice3