Mac에서 VoxCPM2로 음성 복제

Apple Silicon에서 MLX로 VoxCPM2를 로컬 실행해 녹음된 목소리를 복제하거나 텍스트 설명으로 목소리를 설계하세요. OpenBMB의 이 모델은 30개 언어로 48 kHz 음성을 생성합니다. 먼저 샘플을 듣고 참조 녹음과 정확한 전사문으로 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

개요

아키텍처

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 은닉 상태에 대한 스텝별 이진 분류기. argmax = 1이면 minTokens 패치 이후 생성을 종료합니다.

번들

현재 CLI는 원본 openbmb/VoxCPM2 체크포인트에서 변환한 bf16 및 int8 번들을 지원합니다. 언어 모델과 확산 모델의 투영층을 양자화하고 오디오 디코더는 전체 정밀도를 유지합니다.

번들양자화크기HuggingFace
bf16없음(참조)~5.0 GBaufklarer/VoxCPM2-MLX-bf16
int8MLX QuantizedLinear, group size 64~3.0 GBaufklarer/VoxCPM2-MLX-int8

라운드트립 ASR(Qwen3-ASR 0.6B, 8문장 테스트, M 시리즈 Apple Silicon):

변형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."
)

음성 복제

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

5개 언어 음성 복제 비교와 측정 방법.

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를 참고하십시오.