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][gender]_[name] — например, af_heart = American Female «Heart».

Архитектура

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

audio 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

Примеры

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

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

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

# Перечислить все 50 голосов
audio 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)

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

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

Лицензия