โคลนเสียงด้วย VoxCPM2 บน Mac

รัน VoxCPM2 ในเครื่อง Apple Silicon ด้วย MLX เพื่อโคลนเสียงหรือออกแบบเสียงจากคำอธิบาย โมเดล OpenBMB นี้สร้างเสียง 48 kHz ได้ 30 ภาษา ฟังตัวอย่างแล้วลอง CLI ด้วยไฟล์เสียงอ้างอิงและข้อความถอดเสียงที่ตรงกัน

ตัวอย่างเสียง · โคลนเสียงด้วย CLI · เปรียบเทียบ VoxCPM2 กับ Qwen3-TTS

ตัวอย่างการโคลนเสียง

คลิปภาษาอังกฤษเหล่านี้มาจากการเปรียบเทียบ FLEURS ที่เผยแพร่แล้ว เสียงอ้างอิงและเสียงที่สร้างใช้คนละประโยค แต่ละเอาต์พุตเป็นตัวอย่างหนึ่งคลิป ส่วนค่าการเปรียบเทียบสรุปจากหลายคลิป

เสียงอ้างอิงภาษาอังกฤษ · 16 kHz

ข้อความถอดเสียงอ้างอิง: One can only wonder what the keyboard will become when something newer comes along.

VoxCPM2 bf16ภาษาอังกฤษ · 48 kHz

ข้อความที่สร้าง: While he was working at the hospital Liggins began to investigate premature labor during his spare time.

Qwen3-TTS Base 1.7B bf16 ICLภาษาอังกฤษ · 24 kHz

ข้อความที่สร้าง: 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:

องค์ประกอบคำอธิบาย
MiniCPM-4 base LMMiniCPM-4 28 ชั้นพร้อม LongRoPE, GQA (16 หัว Q / 2 หัว KV, head dim 128) และ MLP SwiGLU กำหนดเงื่อนไขด้วยโทเค็นข้อความ + latent เสียง
Residual LMรุ่นย่อย MiniCPM-4 8 ชั้นโดยไม่มี rotary embedding ปรับ hidden state ของ base LM ต่อแต่ละ patch เสียงที่สร้าง
FSQ + Local DiT estimatorHidden state ที่ quantize แบบ scalar ขับเคลื่อน Diffusion Transformer (V2) 12 ชั้นที่ทำงานบน latent เสียง 64 มิติเป็น patch ละ 4 Solver Euler CFG-zero-star ค่าเริ่มต้น 10 timestep
AudioVAE V2ตัวถอดรหัส convolutional แบบ causal อ่านเสียงอ้างอิง 16 kHz และส่งรูปคลื่น 48 kHz ออกมา (upsample 3× ฝังในตัว)
Stop headตัวจำแนกแบบ binary ต่อขั้นตอนบน hidden state ของ LM Argmax = 1 จะจบการสร้างหลังจาก minTokens patch

ชุดต่างๆ

CLI ปัจจุบันรองรับชุด bf16 และ int8 ที่แปลงจากเช็กพอยต์ต้นฉบับ openbmb/VoxCPM2 โดยควอนไทซ์ส่วนฉายภาพของโมเดลภาษาและดิฟฟิวชัน ส่วนตัวถอดรหัสเสียงคงความแม่นยำเต็มรูปแบบ

ชุดการ quantizeขนาดHuggingFace
bf16ไม่มี (อ้างอิง)~5.0 GBaufklarer/VoxCPM2-MLX-bf16
int8MLX QuantizedLinear, group size 64~3.0 GBaufklarer/VoxCPM2-MLX-int8

Round-trip ASR (Qwen3-ASR 0.6B, ชุดทดสอบ 8 ประโยค, Apple Silicon รุ่น M):

รุ่นWERRTF
bf162.04 %1.38
int80.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."
)

การโคลนเสียง

การโคลนจากคลิปอ้างอิง mono ที่ 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

Flag: --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 bf161.8%1.112.97
Qwen3-TTS Base 1.7B bf16 ICL2.4%1.703.50

การเปรียบเทียบโคลนเสียงห้าภาษาและวิธีวัด.

เลือกโมดูล TTS ใดใน speech-swift

Kokoro-82MQwen3-TTSCosyVoice3VoxCPM2VibeVoice 1.5B
พารามิเตอร์82M0.6 / 1.7 B0.5B2B1.5B
อัตราการสุ่ม24 kHz24 kHz24 kHz48 kHz24 kHz
BackendCoreML (ANE)MLX, CoreMLMLXMLXMLX
ภาษา1010930EN + ZH
การออกแบบเสียงPreset คงที่——ตามคำสั่ง—
การโคลนเสียง—ICL referenceZero-shot referenceReference + ultimateเสียงดิบ + ทรานสคริปต์
รูปแบบยาวสั้น / ปานกลางStreamingStreamingStreaming ตาม patchยาวถึง 90 นาที
เลือก VoxCPM2 เมื่อ…

…คุณต้องการเอาต์พุต 48 kHz (แอปพลิเคชันดนตรี / การกระจายเสียง) หรือการออกแบบเสียงด้วยภาษาธรรมชาติโดยไม่มีคลิปอ้างอิง สำหรับ TTS รูปแบบสั้นคุณภาพสูงสุดสำหรับภาษาอังกฤษพร้อมการดาวน์โหลดที่เล็กกว่า CosyVoice3 หรือ Qwen3-TTS มีน้ำหนักเบากว่า สำหรับ podcast / หนังสือเสียงรูปแบบยาวใน EN/ZH VibeVoice 1.5B ถูกสร้างเฉพาะเพื่อการนี้

การใช้งานอย่างมีความรับผิดชอบ

มีการรองรับการโคลนเสียง ขอความยินยอมสำหรับเสียงใดๆ ที่คุณโคลน และอย่าใช้โมเดลเพื่อปลอมตัวบุคคล สร้างข้อมูลที่บิดเบือน หรือก่อการฉ้อโกง ใช้คำแนะนำด้านความปลอดภัยฉบับเต็มจาก openbmb/VoxCPM2