Kokoro TTS
Kokoro-82M — это лёгкая неавторегрессивная модель синтеза речи на основе StyleTTS 2 с ISTFTNet-вокодером. Она работает полностью на Neural Engine через CoreML, производя естественную речь 24 кГц из текста за один прямой проход.
Kokoro-82M спроектирована для развёртывания на устройстве под iOS. При 82M параметров (~80 МБ с 1 бакетом, INT8) она комфортно помещается на iPhone и iPad. CoreML работает на Neural Engine, оставляя GPU свободным для других задач.
Поддерживаемые языки
| Язык | Код | Примеры голосов |
|---|---|---|
| Английский (США) | en | af_heart, am_adam, af_sky |
| Английский (Великобритания) | en | bf_emma, bm_george |
| Испанский | es | ef_dora |
| Французский | fr | ff_siwis |
| Хинди | hi | hf_alpha, hm_omega |
| Итальянский | it | if_sara |
| Японский | ja | jf_alpha, jm_omega |
| Португальский | pt | pf_dora |
| Китайский | zh | zf_xiaobei, zm_yunjian |
| Корейский | ko | kf_somi |
Всего 50 пресетных голосов. Соглашение именования голосов: [language][gender]_[name] — например, af_heart = American Female «Heart».
Архитектура
Kokoro использует 3-этапный CoreML-пайплайн. Нет цикла сэмплирования — все этапы представляют собой неавторегрессивные прямые проходы со шагом выравнивания на стороне Swift между этапами 1 и 2.
3-этапный пайплайн
| Этап | Модель | Вход | Выход |
|---|---|---|---|
| 1. Duration | duration.mlmodelc | Фонемные токены + эмбеддинг голоса + скорость | Длительности, просодические признаки, кодирование текста |
| — | Выравнивание на Swift | Длительности + признаки этапа 1 | Выровненные просодические и текстовые признаки |
| 2. Prosody | prosody.mlmodelc | Выровненные просодические признаки + стиль | F0 (высота тона) + шумовые предсказания |
| 3. Decoder | decoder_*.mlmodelc | Выровненный текст + F0 + шум + стиль | Аудиоволна 24 кГц |
Фонемные бакеты (Duration-модель)
Duration-модель использует перечисленные входные формы. Вход дополняется до наименьшего подходящего бакета:
| Бакет | Макс. фонем | Сценарий |
|---|---|---|
| p16 | 16 | Короткие фразы |
| p32 | 32 | Короткие предложения |
| p64 | 64 | Средние предложения |
| p128 | 128 | Длинные предложения |
Бакеты декодера
Декодер-модели с фиксированной формой для разной максимальной длины аудио (каждый кадр = 600 сэмплов при 24 кГц):
| Бакет | Макс. кадров | Макс. аудио |
|---|---|---|
decoder_5s | 200 | 5.0 с |
decoder_10s | 400 | 10.0 с |
decoder_15s | 600 | 15.0 с |
Требуется iOS 18+ / macOS 15+.
Фонемизатор
Текст преобразуется в фонемные токены через трёхуровневый пайплайн — всё под лицензией Apache-2.0, без GPL-зависимостей:
- Поиск в словаре — Словари произношения американского и британского английского с поддержкой гетеронимов
- Суффиксный стемминг — Морфологическое разложение для известных суффиксов (например, «-ing», «-tion»)
- 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> | Текст для синтеза | |
--voice | af_heart | Имя пресета голоса |
--language | en | Код языка: en, es, fr, hi, it, ja, pt, zh, ko, de |
--output, -o | kokoro_output.wav | Путь выходного WAV-файла |
--list-voices | Перечислить все доступные голоса и выйти | |
--model, -m | Model 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 ГБ) |
Лицензия
- Веса модели: Apache-2.0 (hexgrad/Kokoro-82M)
- CoreML-конвертация: Apache-2.0 (aufklarer/Kokoro-82M-CoreML)
- Словари и G2P: Apache-2.0