VoxCPM2

VoxCPM2는 OpenBMB가 공개한 토크나이저가 없는 20억 매개변수 확산-자기회귀 TTS 모델입니다. 30개 언어에서 48 kHz 스튜디오 품질 오디오를 합성하며, 제로샷 합성 / 단일 참조 음성 복제 / 자연어 음성 디자인("a young female voice, warm and gentle")의 세 가지 운영 모드를 제공합니다. 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 은닉 상태에 대한 스텝별 이진 분류기. 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를 참고하십시오.