چیتشیت
تبدیل متن به گفتار، شبیهسازی صدا و کدکها
Text-to-Speech, Voice Cloning and Codecs
متن به واج، واج به مل، مل به شکلموج؛ شبیهسازی با گیت رضایت و واترمارک؛ و توکنایز صدا با کدکهای RVQ.
فهرست مطالب
پایپلاین TTS و شبیهسازی
معماریوظایف در قالب کد
کار و کد| وظیفه | کد |
|---|---|
| تبدیل به واج (Phonemize) | phonemize("Hello world", language="en-us", backend="espeak") |
| اجرای Kokoro روی CPU | `KPipeline(lang_code="a")`, then `tts(text, voice="af_bella")` |
| شبیهسازی زیروشات | F5TTS().infer(ref_file=<wav>, ref_text=<text>, gen_text=<text>) |
| تبدیل صدا | vc.convert(source=<wav>, target_pool=[<wav>, <wav>]) |
| جایگذاری واترمارک | sc.embed(wav, sr=24000, message=payload) |
| اجرای EnCodec در نرخ 6 kbps | model.set_target_bandwidth(6.0) |
| تفکیک سمانتیک Mimi | `semantic = codes[:, 0]`, `acoustic = codes[:, 1:]` |
| مدل سادهی RVQ | rvq_encode(values, codebook_size=8, n_codebooks=4) |
شبیهسازی و واترمارک
کدpython
from f5_tts.api import F5TTS
tts = F5TTS()
wav = tts.infer(ref_file="my_voice_5s.wav", # مرجع 5 ثانیهای
ref_text="The quick brown fox jumps over the lazy dog.", # باید کاملاً منطبق باشد
gen_text="Please remind me to water the plants.")
sc = SilentCipher(model="2024-06-01")
payload = b"consent_id:abc123;ts:1745353200"
watermarked = sc.embed(wav, sr=24000, message=payload) # ~32 بیت
detected = sc.detect(watermarked, sr=24000) # بایتهای بار داده
کدگذاری با یک کدک
کدpython
model = EncodecModel.encodec_model_24khz()
model.set_target_bandwidth(6.0) # kbps، 8 کتاب کد
with torch.no_grad():
encoded = model.encode(wav)
codes, scale = encoded[0] # (1, n_codebooks, n_frames)
wav_recon = model.decode([(codes, scale)])
mimi = loaders.get_mimi() # از moshi.models
codes = mimi.encode(wav) # (1, 8, frames@12.5Hz)
semantic = codes[:, 0] # محتوا، همتراز با WavLM
acoustic = codes[:, 1:] # طنین صدا، آهنگ گفتار، نویز
گیت احراز رضایت
گامبهگام- گیتتابع
verify_signature(consent_record)باید تایید شود؛ در غیر این صورت خطا: "Signed consent required". - گویندهفیلد
consent_record["speaker_id"]باید با خروجیhash_speaker(ref_audio)برابر باشد. - شبیهسازیفراخوانی
tts.infer(ref_file=ref_audio, gen_text=text). - نشانهگذاریفراخوانی
watermark(wav, payload=consent_record["id"]). - ثبت لاگذخیرهی سوابق رضایت در یک لاگ آشکارساز دستکاری.
فرمولها و اعداد
مفهومها- کوانتیزهسازی RVQ
- کتاب کد 1 خروجی انکودر را کوانتیزه میکند. هر کتاب بعدی، مقدار باقیمانده (residual) را کوانتیزهسازی میکند.
- رمزگشایی
- دیکودر کدهای انتخابشده در هر فریم را با هم جمع میکند.
- واژگان
- 8 کتاب کد 1024 تایی، فضای $1024^8 = 10^{24}$ را تشکیل میدهند.
- توکنهای LM
- برای 10 ثانیه از Mimi نیاز به $10 \times 12.5 \times 8 = 1000$ توکن است.
- بیتهای RVQ ساده
- تعداد 8 کد معادل 3 بیت است. بیت در هر فریم، 3 برابر تعداد کتابهای کد خواهد بود.
- گام پرش مل
- 12.5 میلیثانیه در 24 کیلوهرتز برابر با 300 نمونه است.
- HiFi-GAN
- نرخهای بیشنمونهبرداری 8، 8، 2، 2 ضریب 256 برابری برای تبدیل نرخ مل به نرخ صدا ایجاد میکنند.
اعداد مربوط به کدکها
پیشفرضها| تنظیم | پیشفرض | توضیحات |
|---|---|---|
EnCodec-24k frame rate | 75 Hz | پیشفرض 4 کتاب کد در 1.5 kbps |
DAC-44.1k frame rate | 86 Hz | بالاترین وفاداری صوتی، تمامباند |
SNAC-24k coarse rate | ~12 Hz | جزئیات در فرکانس 50 هرتز |
Mimi frame rate | 12.5 Hz | 8 کتاب کد در 4.4 kbps |
Codes per codebook | 1024 | هر کد عددی بین 0 تا 1023 است |
Codebook count | 8-12 | تعداد بیشتر باعث افزایش وفاداری و طول دنباله میشود |
Kokoro output | 24 kHz | بازنمونهبرداری برای ورودیهای 16 کیلوهرتز |
مدلها
مفهومها- Tacotron 2
- یک معماری seq2seq خودبازگشتی؛ کند و دارای نوسان روی متنهای طولانی.
- FastSpeech 2
- با پیشبینیکننده دیرش، تکپاس، 10 برابر سریعتر از Tacotron.
- VITS
- ترکیب انکودر، جریان کاری دیرش و HiFi-GAN؛ آموزش سرتاسری؛ 25 میلیونی.
- F5-TTS
- ترنسفورمر دیفیوژن مبتنی بر انطباق جریان؛ شبیهسازی از 5 ثانیه؛ 335 میلیونی.
- Kokoro
- مدل 82 میلیونی، قابل اجرا روی CPU، فقط انگلیسی.
- KNN-VC
- هر فریم منبع WavLM را با نزدیکترین فریم در مخزن هدف تعویض میکند.
- Mimi
- کتاب کد 0 از WavLM تقطیر شده است؛ کتابهای کد 1 تا 7 آکوستیک هستند.
کوتهنوشتها
اصطلاحها- TTS
- تبدیل متن به گفتار؛ فرانتاند متن، مدل آکوستیک، ووکوودر.
- VC
- تبدیل صدا؛ بازنویسی گفتار گویندهی A با صدای گویندهی B.
- PPG
- پوستریوگرام واجی؛ احتمالات پسین ASR در هر فریم به عنوان محتوا.
- RVQ
- کوانتیزهسازی برداری باقیمانده؛ آبشاری از کتابهای کد کوچک.
- SECS
- شباهت کسینوسی امبدینگ گوینده؛ مقادیر بالای 0.70 برای اکثر شنوندگان غیرقابلتشخیص است.
- UTMOS
- پیشبینیکننده MOS بدون نیاز به مرجع؛ امتیاز حقیقت پایه 4.08 است.
- CMOS
- امتیاز MOS مقایسهای؛ اولویت ترجیح A در برابر B.
- PESQ / ViSQOL
- معیارهای عینی با همبستگی بالا نسبت به MOS.
عیبیابی
عیبیابیخواندن "Dr." به صورت "Drive"
- علت
- نبود نرمالساز متن
- راهحل
- نرمالسازی قبل از Phonemizer
تلفظ اشتباه نامهای خاص
- علت
- توکن خارج از واژگان (OOV)
- راهحل
- اضافه کردن یک مدل G2P به عنوان طرح پشتیبان
تجاوز دامنهی خروجی از بازهی ±1.0
- علت
- عدم تطابق در مقیاسگذاری مل
- راهحل
np.clip(wav, -1, 1)
تداخل فرکانسی در ادامهی پایپلاین
- علت
- ورود صدای 24 کیلوهرتز Kokoro به یک پایپلاین 16 کیلوهرتز
- راهحل
- بازنمونهبرداری (Resample)
بههمریختن همترازی شبیهسازی
- علت
- تفاوت متن مرجع با صدای ارائهشده
- راهحل
- تطابق دقیق متن با صدا حتی علائم نگارشی
اکو در صدای شبیهسازیشده
- علت
- وجود طنین و ریورب در صدای مرجع
- راهحل
- ضبط صدای خشک و استفاده از میکروفون نزدیک
ماندن لهجه در شبیهسازی فرانسوی
- علت
- نشت زبان
- راهحل
- استفاده از XTTS یا VALL-E X
خطای خاموش و بدون هشدار LM
- علت
- نرخ 12.5 هرتز در Mimi و سپس 50 هرتز در EnCodec
- راهحل
- یکسان نگهداشتن نرخ فریم
چه زمانی استفاده کنیم؟
نکتهها- انگلیسی آنی روی CPU: استفاده از Kokoro.
- شبیهسازی بر اساس مرجع 5 ثانیهای: استفاده از F5-TTS یا OpenVoice v2.
- بازنویسی گفتار با صدای هدف: استفاده از KNN-VC یا Diff-HierVC.
- مدل زایشی روی صدا: شروع با Mimi یا SNAC.
- پایپلاین فشردهسازی: استفاده از Opus؛ بالاترین بازدهی به ازای هر بیت.
- بازسازی صدا با بالاترین وفاداری: DAC-44.1k.
- در هر شبیهسازی: قرار دادن واترمارک و ثبت لاگ رضایت.
پرسشها
پرسش و پاسخ- چرا توکنهای سمانتیک و آکوستیک را تفکیک کنیم؟
- توکنهای صرفاً بازسازیشده، خروجی گفتار را از متن مبهم و ناواضح میکنند.
- چرا RVQ به جای یک کتاب کد؟
- یک کتاب کد بزرگ به میلیونها کد نیاز دارد.
- کدام کتاب کد در Mimi مهمتر است؟
- کتاب کد 0؛ حذف آن وضوح و فهم گفتار را از بین میبرد.
- شبیهسازی یا تبدیل صدا؟
- شبیهسازی متن دریافت میکند؛ تبدیل صدا، گفتار ورودی میگیرد.
- فاینتیون چندشات؟
- 5 تا 30 دقیقه از صدای هدف، آموزش LoRA به مدت یک ساعت.