Mac で VoxCPM2 音声クローン
MLX を使って Apple Silicon 上で VoxCPM2 をローカル実行し、録音から声を複製したり、文章で声を設計したりできます。OpenBMB のこのモデルは 30 言語で 48 kHz 音声を生成します。まず例を聴き、参照録音と正確な書き起こしを使って CLI を試してください。
音声サンプル · CLI で声を複製する · VoxCPM2 と Qwen3-TTS の比較
音声クローンのサンプル
これらの英語音声は公開済みの FLEURS 比較から引用しています。参照音声と生成音声の文章は異なります。出力はそれぞれ代表サンプル一つであり、比較指標は複数の音声を集計した値です。
参照音声の書き起こし: One can only wonder what the keyboard will become when something newer comes along.
生成する文章: While he was working at the hospital Liggins began to investigate premature labor during his spare time.
生成する文章: While he was working at the hospital Liggins began to investigate premature labor during his spare time.
CLI で声を複製する
参照音声を reference.wav として保存してください。コマンドには録音の正確な書き起こしを指定しています。自分の音声を使う場合は録音と書き起こしの両方を置き換えてください。
speech speak "Hello from the cloned voice." \
--engine voxcpm2 \
--voxcpm2-variant bf16 \
--voice-sample reference.wav \
--voxcpm2-prompt-audio reference.wav \
--voxcpm2-prompt-text "One can only wonder what the keyboard will become when something newer comes along." \
--seed 42 \
--output clone.wav
概要
- 48 kHz 出力 — このスタックでスタジオ・サンプルレートをオンデバイスで扱える唯一のエンジン。他の TTS は 24 kHz が上限です。
- ボイスデザイン — 自然言語によるスタイル制御:
--voxcpm2-instruct "young female voice, warm and gentle"。他のエンジンにはこの機能はありません。 - ボイスクローン — 16 kHz 1 クリップから単一参照クローン;参照音声 + 書き起こしの「ultimate cloning」で韻律をより忠実に再現できます。
- 30 言語 — 英語、中国語、インドネシア語、日本語、韓国語ほか。テキストから自動判定します。
- Apache 2.0 — モデル重みは上流 openbmb のライセンスを継承、Swift 移植も同様です。
アーキテクチャ
5 つの構成要素が連携して 48 kHz 波形を生成します:
| コンポーネント | 説明 |
|---|---|
| MiniCPM-4 base LM | 28 層の 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 パッチ以降の生成を終了します。 |
バンドル
現在の CLI は、上流の openbmb/VoxCPM2 チェックポイントから変換した bf16 と int8 バンドルに対応しています。言語モデルと拡散モデルの射影層を量子化し、音声デコーダーは全精度を維持します。
| バンドル | 量子化 | サイズ | HuggingFace |
|---|---|---|---|
| bf16 | なし(リファレンス) | ~5.0 GB | aufklarer/VoxCPM2-MLX-bf16 |
| int8 | MLX QuantizedLinear, group size 64 | ~3.0 GB | aufklarer/VoxCPM2-MLX-int8 |
ラウンドトリップ ASR(Qwen3-ASR 0.6B、8 文ハーネス、M シリーズ Apple Silicon):
| バリアント | WER | RTF |
|---|---|---|
| bf16 | 2.04 % | 1.38 |
| int8 | 0.00 % | 1.02 |
| int4 (廃止済み) | 4.08 % | 0.83 |
CLI の既定値は bf16 です。ダウンロード容量を抑える場合は int8 を選んでください。int4 は廃止され、表には過去の測定値としてのみ残しています。
クイックスタート
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
int8 バンドルを明示的に選択:
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}、--voxcpm2-instruct、--voxcpm2-ref-audio、--voxcpm2-prompt-audio + --voxcpm2-prompt-text、--voxcpm2-cfg-value、--voxcpm2-timesteps、--voxcpm2-max-tokens、--voxcpm2-min-tokens、再現可能な合成のための --seed。
VoxCPM2 と Qwen3-TTS の比較
公開済みの英語測定結果です。モデルごとに FLEURS の参照・対象音声を十組使い、WER と UTMOS は平均、RTF は中央値を示します。WER と RTF は低いほど良く、UTMOS は自然さの予測値で、人による評価ではありません。普遍的な順位を示す結果ではありません。
| モデル | WER ↓ | RTF ↓ | UTMOS ↑ |
|---|---|---|---|
| VoxCPM2 bf16 | 1.8% | 1.11 | 2.97 |
| Qwen3-TTS Base 1.7B bf16 ICL | 2.4% | 1.70 | 3.50 |
speech-swift の TTS モジュールから選ぶ
| Kokoro-82M | Qwen3-TTS | CosyVoice3 | VoxCPM2 | VibeVoice 1.5B | |
|---|---|---|---|---|---|
| パラメータ | 82M | 0.6 / 1.7 B | 0.5B | 2B | 1.5B |
| サンプルレート | 24 kHz | 24 kHz | 24 kHz | 48 kHz | 24 kHz |
| バックエンド | CoreML (ANE) | MLX, CoreML | MLX | MLX | MLX |
| 言語数 | 10 | 10 | 9 | 30 | EN + ZH |
| ボイスデザイン | 固定プリセット | — | — | 指示文駆動 | — |
| ボイスクローン | — | ICL リファレンス | ゼロショット参照 | 参照 + ultimate | 音声 + 書き起こし |
| 長尺 | 短〜中尺 | ストリーミング | ストリーミング | パッチストリーミング | 最大 90 分 |
48 kHz 出力(音楽/放送用途)が必要、あるいは参照音声なしの自然言語ボイスデザインが必要なときに最適です。最高品質の英語短尺 TTS をより小さなダウンロードで使いたい場合は CosyVoice3 または Qwen3-TTS が軽量。EN/ZH の長尺ポッドキャストやオーディオブックには VibeVoice 1.5B が専用設計です。
責任ある利用
ボイスクローン機能を含みます。クローンする声についてはあらかじめ同意を得てください。なりすまし、偽情報の生成、詐欺などには利用しないでください。詳細な安全ガイダンスは openbmb/VoxCPM2 を参照してください。