VoxCPM2

VoxCPM2 は OpenBMB が公開した、トークナイザ不要・拡散×自己回帰の 20 億パラメータ TTS モデルです。30 言語で 48 kHz スタジオ品質の音声を合成し、ゼロショット合成、単一参照によるボイスクローン、自然言語によるボイスデザイン(例:「a young female voice, warm and gentle」)の 3 つの生成モードを備えます。Apple Silicon では MLX 上で bf16 / int8 / int4 ネイティブに動作 — 8 文テストハーネスでは int8 が Qwen3-ASR ラウンドトリップで WER 0%、RTF ≈ 1.0 を達成しています。

概要

アーキテクチャ

5 つの構成要素が連携して 48 kHz 波形を生成します:

コンポーネント説明
MiniCPM-4 base LM28 層の MiniCPM-4。LongRoPE、GQA(16 Q / 2 KV ヘッド、ヘッド次元 128)、SwiGLU MLP。テキストトークン + 音声潜在で条件付け。
Residual LM回転埋め込みを持たない 8 層 MiniCPM-4 派生。生成された音声パッチごとに基本 LM の隠れ状態を精製します。
FSQ + Local DiT estimatorスカラー量子化された隠れ状態が 12 層 Diffusion Transformer(V2)を駆動し、64 次元の音声潜在をパッチ 4 で処理します。CFG-zero-star Euler ソルバ、デフォルト 10 ステップ。
AudioVAE V2因果畳み込みデコーダ。16 kHz 参照音声を読み込み、48 kHz 波形を出力(3× アップサンプリング内蔵)。
Stop ヘッドLM 隠れ状態に対するステップごとの 2 値分類器。argmax = 1 で minTokens パッチ以降の生成を終了します。

バンドル

上流の PyTorch openbmb/VoxCPM2 チェックポイントから変換した 3 つの量子化バリアント。量子化は LM / 残差 LM / DiT 推定器 / 投影ヘッド内の Linear に適用され、AudioVAE ボコーダは音質維持のため fp16/bf16 のまま残します。

バンドル量子化サイズHuggingFace
bf16なし(リファレンス)~5.0 GBaufklarer/VoxCPM2-MLX-bf16
int8MLX QuantizedLinear, group size 64~3.0 GBaufklarer/VoxCPM2-MLX-int8
int4MLX QuantizedLinear, group size 64~1.9 GBaufklarer/VoxCPM2-MLX-int4

ラウンドトリップ ASR(Qwen3-ASR 0.6B、8 文ハーネス、M シリーズ Apple Silicon):

バリアントWERRTF
bf162.04 %1.38
int80.00 %1.02
int44.08 %0.83

推奨は int8 — LM パスでは上流 Python パイプラインとビット単位で一致しつつ、bf16 より高速で 40 % 軽量。int4 は WER が許容範囲内に収まる最小バンドルで、カジュアル用途向けです。

クイックスタート

import VoxCPM2TTS

let tts = try await VoxCPM2TTSModel.fromPretrained()  // defaults to bf16
let audio = try await tts.generate(text: "Hello from VoxCPM2.", language: "english")
// audio: [Float] at 48 kHz mono

明示的に model ID を渡せば int8 / int4 バンドルを選択できます:

let tts = try await VoxCPM2TTSModel.fromPretrained(
    modelId: "aufklarer/VoxCPM2-MLX-int8"
)

ボイスデザイン(指示文ベース)

自然言語のスタイル記述を渡すと、参照音声なしでもその記述に従って合成されます:

let audio = try await tts.generateVoxCPM2(
    text: "Welcome to the show.",
    instruct: "A young woman, gentle and warm voice."
)

ボイスクローン

16 kHz モノラル参照クリップからの単一参照クローン:

let ref = try AudioFileLoader.load(url: URL(fileURLWithPath: "speaker.wav"),
                                   targetSampleRate: 16000)
let audio = try await tts.generateVoxCPM2(
    text: "This is a cloned voice.",
    refAudio: ref
)

Ultimate cloning — 参照音声と対応する書き起こしを両方渡すと、LM は語彙的文脈も条件にし、韻律やアクセントをより忠実に保持します:

let audio = try await tts.generateVoxCPM2(
    text: "Hello from the cloned voice.",
    refAudio: ref,
    promptText: "this is what the reference clip actually said",
    promptAudio: ref
)

CLI

speech speak "Hello there." \
    --engine voxcpm2 \
    --voxcpm2-variant int8 \
    --output hello.wav

# Voice design
speech speak "Welcome to the show." \
    --engine voxcpm2 \
    --voxcpm2-instruct "A young woman, gentle and warm voice." \
    --output design.wav

# Voice cloning
speech speak "This is a cloned voice." \
    --engine voxcpm2 \
    --voice-sample speaker.wav \
    --output clone.wav

フラグ:--voxcpm2-variant {bf16,int8,int4}--voxcpm2-instruct--voxcpm2-ref-audio--voxcpm2-prompt-audio + --voxcpm2-prompt-text--voxcpm2-cfg-value--voxcpm2-timesteps--voxcpm2-max-tokens--voxcpm2-min-tokens、再現可能な合成のための --seed

speech-swift の TTS モジュールから選ぶ

Kokoro-82MQwen3-TTSCosyVoice3VoxCPM2VibeVoice 1.5B
パラメータ82M0.6 / 1.7 B0.5B2B1.5B
サンプルレート24 kHz24 kHz24 kHz48 kHz24 kHz
バックエンドCoreML (ANE)MLX, CoreMLMLXMLXMLX
言語数1010930EN + ZH
ボイスデザイン固定プリセット指示文駆動
ボイスクローンICL リファレンスゼロショット参照参照 + ultimate音声 + 書き起こし
長尺短〜中尺ストリーミングストリーミングパッチストリーミング最大 90 分
VoxCPM2 を選ぶべきとき

48 kHz 出力(音楽/放送用途)が必要、あるいは参照音声なしの自然言語ボイスデザインが必要なときに最適です。最高品質の英語短尺 TTS をより小さなダウンロードで使いたい場合は CosyVoice3 または Qwen3-TTS が軽量。EN/ZH の長尺ポッドキャストやオーディオブックには VibeVoice 1.5B が専用設計です。

責任ある利用

ボイスクローン機能を含みます。クローンする声についてはあらかじめ同意を得てください。なりすまし、偽情報の生成、詐欺などには利用しないでください。詳細な安全ガイダンスは openbmb/VoxCPM2 を参照してください。