CosyVoice3

Fun-CosyVoice3-0.5B — это потоковая модель синтеза речи с поддержкой 9 языков. Она использует пайплайн из трёх этапов — генерация токенов LLM, DiT flow matching и вокодинг HiFi-GAN — чтобы получать естественную речь 24 кГц из входного текста.

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

ЯзыкКод
Китайскийchinese
Английскийenglish
Японскийjapanese
Корейскийkorean
Немецкийgerman
Испанскийspanish
Французскийfrench
Итальянскийitalian
Русскийrussian

Пайплайн

CosyVoice3 синтезирует речь в три этапа:

  1. LLM — Qwen2.5-0.5B в качестве основы генерирует FSQ-токены речи (Finite Scalar Quantization) из текста
  2. DiT Flow Matching — 22-слойный Diffusion Transformer преобразует речевые токены в мел-спектрограммы через интегрирование Euler ODE
  3. 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 шагов
Коэффициент CFG0.7

Вокодер HiFi-GAN

Вокодер Neural Source Filter (NSF), преобразующий мел-спектрограммы в сигнал.

ПараметрЗначение
Гармоники8
Коэффициент апсемпла480× (8 × 5 × 3 × ISTFT 4)
ISTFTn_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

Как это работает

  1. Эмбеддер диктора CAM++ извлекает 192-мерный вектор из референсного аудио через CoreML (Neural Engine)
  2. Аффинная проекция (192 → 80) кондиционирует декодер DiT flow matching на целевом голосе
  3. Вокодер HiFi-GAN преобразует кондиционированную на дикторе мел-спектрограмму в аудио 24 кГц

Эмбеддер диктора

СвойствоЗначение
МодельCAM++ (Context-Aware Masking++)
Эмбеддинг192 измерения
БэкендCoreML (Neural Engine, FP16)
Размер~14 МБ
HuggingFaceaufklarer/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-gap0.2Пауза между репликами (в секундах)
--crossfade0.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 / excitedSpeak happily and with excitement.
sadSpeak sadly with a melancholic tone.
angrySpeak with anger and intensity.
whispers / whisperingSpeak in a soft, gentle whisper.
laughs / laughingSpeak while laughing.
calmSpeak calmly and peacefully.
surprisedSpeak with surprise and amazement.
seriousSpeak in a serious, formal tone.

Неизвестные теги передаются как произвольные инструкции, поэтому (Speak in a slow, dramatic voice) работает как есть.

Сэмплирование

Этап LLM использует следующую конфигурацию сэмплирования:

ПараметрЗначение
Top-k25
Top-p0.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 Matching370 – 520 мс
HiFi-GAN50 – 170 мс
Компиляция

Этап LLM использует compile(shapeless: true) для авторегрессивного цикла, что исключает накладные расходы на перекомпиляцию при переменной длине последовательности. Batch-doubled CFG уменьшает число прямых проходов DiT с 20 до 10.