CosyVoice3

Fun-CosyVoice3-0.5Bは9言語のストリーミング音声合成モデルです。3段階のパイプライン(LLMトークン生成、DiTフローマッチング、HiFi-GANボコーディング)を使用して、テキスト入力から自然な24 kHzの音声を生成します。

サポート言語

言語コード
中国語chinese
英語english
日本語japanese
韓国語korean
ドイツ語german
スペイン語spanish
フランス語french
イタリア語italian
ロシア語russian

パイプライン

CosyVoice3は3段階で音声を合成します:

  1. LLM — Qwen2.5-0.5Bバックボーンがテキストから FSQ(Finite Scalar Quantization)音声トークンを生成します
  2. DiTフローマッチング — 22レイヤーのDiffusion Transformerが音声トークンをEuler ODE積分によりメルスペクトログラムに変換します
  3. HiFi-GAN — Neural Source Filterボコーダーがメルスペクトログラムを24 kHzの波形に変換します

アーキテクチャ

LLM (Qwen2.5-0.5B)

言語モデルは4ビット量子化され、離散的な音声トークンを自己回帰的に生成します。

パラメーター
レイヤー24
隠れ次元896
クエリヘッド14
キー/バリューヘッド2 (GQA)
FSQ 語彙6561
量子化4ビット

DiT フローマッチング

Diffusion Transformerは、classifier-freeガイダンスを伴う条件付きフローマッチングを使用して、音声トークンをメルスペクトログラムに精密化します。

パラメーター
レイヤー22
次元1024
アテンションヘッド16
条件付けAdaLN (Adaptive Layer Norm)
ODE ソルバーEuler、10ステップ
CFG レート0.7

HiFi-GAN ボコーダー

メルスペクトログラムを波形に変換するNeural Source Filter (NSF) ボコーダー。

パラメーター
高調波8
アップサンプル比480x (8 x 5 x 3 x ISTFT 4)
ISTFTn_fft=16, hop=4
出力サンプリングレート24 kHz

モデルウェイト

モデルサイズHuggingFace
CosyVoice3-0.5B (4ビット LLM)1.2 GBaufklarer/CosyVoice3-0.5B-MLX-4bit

LLM(4ビット量子化)、DiTフローマッチング、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++スピーカーエンコーダーを使用して、DiTフローモデルを条件付ける192次元の埋め込みを抽出します。

# 音声クローン
.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++スピーカーエンコーダーはCoreML(Neural Engine)経由でリファレンス音声から192次元の埋め込みを抽出します
  2. アフィン射影(192 → 80)がDiTフローマッチングデコーダーをターゲット音声に条件付けます
  3. HiFi-GANボコーダーがスピーカー条件付きメルスペクトログラムを24kHz音声に変換します

スピーカーエンコーダー

プロパティ
モデルCAM++ (Context-Aware Masking++)
embedding192次元
バックエンドCoreML (Neural Engine、FP16)
サイズ約14 MB
HuggingFaceaufklarer/CamPlusPlus-Speaker-CoreML

CAM++モデルは--voice-sampleの初回使用時に自動ダウンロードされます。リファレンス音声のヒントとSwift APIについては音声クローンガイドを参照してください。

マルチスピーカー対話

インラインのスピーカータグを使用して、複数のスピーカー間の会話を合成します。各スピーカーは--speakersフラグを介してリファレンス音声ファイルから音声が割り当てられます。

# 音声クローンを伴う2スピーカー対話
.build/release/audio speak "[S1] Hello there! [S2] Hey, how are you?" \
    --engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o dialogue.wav

# 3スピーカー
.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 / excited楽しく、興奮気味に話す。
sad悲しげに、憂鬱な調子で話す。
angry怒りと強さをもって話す。
whispers / whisperingやわらかく、優しいささやきで話す。
laughs / laughing笑いながら話す。
calm穏やかに、平和に話す。
surprised驚きと驚愕をもって話す。
serious真剣で、形式的な調子で話す。

未知のタグは自由形式の指示として通過するので、(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は約0.5のRTFを達成します — リアルタイムより高速です。

ステージレイテンシー
LLM (コンパイル済み)約13 ms/トークン
DiT フローマッチング370 - 520 ms
HiFi-GAN50 - 170 ms
コンパイル

LLMステージは自己回帰ループにcompile(shapeless: true)を使用し、さまざまなシーケンス長にわたる再コンパイルのオーバーヘッドを排除します。バッチ倍増CFGは、DiTフォワードパスの数を20から10に半減します。