CosyVoice3
Fun-CosyVoice3-0.5B — это потоковая модель синтеза речи с поддержкой 9 языков. Она использует пайплайн из трёх этапов — генерация токенов LLM, DiT flow matching и вокодинг HiFi-GAN — чтобы получать естественную речь 24 кГц из входного текста.
Поддерживаемые языки
| Язык | Код |
|---|---|
| Китайский | chinese |
| Английский | english |
| Японский | japanese |
| Корейский | korean |
| Немецкий | german |
| Испанский | spanish |
| Французский | french |
| Итальянский | italian |
| Русский | russian |
Пайплайн
CosyVoice3 синтезирует речь в три этапа:
- LLM — Qwen2.5-0.5B в качестве основы генерирует FSQ-токены речи (Finite Scalar Quantization) из текста
- DiT Flow Matching — 22-слойный Diffusion Transformer преобразует речевые токены в мел-спектрограммы через интегрирование Euler ODE
- HiFi-GAN — вокодер Neural Source Filter превращает мел-спектрограммы в сигнал 24 кГц
Архитектура
LLM (Qwen2.5-0.5B)
Языковая модель квантизована в 4 бита и авторегрессивно генерирует дискретные речевые токены.
| Параметр | Значение |
|---|---|
| Слои | 24 |
| Скрытая размерность | 896 |
| Query-головы | 14 |
| Key/Value-головы | 2 (GQA) |
| FSQ-словарь | 6561 |
| Квантизация | 4-bit |
DiT Flow Matching
Diffusion Transformer уточняет речевые токены до мел-спектрограмм с помощью условного flow matching и classifier-free guidance.
| Параметр | Значение |
|---|---|
| Слои | 22 |
| Размерность | 1024 |
| Головы внимания | 16 |
| Кондиционирование | AdaLN (Adaptive Layer Norm) |
| ODE-решатель | Euler, 10 шагов |
| Коэффициент CFG | 0.7 |
Вокодер HiFi-GAN
Вокодер Neural Source Filter (NSF), преобразующий мел-спектрограммы в сигнал.
| Параметр | Значение |
|---|---|
| Гармоники | 8 |
| Коэффициент апсемпла | 480× (8 × 5 × 3 × ISTFT 4) |
| ISTFT | n_fft=16, hop=4 |
| Частота дискретизации на выходе | 24 кГц |
Веса модели
| Модель | Размер | HuggingFace |
|---|---|---|
| CosyVoice3-0.5B (4-bit LLM) | 1.2 ГБ | aufklarer/CosyVoice3-0.5B-MLX-4bit |
Включает LLM (квантизованную в 4 бита), DiT flow matching и веса вокодера HiFi-GAN.
Использование CLI
.build/release/audio speak "Hallo Welt" --engine cosyvoice --language german -o output.wav
Примеры
# Английский
.build/release/audio speak "Hello, how are you?" --engine cosyvoice -o hello_en.wav
# Китайский
.build/release/audio speak "你好世界" --engine cosyvoice --language chinese -o hello_cn.wav
# Испанский
.build/release/audio speak "Hola, buenos días" --engine cosyvoice --language spanish -o hello_es.wav
# Французский
.build/release/audio speak "Bonjour le monde" --engine cosyvoice --language french -o hello_fr.wav
Клонирование голоса
Клонируйте любой голос из короткого референсного аудиофрагмента с помощью флага --voice-sample. CosyVoice3 использует эмбеддер диктора CAM++, чтобы извлечь 192-мерный вектор, который кондиционирует DiT-модель потока.
# Клонирование голоса
.build/release/audio speak "Hello in your voice" --engine cosyvoice --voice-sample reference.wav -o cloned.wav
# Кросс-языковой режим: клонировать голос, говорить по-немецки
.build/release/audio speak "Guten Tag" --engine cosyvoice --voice-sample reference.wav --language german -o german.wav
Как это работает
- Эмбеддер диктора CAM++ извлекает 192-мерный вектор из референсного аудио через CoreML (Neural Engine)
- Аффинная проекция (192 → 80) кондиционирует декодер DiT flow matching на целевом голосе
- Вокодер HiFi-GAN преобразует кондиционированную на дикторе мел-спектрограмму в аудио 24 кГц
Эмбеддер диктора
| Свойство | Значение |
|---|---|
| Модель | CAM++ (Context-Aware Masking++) |
| Эмбеддинг | 192 измерения |
| Бэкенд | CoreML (Neural Engine, FP16) |
| Размер | ~14 МБ |
| HuggingFace | aufklarer/CamPlusPlus-Speaker-CoreML |
Модель CAM++ скачивается автоматически при первом использовании --voice-sample. Рекомендации по референсному аудио и Swift API см. в руководстве Клонирование голоса.
Многоголосый диалог
Синтезируйте диалог между несколькими дикторами, используя инлайновые теги спикеров. Каждому спикеру назначается голос из референсного аудио через флаг --speakers.
# Диалог на двух спикеров с клонированием голоса
.build/release/audio speak "[S1] Hello there! [S2] Hey, how are you?" \
--engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o dialogue.wav
# Три спикера
.build/release/audio speak "[A] Welcome. [B] Thanks! [C] Glad to be here." \
--engine cosyvoice --speakers a=host.wav,b=guest1.wav,c=guest2.wav -o panel.wav
Имена спикеров в тегах не чувствительны к регистру и сопоставляются с ключами маппинга. Между репликами вставляется настраиваемая пауза (по умолчанию 0.2 с).
| Опция | По умолчанию | Описание |
|---|---|---|
--speakers | Маппинг спикеров: s1=file.wav,s2=file.wav | |
--turn-gap | 0.2 | Пауза между репликами (в секундах) |
--crossfade | 0.0 | Кроссфейд-перекрытие между репликами (в секундах) |
Теги эмоций и стиля
Управляйте стилем речи для каждого сегмента через инлайновые теги эмоций. CosyVoice3 использует текстовый префикс перед токеном <|endofprompt|> как инструкцию стиля — теги эмоций маппятся в инструкции на естественном языке, которые заменяют этот префикс.
# Теги эмоций
.build/release/audio speak "(excited) Wow, amazing! (sad) But I have to go..." \
--engine cosyvoice -o emotion.wav
# Вместе со спикерами
.build/release/audio speak "[S1] (happy) Great news! [S2] (surprised) Really?" \
--engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o combined.wav
# Произвольная инструкция в виде тега
.build/release/audio speak "(Speak like a pirate) Ahoy matey!" \
--engine cosyvoice -o pirate.wav
# Глобальная инструкция (применяется ко всем сегментам без эмо-тегов)
.build/release/audio speak "Hello world" \
--engine cosyvoice --cosy-instruct "Speak cheerfully" -o cheerful.wav
Встроенные теги эмоций
| Тег | Инструкция |
|---|---|
happy / excited | Speak happily and with excitement. |
sad | Speak sadly with a melancholic tone. |
angry | Speak with anger and intensity. |
whispers / whispering | Speak in a soft, gentle whisper. |
laughs / laughing | Speak while laughing. |
calm | Speak calmly and peacefully. |
surprised | Speak with surprise and amazement. |
serious | Speak in a serious, formal tone. |
Неизвестные теги передаются как произвольные инструкции, поэтому (Speak in a slow, dramatic voice) работает как есть.
Сэмплирование
Этап LLM использует следующую конфигурацию сэмплирования:
| Параметр | Значение |
|---|---|
| Top-k | 25 |
| Top-p | 0.8 |
| Repetition Aware Sampling | Включено (window=10, tau_r=0.1) |
Repetition Aware Sampling (RAS) из VALL-E 2 штрафует токены, которые встречались в последних 10 сгенерированных токенах. Это предотвращает повторяющиеся аудиоартефакты и повышает стабильность вывода.
Производительность
На M2 Max CosyVoice3 показывает RTF около 0.5 — быстрее реального времени.
| Этап | Задержка |
|---|---|
| LLM (скомпилированный) | ~13 мс/токен |
| DiT Flow Matching | 370 – 520 мс |
| HiFi-GAN | 50 – 170 мс |
Этап LLM использует compile(shapeless: true) для авторегрессивного цикла, что исключает накладные расходы на перекомпиляцию при переменной длине последовательности. Batch-doubled CFG уменьшает число прямых проходов DiT с 20 до 10.