クローンがローカルで動くと変わる四つのこと。
デバイス上でクローンを動かすと四つの性質が一度に解放されます——プライバシー、オフライン利用、呼び出しごとのコストなし、そして声の完全な所有権。どれも、他のやり方では作りにくい製品の一群を開きます。
親が読む 30 秒を録音します。オーディオブックアプリはその声で任意の章を朗読します——同じ温かさ、同じアクセントで、セッションごとにローカル生成。
YouTuber やポッドキャスターは 30 言語で一貫した声を保ちます。英語で一度録れば、同じ回を日本語・スペイン語・ヒンディー語で、声優陣なしに出せます。
声を失いかけている人は短いクリップに声を保存し、汎用 TTS エンジンではなく自分らしく聞こえる支援技術で話し続けられます。
欲しい声を記述するだけ——"若い女性、優しく温かい声"——でモデルは参照録音なしにそれを設計します。ゲームの NPC、キオスクの案内、ブランド音声の A/B テストに便利。
VoxCPM2 と ElevenLabs の比較。
ElevenLabs は分かりやすいクラウド API の代替です。トレードオフは何がどこで動くか——そしてその後、声は誰のものか。
プライバシー保証、オフライン動作、呼び出しごとのゼロコストが必要な製品には、オンデバイスのクローンが唯一の選択肢です——ElevenLabs の呼び出しは毎回、音声を彼らのサーバーへアップロードします。
| VoxCPM2(Soniqo) | ElevenLabs | |
|---|---|---|
| どこで動くか | ユーザーのデバイス上 | ホスト型 API |
| 音声がデバイスを出るか | いいえ | はい(ElevenLabs へアップロード) |
| オフライン利用 | はい | いいえ(インターネットが必要) |
| 呼び出しごとのコスト | なし | 文字単位の課金 |
| モデルライセンス | Apache 2.0、オープンな重み | プロプライエタリ、SaaS のみ |
| 最大出力サンプルレート | 48 kHz ネイティブ | 48 kHz(Pro 層以上) |
| 言語 | 30 | 29(Multilingual v2)· 70+(Eleven v3) |
| 必要な参照クリップ | 5–30 秒 | 1 分(Instant)· 30 分(Professional) |
| テキストからの声の設計 | はい | はい |
どちらのエンジンも 48 kHz に達し、どちらも日常のクローン向けに似た言語幅をサポートし、どちらもテキスト記述からの声の設計を提供します。本当の違いは、音声がそもそもデバイスを出るかどうかです。
一つのモデル、三つの入り口。
モデルはどの呼び出しでも同じです。変わるのは渡す引数——それが、記述から声を設計するのか、録音済みの声を写すのか、アクセントを保つのかを決めます。
声を自然言語で記述します。モデルは合う声を選び、呼び出し間で一貫性を保ちます。
let audio = try await tts.generateVoxCPM2(
text: "Welcome to the show.",
instruct: "A young woman, gentle and warm voice."
)5〜30 秒のクリーンな音声を渡します。モデルは音色とリズムを写し、その声で新しいテキストを合成します。
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
)クリップと、その書き起こしの両方を渡します。モデルは音響特徴を音素と揃えられます——アクセントと母音の選択が引き継がれます。
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
)同じ入力スロットに、違う部品を詰めます。モデルはフラグを見ることはありません——シーケンスを読みます。
VoxCPM2 はどう音声を作るか。
協調する四つのモジュール。モデルを使うのにこれを知る必要はありませんが、48 kHz がどこから来るのか気になるなら——ここにあります。
パイプラインはローカルエンコーダ(LocEnc)から始まり、テキストトークンと(任意の)参照音声を一つのベクトル列に融合します。その列が TSLM——次にどの音声「パッチ」が来るかを、テキスト LM が次のトークンを選ぶのと同じように決める、28 層の MiniCPM-4 言語モデル——に入ります。RALMへの 2 度目のパスが各パッチを精緻化します。
ここまでは全部トランスフォーマーです。面白いひねりは LocDiTです。離散音声トークンの固定語彙から選ぶのではなく、小さな拡散プロセスを走らせて各スロットの音声潜在を「描き」ます。離散コーデックがない=量子化のボトルネックがない——それが最終段の AudioVAE V2 をそのまま 48 kHz へデコードさせます。このスタックの他のオンデバイスエンジンはどれも 24 kHz で頭打ちです。
この分担は注目に値します。自己回帰 LM は次に来るべきもの(内容・リズム・長さ)を決めるのが得意で、拡散ヘッドは音響の細部(位相・スペクトル)を描くのが得意です。VoxCPM2 は各々に得意なことをさせます。だからこのモデルはわずか 2B パラメータで踏みとどまります——知覚品質を稼ぐのはアーキテクチャであって、サイズではありません。
元の研究を読む。
三つのサイズ。ディスク予算で選ぶ。
三つのバンドルは同じアーキテクチャで動きます。違うのは言語モデルをどれだけ積極的に量子化するかだけです。int8 バンドルが推奨のデフォルトです——8 文の往復ベンチマークで上流の Python パイプラインに並びつつ、bf16 より速く 40% 小さくなります。
| バンドル | サイズ | 向き |
|---|---|---|
| bf16 | ~5.0 GB | 参照 / デバッグ。 |
| int8 既定 | ~3.0 GB | 日常のクローン、オーディオブック、ポッドキャスト。 |
| int4 | ~1.9 GB | ディスク制約のあるデプロイ。 |
CLI から。
# Voice design — no reference clip
speech speak "Welcome to the show." \
--engine voxcpm2 \
--voxcpm2-instruct "A young woman, gentle and warm voice." \
--output design.wav
# Reference cloning — 5–30 s clean clip
speech speak "This is a cloned voice." \
--engine voxcpm2 \
--voxcpm2-variant int8 \
--voice-sample speaker.wav \
--output clone.wav