استنساخ الصوت باستخدام VoxCPM2 على Mac
شغّل VoxCPM2 محليًا على Apple Silicon مع MLX لاستنساخ صوت أو تصميمه بوصف نصي. ينتج نموذج OpenBMB كلامًا بتردد 48 kHz في 30 لغة. استمع إلى الأمثلة، ثم جرّب 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 — المحرّك الوحيد على الجهاز ضمن هذه الحزمة بمعدّل عيّنات استوديو. بقية وحدات تركيب الكلام تبلغ 24 kHz كحدّ أقصى.
- تصميم الصوت — تحكّم في الأسلوب بلغة طبيعية:
--voxcpm2-instruct "young female voice, warm and gentle". لا يُتيح هذا أيُّ محرّك آخر. - استنساخ الصوت — استنساخ بمرجع واحد من مقطع 16 kHz؛ و"الاستنساخ النهائي" (صوت مرجعي + نصّ تفريغه) للحفاظ على البروزودي بأمانة أكبر.
- 30 لغة — الإنجليزية والصينية والإندونيسية واليابانية والكورية وغيرها. الكشف تلقائي من النصّ.
- Apache 2.0 — تَرِث أوزان النموذج رخصة openbmb من المصدر؛ ومنفذنا بلغة Swift يلتزم بالشيء نفسه.
البنية
خمسة مكوّنات متعاونة لإنتاج موجة الكلام بـ 48 kHz:
| المكوِّن | الوصف |
|---|---|
| MiniCPM-4 base LM | MiniCPM-4 من 28 طبقة مع LongRoPE وGQA (16 رأس Q / 2 KV، بُعد رأس 128) وMLP من نوع SwiGLU. يُشترَط على رموز النصّ + كُمونات الصوت. |
| Residual LM | متغيّر MiniCPM-4 من 8 طبقات بدون تضمينات دورانية. يُحسِّن الحالة المخفيّة لـ LM الأساس لكلّ patch صوتيّ مُولَّد. |
| FSQ + Local DiT estimator | حالات مخفيّة مُكمَّمة سُلَّميًّا تُغذّي Diffusion Transformer (V2) من 12 طبقة يعمل على كُمونات صوت بـ 64 بُعدًا في patches من 4. حالّ Euler بنوع CFG-zero-star، 10 خطوات افتراضيًّا. |
| AudioVAE V2 | مفكِّك تلافيفيّ سببيّ. يقرأ صوتًا مرجعيًّا بـ 16 kHz ويُصدر الموجة بـ 48 kHz (مع رفع عيّنات 3× مدمج). |
| Stop head | مُصنِّف ثنائيّ لكلّ خطوة على الحالة المخفيّة لـ LM. عند argmax = 1 ينتهي التوليد بعد minTokens من الـ patches. |
الحزم
يدعم CLI الحالي حزمتَي bf16 وint8 المحوّلتين من نقطة التحقق الأصلية openbmb/VoxCPM2. تُكمّم إسقاطات نموذج اللغة والانتشار، بينما يحتفظ مفكّك الصوت بالدقة الكاملة.
| الحزمة | الكَمَّنة | الحجم | HuggingFace |
|---|---|---|---|
| bf16 | لا شيء (مرجعيّ) | ~5.0 GB | aufklarer/VoxCPM2-MLX-bf16 |
| int8 | MLX QuantizedLinear، حجم المجموعة 64 | ~3.0 GB | aufklarer/VoxCPM2-MLX-int8 |
رحلة الذهاب والإياب عبر ASR (Qwen3-ASR 0.6B، مجموعة 8 جُمل، Apple Silicon من السلسلة M):
| الصيغة | 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
)
الاستنساخ النهائيّ — مرِّر الصوت المرجعيّ ونصّ تفريغه معًا كي يُشترَط 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
| 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 | مرجع zero-shot | مرجع + نهائيّ | صوت خامّ + تفريغ |
| طويل المدى | قصير / متوسّط | بثّ | بثّ | بثّ على هيئة patches | حتى 90 دقيقة |
…تحتاج إلى إخراج بـ 48 kHz (تطبيقات الموسيقى / البثّ الإذاعيّ) أو إلى تصميم صوت بلغة طبيعية دون مقطع مرجعيّ. للحصول على تركيب كلام إنجليزيّ قصير بأعلى جودة وبحجم تنزيل أصغر، فإنّ CosyVoice3 أو Qwen3-TTS أخفّ. أمّا للبودكاست والكتب الصوتية الطويلة المدى بالإنجليزية/الصينية، فإنّ VibeVoice 1.5B مصمَّم لذلك خصيصًا.
الاستخدام المسؤول
استنساخ الصوت مُتاح. احصل على إذن لأيّ صوت تستنسخه، ولا تستخدم النموذج لانتحال شخصيّات أو لتوليد معلومات مضلِّلة أو ارتكاب احتيال. تنطبق الإرشادات الأمنية الكاملة من openbmb/VoxCPM2.