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.

iOS-Ready

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

LinguaCodiceEsempio 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
Spagnoloe)Ef_dora
Francesefr.ff_siwis
HindiCiao.hf_alpha, hm_omega
ItalianoE' vero.# Se #
Giapponese- Ciao.jf_alpha, jm_kumo
PortoghesePpf_dora
Cinesezhzf_xiaobei, zm_yunjian
Germaniade la de la de de de de la dedm_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 modelloVoce
aufklarer/Kokoro-82M-German-Martin-CoreMLdm_martin (maschio)
aufklarer/Kokoro-82M-German-Victoria-CoreMLdf_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.wav

Campioni 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_heartFemmina americana
am_puckMaschio americano
bf_aliceFemmina britannica
bm_georgeInglese maschio
ef_doraFemmina spagnola
em_alexSpagnolo maschio
ff_siwisFemmina francese
hf_alphaHindi femmina
hm_omegaHindi maschio
if_saraFemmina italiana
im_nicolaItaliano maschio
jf_alphaFemmina giapponese
jm_kumoGiapponese maschio
pf_doraFemmina portoghese
pm_alexmaschio portoghese
zf_xiaobeiMandarino femmina
zm_yunjianMandarino maschio

Codici 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

PrefissoLinguaLocaleGenitori
aIngleseAmericano (en-US)af_, am_
bIngleseInglese (en-GB)bf_, bm_
dGermania(de-DE)dm_, df_
eSpagnolo(es)ef_, em_
fFrancese(en-FR)ff_
hHindi(hi)hf_, hm_
iItaliano(it)if_, im_
jGiapponese(ja)jf_, jm_
pPortogheseBrasiliano (pt-BR)pf_, pm_
zCineseMandarino (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

Elenca le voci a runtime

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

FaseModelloInputProduzione
1. Durataduration.mlmodelcToken fonemi + voce incorporata + velocitàDurata, caratteristiche della prosodia, codifica del testo
—Allineamento SwiftDurata + stadio 1 caratteristicheProsodia allineata e funzioni di testo
2. Prosodiaprosody.mlmodelcCaratteristiche della prosodia allineate + stileF0 (pitch) + previsioni del rumore
3. Decoderdecoder_*.mlmodelcTesto allineato + F0 + rumore + stile24 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:

FibbiaMax PhonesUtilizzare il caso
p1616Frasi brevi
p3232Frasi brevi
p6464Condanne medie
p128128frasi lunghe

Secchietti Decoder

Modelli di decoder a forma fissa per diverse lunghezze audio massime (ogni frame = 600 campioni a 24 kHz):

FibbiaTelaio MaxMax Audio
decoder_5s2005,0
decoder_10s40010,0
decoder_15s60015.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:

  1. Dizionario di ricerca — Dizionari di pronuncia inglese e inglese americano con supporto eteronimo
  2. Suffix stemming — Decomposizione morfologica per suffissi noti (ad esempio, "-ing", "-tion")
  3. 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

ComponentiDimensioneFormato
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 MBJSON (256-dim Float32
G2P encoder + decoder~ 1,5 MB.mlmodell.
Dizionisti + vocabolario~ 6 MBJSON
Totale (1 decoder)~ 170 MB

Prestazioni

MetricoValore
Parametri82M
Inferenza backendCoreML (Neural Engine)
RTFonte di riferimento~0.7 (più veloce del tempo reale)
Tasso di campionamento in uscita24 kHz
Memoria di peso~170 MB (1 secchio decoder)
Non autoregressiva

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

OpzionePredefinitoDesignazione
<text>Testo per sintetizzare
--voiceaf_heartNome della voce preimpostata
--languageenCodice linguistico: en, es, fr, hi, it, ja, pt, zh, ko, de
--output, -okokoro_output.wavUscita WAV percorso file
--list-voicesElenca tutte le voci e le uscite disponibili
--model, -mID 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 casoRaccomandato TTS
iOS app, leggero, a batteriaKokoro ( CoreML, 82M params, ~170 MB)
Alta qualità, streaming, clonazione vocaleQwen3-TTS ( MLX, 600M params, ~1.7 GB)
streaming multilingue, 9 lingueCosyVoice3 ( MLX, 500M params, ~1.2 GB)
Dialogo parlato full-duplexPersonaPlex ( MLX, 7B params, ~5.5 GB)

Licenza