Kokoro TTS

Kokoro-82M — это лёгкая неавторегрессивная модель синтеза речи на основе StyleTTS 2 с ISTFTNet-вокодером. Она работает полностью на Neural Engine через CoreML, производя естественную речь 24 кГц из текста за один прямой проход.

Готова для iOS

Kokoro-82M спроектирована для развёртывания на устройстве под iOS. При 82M параметров (~80 МБ с 1 бакетом, INT8) она комфортно помещается на iPhone и iPad. CoreML работает на Neural Engine, оставляя GPU свободным для других задач.

Поддерживаемые языки

ЯзыкКодПримеры голосов
Английский (США)enaf_heart, am_adam, af_sky
Английский (Великобритания)enbf_emma, bm_george
Испанскийesef_dora
Французскийfrff_siwis
Хиндиhihf_alpha, hm_omega
Итальянскийitif_sara
Японскийjajf_alpha, jm_omega
Португальскийptpf_dora
Китайскийzhzf_xiaobei, zm_yunjian
Корейскийkokf_somi

Всего 50 предустановленных голосов. Соглашение об именах: [language_prefix][gender]_[name] — например, af_heart = американская женщина «Heart», if_sara = итальянская женщина «Sara».

Справочник кодов голосов

Каждый идентификатор голоса Kokoro следует одной схеме: однобуквенный префикс языка, однобуквенный код пола, символ подчёркивания, затем имя голоса. Используйте таблицу ниже, чтобы сопоставить нужный язык с правильным префиксом.

Таблица языковых префиксов

ПрефиксЯзыкЛокальСуффиксы пола
aАнглийскийАмериканский (en-US)af_, am_
bАнглийскийБританский (en-GB)bf_, bm_
eИспанский(es)ef_, em_
fФранцузский(fr-FR)ff_
hХинди(hi)hf_, hm_
iИтальянский(it)if_, im_
jЯпонский(ja)jf_, jm_
kКорейский(ko)kf_
pПортугальскийБразильский (pt-BR)pf_, pm_
zКитайскийМандарин (zh)zf_, zm_

Все голоса по языкам

Английский — Американский (af_*, am_*)

Женские: af_alloy, af_aoede, af_bella, af_heart (по умолчанию), af_jessica, af_kore, af_nicole, af_nova, af_river, af_sarah, af_sky
Мужские: am_adam, am_echo, am_eric, am_fenrir, am_liam, am_michael, am_onyx, am_puck, am_santa

Английский — Британский (bf_*, bm_*)

Женские: bf_alice, bf_emma, bf_isabella, bf_lily
Мужские: bm_daniel, bm_fable, bm_george, bm_lewis

Испанский (ef_*, em_*)

Женские: ef_dora
Мужские: em_alex, em_santa

Французский (ff_*)

Женские: ff_siwis

Хинди (hf_*, hm_*)

Женские: hf_alpha, hf_beta
Мужские: hm_omega, hm_psi

Итальянский (if_*, im_*)

Женские: if_sara
Мужские: im_nicola

Японский (jf_*, jm_*)

Женские: jf_alpha, jf_gongitsune, jf_nezumi, jf_tebukuro
Мужские: jm_kumo

Корейский (kf_*)

Женские: kf_somi

Португальский — Бразильский (pf_*, pm_*)

Женские: pf_dora
Мужские: pm_alex, pm_santa

Китайский — Мандарин (zf_*, zm_*)

Женские: zf_xiaobei, zf_xiaoni, zf_xiaoxiao, zf_xiaoyi
Мужские: zm_yunjian, zm_yunxi, zm_yunxia, zm_yunyang

Вывод списка голосов во время выполнения

Выполните speech kokoro --list-voices, чтобы вывести все голоса, входящие в модель. Идентификаторы голосов стабильны между релизами — используйте точную строку (например, if_sara) при вызове --voice из CLI или при передаче voice: в Swift API.

Архитектура

Kokoro использует 3-этапный CoreML-пайплайн. Нет цикла сэмплирования — все этапы представляют собой неавторегрессивные прямые проходы со шагом выравнивания на стороне Swift между этапами 1 и 2.

3-этапный пайплайн

ЭтапМодельВходВыход
1. Durationduration.mlmodelcФонемные токены + эмбеддинг голоса + скоростьДлительности, просодические признаки, кодирование текста
Выравнивание на SwiftДлительности + признаки этапа 1Выровненные просодические и текстовые признаки
2. Prosodyprosody.mlmodelcВыровненные просодические признаки + стильF0 (высота тона) + шумовые предсказания
3. Decoderdecoder_*.mlmodelcВыровненный текст + F0 + шум + стильАудиоволна 24 кГц

Фонемные бакеты (Duration-модель)

Duration-модель использует перечисленные входные формы. Вход дополняется до наименьшего подходящего бакета:

БакетМакс. фонемСценарий
p1616Короткие фразы
p3232Короткие предложения
p6464Средние предложения
p128128Длинные предложения

Бакеты декодера

Декодер-модели с фиксированной формой для разной максимальной длины аудио (каждый кадр = 600 сэмплов при 24 кГц):

БакетМакс. кадровМакс. аудио
decoder_5s2005.0 с
decoder_10s40010.0 с
decoder_15s60015.0 с

Требуется iOS 18+ / macOS 15+.

Фонемизатор

Текст преобразуется в фонемные токены через трёхуровневый пайплайн — всё под лицензией Apache-2.0, без GPL-зависимостей:

  1. Поиск в словаре — Словари произношения американского и британского английского с поддержкой гетеронимов
  2. Суффиксный стемминг — Морфологическое разложение для известных суффиксов (например, «-ing», «-tion»)
  3. BART G2P — Нейронный грапефема-в-фонему fallback через отдельную CoreML encoder-decoder модель для слов вне словаря

Веса модели

КомпонентРазмерФормат
Duration-модель~39 МБ.mlmodelc
Prosody-модель~17 МБ.mlmodelc
Decoder-модели (3 бакета)~107 МБ каждая.mlmodelc
Голосовые эмбеддинги (54 голоса)~0.3 МБJSON (256-мерные Float32)
G2P encoder + decoder~1.5 МБ.mlmodelc
Словари + vocab~6 МБJSON
Всего (1 decoder)~170 МБ

Производительность

МетрикаЗначение
Параметры82M
Бэкенд инференсаCoreML (Neural Engine)
RTFx инференса~0.7 (быстрее реального времени)
Частота дискретизации на выходе24 кГц
Память весов~170 МБ (1 decoder-бакет)
Неавторегрессивный

В отличие от Qwen3-TTS и CosyVoice3, которые генерируют токены пошагово, Kokoro использует 3-этапный пайплайн без цикла сэмплирования. Все этапы — детерминированные прямые проходы.

Использование CLI

speech kokoro "Hello, world!" --voice af_heart --output hello.wav

Опции

ОпцияПо умолчаниюОписание
<text>Текст для синтеза
--voiceaf_heartИмя пресета голоса
--languageenКод языка: en, es, fr, hi, it, ja, pt, zh, ko, de
--output, -okokoro_output.wavПуть выходного WAV-файла
--list-voicesПеречислить все доступные голоса и выйти
--model, -mModel ID на HuggingFace

Примеры

# Английский с голосом по умолчанию
speech kokoro "Hello, how are you today?" --output hello.wav

# Французский
speech kokoro "Bonjour le monde" --voice ff_siwis --language fr --output bonjour.wav

# Японский
speech kokoro "こんにちは世界" --voice jf_alpha --language ja --output konnichiwa.wav

# Перечислить все 50 голосов
speech kokoro --list-voices

Swift API

import KokoroTTS
import AudioCommon

let tts = try await KokoroTTSModel.fromPretrained()
// Скачает ~170 МБ при первом запуске

let audio = try tts.synthesize(text: "Hello world", voice: "af_heart")
// audio: [Float] — 24 кГц моно PCM

try WAVWriter.write(samples: audio, sampleRate: 24000, to: outputURL)

Compute Unit Override

fromPretrained(computeUnits:) selects which hardware runs the main CoreML model. The default (.all) lets Core ML prefer the Neural Engine, which is the fastest path on every supported device. Pass .cpuAndGPU to bypass the ANE as a fallback on platforms where the ANE compiler produces incorrect output for this 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)

Когда использовать Kokoro

СценарийРекомендуемый TTS
iOS-приложение, лёгкий, экономичный по батарееKokoro (CoreML, 82M параметров, ~170 МБ)
Наивысшее качество, потоковый, клонирование голосаQwen3-TTS (MLX, 600M параметров, ~1.7 ГБ)
Многоязычный потоковый, 9 языковCosyVoice3 (MLX, 500M параметров, ~1.2 ГБ)
Полнодуплексный голосовой диалогPersonaPlex (MLX, 7B параметров, ~5.5 ГБ)

Лицензия