نماذج الصوت والكلام
TTS · STT · التوليف الصوتي المتقدم — من الأساسيات إلى النشر
أساسيات معالجة الصوت الرقمي
لفهم نماذج الصوت والكلام، يجب أولاً فهم كيف يُخزَّن الصوت رقمياً وكيف تستخرَج منه الميزات. هذا الفصل يغطي كل ما تحتاجه من أساسيات معالجة الإشارات الصوتية للدخول إلى عالم TTS و STT.
🌊 الموجات الصوتية
الصوت هو تموج ميكانيكي ينتقل عبر الهواء (أو أي وسط) على شكل تغيرات في الضغط. يمكن تمثيله كموجة جيبية (sine wave) بثلاث خصائص أساسية:
- التردد (Frequency) — عدد الذبذبات في الثانية، ويُقاس بالهرتز (Hz). كلما زاد التردد، ارتفعت درجة الصوت (Pitch). الأذن البشرية تسمع ترددات بين ~٢٠ Hz و ٢٠ kHz.
- السعة (Amplitude) — مقدار التغير في الضغط، ويحدد جهارة الصوت (Loudness).
- الطور (Phase) — موقع الموجة في دورة الزمن، ويُقاس بالراديان أو الدرجات.
الصوت الحقيقي ليس موجة جيبية بسيطة، بل مزيج معقد من عدة ترددات. لتحليل الصوت رقمياً، نحتاج إلى تحويله من إشارة تناظرية (مستمرة) إلى إشارة رقمية (منفصلة).
🔢 Sampling & Quantization
أخذ العينات (Sampling): قياس قيمة الإشارة على فترات زمنية منتظمة. عدد القياسات في الثانية = معدل العينات (Sample Rate) ويُقاس بالهرتز.
نظرية نايكويست (Nyquist Theorem): لاستعادة إشارة بتردد أقصى f_max، يجب أخذ عينات بمعدل ≥ 2 × f_max. للصوت البشري (حتى ٨ kHz)، يكفي ١٦ kHz. للموسيقى عالية الجودة، نستخدم ٤٤.١ kHz أو ٤٨ kHz.
الكمية (Quantization): تحويل القيمة المستمرة إلى قيمة رقمية بعدد محدود من البتات. 16-bit يعطي 65,536 مستوى، بينما 24-bit يعطي 16.7 مليون مستوى — مما يقلل ضوضاء التكميم.
إذا كان معدل العينات fs، فإن أقصى تردد يمكن تمثيله هو fs/2. الإشارات ذات التردد الأعلى تسبب aliasing — تشوه يظهر كترددات وهمية. الحل: مرشح تمرير منخفض (Low-pass filter) قبل sampling.
⚡ FFT & STFT & Mel Spectrogram
FFT (Fast Fourier Transform): يحول الإشارة من مجال الزمن إلى مجال التردد. لكن عيبه أنه يفقد المعلومات الزمنية — نعرف الترددات التي في الإشارة لكن لا نعرف متى ظهرت.
STFT (Short-Time Fourier Transform): الحل: نطبق FFT على نوافذ زمنية صغيرة (عادة ٢٥ مللي ثانية) ونحرك النافذة عبر الإشارة. النتيجة: طيف زمني-ترددي (Spectrogram) يوضح كيف تتغير الترددات عبر الزمن.
Mel Spectrogram: الأذن البشرية لا تستجيب خطياً للترددات — هي أكثر حساسية للتفاصيل في الترددات المنخفضة. مقياس Mel يحول الترددات إلى مقياس لوغاريتمي أقرب للإدراك البشري. Mel Spectrogram هو الصورة التي «يراها» نموذج الصوت الحديث.
تخيل أنك ترسم منحنى جبلي: STFT يعطيك خريطة كاملة بدقة عالية، لكن معظم التفاصيل الدقيقة في الترددات العالية غير مهمة للأذن. Mel Spectrogram يضغط الترددات العالية ويفرد الترددات المنخفضة — تماماً كما تسمعها أذنك. هذا يقلص حجم البيانات مع الحفاظ على المعلومات المهمة.
📊 MFCC
MFCC (Mel-Frequency Cepstral Coefficients): خطوة إضافية فوق Mel Spectrogram — نأخذ اللوغاريتم ثم نطبق DCT (Discrete Cosine Transform) لاستخراج ١٣-٤٠ معامل. MFCCs كانت المعيار الذهبي في أنظمة التعرف على الكلام قبل حقبة deep learning، ولا تزال مفيدة في بعض المهام.
🐍 Python عملياً — librosa & torchaudio
مكتبتا Python الأساسيتان للتعامل مع الصوت:
import librosa
import librosa.display
import matplotlib.pyplot as plt
# تحميل ملف صوتي
audio, sr = librosa.load('speech.wav', sr=16000)
# استخراج Mel Spectrogram
mel_spec = librosa.feature.melspectrogram(
y=audio, sr=sr, n_mels=80,
fmin=0, fmax=8000
)
log_mel_spec = librosa.power_to_db(mel_spec)
# عرض
librosa.display.specshow(
log_mel_spec, sr=sr, x_axis='time', y_axis='mel'
)
plt.colorbar(format='%+2.0f dB')
plt.title('Log-Mel Spectrogram')
plt.show()
import torchaudio
import torch
waveform, sr = torchaudio.load('speech.wav')
# إعادة رفع العينات
resampler = torchaudio.transforms.Resample(sr, 16000)
waveform = resampler(waveform)
# استخراج Mel Spectrogram
mel_transform = torchaudio.transforms.MelSpectrogram(
sample_rate=16000, n_mels=80,
n_fft=400, hop_length=160
)
mel_spec = mel_transform(waveform)
log_mel_spec = torch.log(mel_spec + 1e-6)
معظم نماذج TTS و STT الحديثة تتوقع Log-Mel Spectrogram بمقياس ٨٠ قناة Mel، نافذة ٢٥ms، خطوة ١٠ms (hop_length = 160 عند 16kHz). هذا هو «التنسيق القياسي» في المجال.
التعرف على الكلام (STT / ASR)
تحويل الكلام المنطوق إلى نص مكتوب — أحد أقدم وأهم تطبيقات الذكاء الاصطناعي الصوتي. من Siri و Alexa إلى برامج الترجمة الفورية والنسخ الطبي.
📜 تاريخ ASR
- GMM-HMM (١٩٨٠s–٢٠١٠s): نماذج ماركوف المخفية (HMM) لتمثيل تسلسل الأصوات، مع خلط غاوسي (GMM) لنمذجة الاحتمالات. كان المعيار طيلة ٣٠ سنة.
- DNN-HMM (٢٠١٢–٢٠١٧): استبدال GMM بشبكات عصبية عميقة (DNN). تحسن كبير في الدقة. ظهرت CNN و RNN/LSTM لتحسين أكثر.
- End-to-End (٢٠١٧–الآن): نموذج واحد من الصوت إلى النص بدون خطوات منفصلة. ثلاث مدارس رئيسية: CTC (Connectionist Temporal Classification)، RNN-T (RNN Transducer)، و Attention-based Encoder-Decoder (Whisper).
WER (Word Error Rate): (Substitutions + Insertions + Deletions) / Total Words. كلما قلّ، كان أفضل. WER = ٠٪ يعني نسخاً كاملاً.
CER (Character Error Rate): نفس المفهوم على مستوى الحروف. مفيد للغات ذات التشكيل والكتابة المتصلة مثل العربية.
🎤 Whisper — OpenAI
نموذج ASR ثنائي اللغة (متعدد اللغات) من OpenAI، مدرب على ٦٨٠,٠٠٠ ساعة من الصوت المنسوخ عبر الإنترنت. بنيته Encoder-Decoder مع Attention:
- Encoder: طبقات Conv1D + Transformer مع التضمينات الزمنية.
- Decoder: Transformer autoregressive يولد النص رمزاً برمز، مع special tokens (لغة، مهمة، طابع زمني).
الأحجام المتوفرة
| النموذج | المعلمات | الذاكرة | WER (English) | سرعة |
|---|---|---|---|---|
| tiny | 39M | ~1 GB | ~7.7% | ⚡⚡⚡⚡⚡ |
| base | 74M | ~1 GB | ~5.8% | ⚡⚡⚡⚡ |
| small | 244M | ~2 GB | ~4.6% | ⚡⚡⚡ |
| medium | 769M | ~5 GB | ~3.9% | ⚡⚡ |
| large | 1.55B | ~10 GB | ~2.9% | ⚡ |
| large-v3 | 1.55B | ~10 GB | ~2.8% | ⚡ |
الأداء على العربية
Whisper يحقق WER حوالي ١٠–١٥٪ على العربية الفصحى (بفضل تدريبه متعدد اللغات)، لكنه يتدهور على اللهجات العامية (WER ~٢٥–٤٠٪) بسبب ندرة بياناتها في التدريب. النسخة الخالية من التشكيل (Arabic diacritics) أسهل بكثير من المشكولة.
Fine-tuning Whisper للعربية
Whisper العام جيد جداً للإنجليزية والفصحى، لكنه ضعيف على اللهجات العربية (المصرية، الخليجية، الشامية، المغاربية). Fine-tuning على ١٠–١٠٠ ساعة من لهجة محددة يخفض WER من ~٣٠٪ إلى ~٥–١٠٪.
from datasets import load_dataset, Audio
from transformers import WhisperProcessor, WhisperForConditionalGeneration
import torch
# تحميل النموذج والمعالج
processor = WhisperProcessor.from_pretrained("openai/whisper-small")
model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-small")
# تجميد encoder لتسريع (اختياري)
for param in model.model.encoder.parameters():
param.requires_grad = False
# إعداد البيانات
dataset = load_dataset("arabic_speech_corpus", split="train")
dataset = dataset.cast_column("audio", Audio(sampling_rate=16000))
# معالجة
def prepare(batch):
audio = batch["audio"]["array"]
batch["input_features"] = processor(
audio, sampling_rate=16000, return_tensors="pt"
).input_features[0]
batch["labels"] = processor(
text=batch["transcription"], return_tensors="pt"
).input_ids[0]
return batch
dataset = dataset.map(prepare, remove_columns=["audio"])
# التدريب (يحتاج ~16GB VRAM للنموذج small)
from transformers import Seq2SeqTrainingArguments, Seq2SeqTrainer
args = Seq2SeqTrainingArguments(
output_dir="./whisper-arabic",
per_device_train_batch_size=8,
gradient_accumulation_steps=2,
learning_rate=1e-5,
warmup_steps=500,
num_train_epochs=3,
fp16=True,
save_strategy="epoch",
)
trainer = Seq2SeqTrainer(
model=model, args=args,
train_dataset=dataset,
tokenizer=processor.feature_extractor,
)
trainer.train()
🔄 Wav2Vec 2.0 — Self-Supervised Learning
نهج من Meta (FAIR): ندرب النموذج على كميات هائلة من الصوت غير الموسوم لفهم بنية الصوت، ثم نضبط على بيانات موسومة قليلة. الفكرة: نخفي بعض أجزاء التمثيل الصوتي ونجبر النموذج على تخمينها (مثل BERT لكن للصوت).
يحتاج بيانات أقل بـ ١٠–١٠٠ مرة من الأنظمة الخاضعة للإشراف الكامل لنفس الدقة. ممتاز للغات قليلة الموارد مثل العربية العامية.
🧩 Conformer — CNN + Transformer للصوت
RNN كانت مهيمنة في ASR لكنها بطيئة في التدريب. Conformer من Google يجمع:
- Convolution: لالتقاط الأنماط المحلية في الصوت (مثل انتقالات الحروف).
- Self-Attention: للعلاقات الطويلة المدى.
- النتيجة: دقة أعلى من كل من CNN و Transformer وحدهما.
نماذج حديثة أخرى
| النموذج | المطور | الميزة الرئيسية | اللغات |
|---|---|---|---|
| Canary | NVIDIA | متعدد اللغات + fast Conformer | الإنجليزية، الإسبانية، الألمانية، الفرنسية، البرتغالية |
| SenseVoice | Alibaba | تصنيف المشاعر + الكشف عن المتحدث | ٥٠+ لغة، صيني ممتاز |
| Paraformer | Alibaba | غير ذاتي (non-autoregressive) — سرعة عالية جداً | صيني، إنجليزي |
| USM (Universal Speech Model) | مدرب على ١٢ مليون ساعة | ١٠٠+ لغة |
🌍 تحديات العربية في ASR
- التشكيل (Diacritics): العربية لغة تشكيلية — الحركات (َ،ُ،ِ،ْ،ّ) تغير المعنى. معظم النصوص المكتوبة غير مشكولة، لكن النطق يحتاجها.
- اللهجات: ٢٢ دولة عربية، كل بلهجتها. الفصحى ليست لغة أم لأحد. اللهجة المصرية تختلف عن الخليجية كما تختلف الإيطالية عن الإسبانية.
- الفرق بين الفصحى والعامية: المتحدثون يخلطون بينهما (Code-switching) في نفس الجملة.
- الحروف المتشابهة صوتياً: س/ص، ت/ط، ذ/ظ، ح/ه — سهلة الالتباس في البيئات الصاخبة.
تحويل النص إلى كلام (TTS) — المعمارية الكلاسيكية
TTS هو عكس ASR: نحول النص إلى كلام مسموع. المعمارية الكلاسيكية تفصل العملية إلى مرحلتين رئيسيتين: Text-to-Spectrogram ثم Vocoder. هذا الفصل يغطي الحالة قبل ثورة النماذج التوليدية المباشرة (GPT-style).
📝 Text-to-Spectrogram
المرحلة الأولى: تأخذ النص وتولّد Mel Spectrogram منه. هذه هي «الدماغ» الذي يفهم العلاقة بين الرموز اللغوية والأصوات.
Tacotron 1 & 2 (Google)
- Tacotron 1 (2017): أول نظام TTS end-to-end حديث. استخدم Seq2Seq مع Attention لتوليد Spectrogram من النص. كان بطيئاً وغير مستقر أحياناً.
- Tacotron 2 (2018): طور كبير—استخدم Tacotron 2 لتوليد Mel Spectrogram ثم WaveNet كـ Vocoder. جودة قريبة من الإنسان. بنية: Encoder (CBHG) → Attention → Decoder (Pre-net + LSTM + Post-net).
FastSpeech 1 & 2 (Microsoft)
- FastSpeech 1 (2019): غير ذاتي (Non-autoregressive) — يولد كل الإطار الزمني دفعة واحدة. أسرع بـ ٢٧٠ مرة من Tacotron 2! يستخدم Duration Predictor لمعرفة طول كل حرف.
- FastSpeech 2 (2020): أزال distillation المعقدة واستخدم Duration + Pitch + Energy predictors مباشرة. جودة أعلى، تدريب أبسط.
تخيل أنك تكتب خطاباً: الطريقة الذاتية (AR) تكتب كلمة كلمة — لا يمكنك كتابة الكلمة الثالثة قبل الثانية. الطريقة غير الذاتية (NAR) تكتب كل الكلمات دفعة واحدة. الأولى أدق لكن أبطأ. الثانية أسرع بكثير لكن قد تخسر بعض السلاسة.
FastPitch (NVIDIA)
مشابه لـ FastSpeech 2 لكن مع تحكم صريح في Pitch (الدرجة الصوتية). يفيد لإضافة تعبير وانفعال. يستخدم Duration + Pitch + Energy predictors.
🎛️ Vocoder — من الطيف إلى الموجة
المرحلة الثانية: تأخذ Mel Spectrogram وتولّد الشكل الموجي الفعلي (WAV).
| النموذج | عام | الجودة | السرعة | ملاحظات |
|---|---|---|---|---|
| WaveNet | 2016 | ⭐⭐⭐⭐⭐ | بطيء جداً | DeepMind — أول vocoder عصبي مقنع |
| WaveGlow | 2018 | ⭐⭐⭐⭐ | سريع | NVIDIA — قائم على Normalizing Flows |
| MelGAN | 2019 | ⭐⭐⭐ | سريع جداً | GAN-based، خفيف وسريع |
| HiFiGAN | 2020 | ⭐⭐⭐⭐⭐ | سريع جداً | المعيار الحالي — جودة WaveNet بسرعة GAN |
| LPCNet | 2019 | ⭐⭐⭐ | سريع جداً | يعمل على CPU حتى |
HiFiGAN يستخدم Multi-Receptive Field Fusion (MRF): عدة طبقات Conv1D بمقاسات نواة مختلفة لالتقاط أنماط بأطوال متفاوتة، مع Periodic Activation (يولد الموجات الدورية للكلام). خسارة: GAN loss + Mel loss + Feature matching loss.
🔄 التدفق الكامل: Text → Spectrogram → Audio
from TTS.tts.configs.fast_speech2_config import FastSpeech2Config
from TTS.tts.models.fast_speech2 import FastSpeech2
from TTS.vocoder.configs.hifigan_config import HifiGANConfig
from TTS.vocoder.models.hifigan import HifiGAN
# تهيئة النموذج
config = FastSpeech2Config(
run_name="fastspeech2-arabic",
run_description="Arabic TTS with FastSpeech2",
audio={
"sample_rate": 22050,
"fft_size": 1024,
"hop_length": 256,
"win_length": 1024,
"num_mels": 80,
}
)
model = FastSpeech2(config)
# تدريب (انظر الفصل 6 للتفاصيل)
# ...
# التوليد
text_inputs = tokenizer.text_to_ids("السلام عليكم")
mel_spec = model.inference(text_inputs)
# Vocoder
vocoder = HifiGAN(HifiGANConfig())
vocoder.load_checkpoint("hifigan_checkpoint.pth")
waveform = vocoder.inference(mel_spec)
⚖️ مقارنة المعماريات الكلاسيكية
| المعمارية | الجودة | السرعة | التحكم | البيانات | التعقيد |
|---|---|---|---|---|---|
| Tacotron 2 + WaveNet | ممتازة | بطيئة | محدود | ~٢٠ ساعة | متوسط |
| FastSpeech 2 + HiFiGAN | ممتازة | سريعة جداً | Pitch, Energy | ~٢٠ ساعة | متوسط |
| FastPitch + HiFiGAN | ممتازة | سريعة جداً | Pitch تفصيلي | ~٢٠ ساعة | متوسط |
| VITS (End-to-End) | ممتازة | سريعة | محدود | ~٣٠ ساعة | عالي |
TTS الحديث — الصوت التوليدي المتقدم
مع ظهور النماذج التوليدية الكبيرة (Large Generative Models)، تغير TTS جذرياً. لم نعد بحاجة إلى خطوتين منفصلتين (Spectrogram + Vocoder). النماذج الحديثة تولد الصوت مباشرة من النص مع قدرة على clone الصوت، إضافة عواطف، وحتى المؤثرات الصوتية.
❌ XTTS (Coqui)
واحد من أقوى نماذج TTS مفتوحة المصدر. يدعى ⓍTTS (أو XTTS) لأنه مصمم لـ cross-lingual voice cloning:
- البنية: GPT-style (Transformer decoder) مع Speaker Conditioning. يستخدم ٣ مراحل: (١) GPT لتوليد الرموز الصوتية، (٢) HiFiGAN decoder، (٣) Speaker encoder.
- Voice Cloning: يحتاج فقط ٦ ثوانٍ من صوت المتحدث لاستنساخه! يلتقط الجرس الصوتي والنبرة من مقطع قصير.
- اللغات: ١٧ لغة مدعومة مسبقاً، منها العربية.
- Fine-tuning: ممكن مع LoRA على GPU ~١٢ GB (RTX 3060).
from TTS.tts.configs.xtts_config import XttsConfig
from TTS.tts.models.xtts import Xtts
# تحميل النموذج
config = XttsConfig()
config.load_json("config.json")
model = Xtts.init_from_config(config)
model.load_checkpoint(config, checkpoint_path="model.pth")
model.cuda()
# Voice Cloning من مقطع قصير
output = model.synthesize(
text="مرحباً بكم في عالم توليد الصوت بالعربية",
speaker_wav="speaker_sample.wav", # 6-30 ثانية
language="ar",
)
# حفظ الصوت
import soundfile as sf
sf.write("output.wav", output["wav"], 24000)
🐕 Bark (Suno)
نموذج TTS من Suno (المعروفة بـ Suno AI للموسيقى). بنية Transformer بحتة — بدون Spectrogram، يولد الصوت مباشرة كرموز صوتية:
- المكونات: ٤ نماذج Transformer متتالية: GPT للدلالات → ٢ Coarse Encodec → Fine Encodec.
- قدرات فريدة: مؤثرات صوتية (ضحك، بكاء، همس)، غناء بسيط، لغات متعددة.
- العربية: يدعم العربية لكن الجودة متوسطة.
- الوزن: ~٢.٥ GB، يمكن تشغيله على GPU ~٤ GB.
🎵 VoiceBox (Meta)
نموذج من Meta AI (2023) بتقنية الـ Infilling — يستطيع ملء فراغ في الصوت (مثل إزالة كلمة وإعادة توليدها). يستخدم Flow Matching مع Transformer. يدعم:
- إزالة الضوضاء (Denoising)
- تغيير النبرة
- Cross-lingual voice cloning
- توليد الكلام العاطفي
🎭 Orpheus TTS (Canopy)
أحدث نموذج TTS (2025) من شركة Canopy — ٣ مليارات معلمة (3B). الميزة الثورية: التحكم العاطفي (Emotional Control). يستطيع:
- تغيير العاطفة في الجملة بأكملها أو في كلمات محددة
- ٧ عواطف: سعيد، حزين، غاضب، مفاجأ، خائف، هادئ، محايد
- سرعات كلام مختلفة
- اللهجات واللكنات
إنه أول نموذج TTS مفتوح المصدر يقترب من ElevenLabs في الجودة والعاطفة. يمكنه قول "أنا سعيد بلقائك" بنبرة دافئة حقيقية — وليس بمجرد تغيير pitch.
🌐 CosyVoice
من Alibaba — نموذج متعدد اللغات مع دعم ممتاز للصينية والعربية. يستخدم Flow Matching + LLM. يدعم الصوت متعدد المتحدثين من مقطع واحد.
💬 ChatTTS
نموذج TTS مخصص للمحادثات الطبيعية. يضيف توقفات، تغيرات في النبرة، وعلامات عدم اليقين (مثل "آه"، "همم"). يجعل الصوت يبدو كأنه إنسان حقيقي يتحدث.
⚖️ مقارنة شاملة
| النموذج | مفتوح؟ | Arabic | Voice Clone | العواطف | GPU | الجودة |
|---|---|---|---|---|---|---|
| ElevenLabs | ❌ | ✅ ممتاز | ✅ ٢٩ ث | ✅✅ | - | ⭐⭐⭐⭐⭐ |
| ⓍTTS | ✅ | ✅ جيد | ✅ ٦ ث | ❌ | ~٦ GB | ⭐⭐⭐⭐ |
| Bark | ✅ | ✅ متوسط | ❌ | ⏳ جزئي | ~٤ GB | ⭐⭐⭐ |
| Orpheus | ✅ | ⏳ قريباً | ✅ ١٠ ث | ✅✅✅ | ~١٢ GB | ⭐⭐⭐⭐⭐ |
| CosyVoice | ✅ | ✅ جيد | ✅ ٥ ث | ⏳ جزئي | ~٨ GB | ⭐⭐⭐⭐ |
| ChatTTS | ✅ | ⏳ متوسط | ❌ | ⏳ | ~٤ GB | ⭐⭐⭐ |
نماذج الصوت التوليدية الأخرى
بخلاف الكلام، هناك عالم كامل من التوليد الصوتي: الموسيقى، المؤثرات، تحويل الأصوات، تحسين الجودة، وفصل المتحدثين.
🎵 Music Generation
توليد الموسيقى من وصف نصي هو أحدث حدود الذكاء الاصطناعي الصوتي:
MusicLM (Google)
Transformer-based، ٢٨٠,٠٠٠ ساعة تدريب. جودة عالية لكن استرجاع محدود.
MusicGen (Meta)
EnCodec + Transformer. أصغر (٣.٣B) وأسرع. مفتوح المصدر.
Suno AI
أفضل نموذج تجاري — يولد أغاني كاملة بكلمات. مغلق المصدر.
Stable Audio
من Stability AI — Latent Diffusion للصوت. متعدد الاستخدامات.
💥 Sound Effects
AudioLDM: نموذج توليد مؤثرات صوتية قائم على Latent Diffusion. يولد أي صوت من وصف نصي: "مطر على نافذة"، "باب يغلق بعنف"، "زئير أسد". يستخدم CLAP (Contrastive Language-Audio Pretraining) كـ text encoder.
from diffusers import AudioLDMPipeline
import torch
pipe = AudioLDMPipeline.from_pretrained(
"cvssp/audioldm", torch_dtype=torch.float16
).to("cuda")
prompt = "Rain falling on a window, distant thunder"
audio = pipe(
prompt, num_inference_steps=20,
audio_length_in_s=10.0
).audios[0]
🔄 Voice Conversion — تحويل الصوت
تحويل صوت متحدث إلى صوت متحدث آخر مع الحفاظ على المحتوى الكلامي ونبرة الأداء:
- RVC (Retrieval-based Voice Conversion): الأكثر شهرة حالياً. يستخدم HuBERT لاستخراج الميزات + VITS + Speaker Embedding. يمكنه تحويل الصوت بجودة عالية ببيانات قليلة (~١٠ دقائق). شائع في أغاني AI.
- So-VITS-SVC: سلف RVC. يعمل بشكل جيد لكن أقل استقراراً.
Voice Conversion يحول ملف صوتي (تقول الجمله بصوتك) إلى صوت آخر. TTS يولد الصوت من النص. أدوات مثل RVC ممتازة للهواة والمبدعين لأنها تحتاج بيانات أقل.
🎧 Speech Enhancement
تحسين جودة الصوت وإزالة الضوضاء:
- Demucs (Meta): فصل الموسيقى إلى مكوناتها (غناء، bass، drums، غيرها). يستخدم Conv-TasNet architecture.
- SepFormer (Meta): فصل الكلام المتداخل — متحدثان يتحدثان في نفس الوقت. يستخدم Transformer للترميز الزمني.
👥 Speaker Diarization
الإجابة على السؤال: «من يتحدث ومتى؟»
PyAnnote Audio: مكتبة Python الرائدة في diarization. تكتشف التغييرات بين المتحدثين وتصنف كل مقطع:
import torch
from pyannote.audio import Pipeline
pipeline = Pipeline.from_pretrained(
"pyannote/speaker-diarization-3.1",
use_auth_token="YOUR_HF_TOKEN"
)
diarization = pipeline("meeting.wav")
for turn, _, speaker in diarization.itertracks(yield_label=True):
print(f"[{turn.start:.1f}s-{turn.end:.1f}s] {speaker}")
# [0.0s-3.2s] SPEAKER_01
# [3.2s-8.7s] SPEAKER_02
دراسة حالة متكاملة — تدريب TTS عربي سعودي (اللهجة النجدية)
هذا الفصل هو الأهم في المجلد. جمع كل ما تعلمناه في تطبيق عملي: بناء TTS ناطق باللهجة السعودية النجدية. مشروع حقيقي بمواصفات حقيقية.
أ. لماذا العربية صعبة في TTS؟
- التشكيل (Tashkeel): الكلمة الواحدة يمكن قراءتها بعدة طرق حسب الحركات. "علم" يمكن أن تكون عِلْم (science) أو عَلَّمَ (he taught). TTS يحتاج إلى تشكيل صحيح للنطق السليم.
- الفصحى vs ٢٢ لهجة: لا يوجد عربي واحد. كل دولة لها لهجتها. اللهجة النجدية تختلف عن المصرية في المفردات، النبرة، وحتى مخارج الحروف.
- ندرة البيانات عالية الجودة: معظم مجموعات البيانات العربية إما فصحى أو عامية بميكروفونات رديئة.
- الأصوات الفريدة: العربية فيها أصوات غير موجودة في الإنجليزية أو اللغات الأوروبية:
| الحرف | IPA | الوصف | مثال |
|---|---|---|---|
| ح | /ħ/ | احتكاكي حلقي مهموس | حَرَام |
| ع | /ʕ/ | احتكاكي حلقي مجهور | عَيْن |
| ق | /q/ | طبقي موقوف (في الفصحى) | قَلْب |
| غ | /ʁ/ | احتكاكي لهوي مجهور | غُرْفَة |
| ض | /dˤ/ | نطعي مطبق مجهور | ضَرَبَ |
| ظ | /ðˤ/ | بين-أسناني مطبق مجهور | ظُهْر |
ب. متطلبات البيانات لنموذج TTS سعودي
الكمية المثلى
- ١٠–٤٠ ساعة صوت مسجل في استوديو — هذا هو النطاق الذهبي.
- أقل من ١٠ ساعات: جودة مقبولة لكن محدودة التنوع.
- أكثر من ٤٠ ساعة: تحسن طفيف في الجودة بتكلفة عالية.
المواصفات الفنية
- معدل العينات: 44.1 kHz (أو 48 kHz)
- عمق البت: 24-bit
- القنوات: Mono (أحادي)
- التنسيق: WAV (غير مضغوط)
- الميكروفون: مكثف احترافي (Shure SM7B, Neumann U87)
- البيئة: استوديو عازل للصوت (لا صدى، لا ضوضاء خلفية)
عدد المتحدثين
- Single-speaker: متحدث ١ فقط. جودة أعلى، تنوع أقل.
- Multi-speaker (١٠+): جودة أقل لكل متحدث لكن تنوع أكبر وقابلية للتوسع.
محتوى التسجيل
- تغطية جميع الأصوات العربية في سياقات مختلفة
- نصوص نجدية: كلمات وتعابير سعودية أصيلة
- جمل متنوعة: خبرية، استفهامية، تعجبية
- أرقام، تواريخ، أسماء أماكن سعودية
- ~٣٠ دقيقة لكل صوت مسجل → ٦٠–٨٠ ساعة إجمالي متوقع مع ٢ متحدث
التكلفة التقديرية
| البند | التكلفة التقديرية |
|---|---|
| تسجيل استوديو | $٥٠–٢٠٠/ساعة |
| أجر المتحدث | $١٠٠–٥٠٠/ساعة |
| إجمالي ٢٠ ساعة (متحدث + استوديو) | ~$٣,٠٠٠–١٤,٠٠٠ |
| إجمالي ٤٠ ساعة | ~$٦,٠٠٠–٢٨,٠٠٠ |
مجموعات بيانات جاهزة
| المجموعة | المدة | اللهجة | الجودة | التكلفة |
|---|---|---|---|---|
| FutureBee AI | ٣٠ ساعة | سعودي (متعدد المناطق) | استوديو ممتاز | ~$٣٥/ساعة ✅ |
| TELUS Digital | ~١ ساعة | سعودي (استوديو) | ممتاز | تفاوض |
| SILMA AI | - | نجدي جاهز | ممتاز | نموذج تجاري |
| Common Voice Arabic | ~٥٠٠ ساعة | فصحى + عاميات | ضوضاء متوسطة | مجاني 🆓 |
| بناء مجموعة خاصة | ١٠–٤٠ ساعة | مخصص | استوديو | ~$٥,٠٠٠–١٥,٠٠٠ |
إذا كانت ميزانيتك محدودة: ابدأ بـ FutureBee AI + تسجيل ٥ ساعات إضافية بكلمات نجدية. إذا كنت تملك الميزانية: بناء مجموعة خاصة هو الأفضل للجودة.
ج. اختيار المعمارية المناسبة
| الخيار | الجودة | السرعة وقت التشغيل | متطلبات البيانات | سهولة التدريب | التكلفة التقديرية |
|---|---|---|---|---|---|
| ١. Fine-tuning Coqui XTTS-v2 | ⭐⭐⭐⭐ | سريع | ~١–١٠ ساعات | سهل (LoRA) | $١٠–٥٠ |
| ٢. FastSpeech 2 + HiFiGAN | ⭐⭐⭐⭐⭐ | سريع جداً | ~٢٠–٤٠ ساعة | متوسط | $٥٠٠–٥,٠٠٠ |
| ٣. VITS (End-to-End) | ⭐⭐⭐⭐⭐ | سريع | ~٣٠–٥٠ ساعة | صعب | $١,٠٠٠–١٠,٠٠٠ |
| ٤. YourTTS (Multi-speaker) | ⭐⭐⭐⭐ | متوسط | ~١٠–٣٠ ساعة متعدد | صعب | $١,٠٠٠–١٠,٠٠٠ |
لأول مشروع: اختر الخيار ١ (XTTS LoRA) — أقل تكلفة، أسرع وقت، وجودة ممتازة. إذا كنت تبحث عن أفضل جودة وتملك الموارد: الخيار ٢ (FastSpeech 2) هو المعيار الذهبي حالياً للأنظمة الإنتاجية العربية.
د. التدريب خطوة بخطوة — XTTS-v2 على اللهجة النجدية
١. إعداد البيئة
# متطلبات GPU: RTX 4090 (24GB VRAM) أو A100 (40/80GB)
# CUDA 12.1+، PyTorch 2.1+
pip install TTS torch torchaudio transformers datasets
pip install accelerate deepspeed bitsandbytes # للتسريع
٢. معالجة البيانات
import os, glob, librosa, soundfile as sf
from TTS.tts.utils.text import phonemize
# 1. إعادة رفع العينات وتوحيد التنسيق
audio_files = glob.glob("data/**/*.wav", recursive=True)
for f in audio_files:
y, sr = librosa.load(f, sr=24000, mono=True)
sf.write(f, y, 24000)
# 2. إنشاء ملف metadata
# التنسيق: path|text|speaker
with open("metadata.csv", "w", encoding="utf-8") as out:
for f in sorted(audio_files):
basename = os.path.basename(f).replace(".wav", "")
text = texts[basename] # النص المقابل
out.write(f"data/{basename}|{text}|speaker_01\n")
٣. التدريب
# XTTS-v2 LoRA fine-tuning
# التكلفة: ~$10-50 على A100
# الوقت: ~2-6 ساعات
python TTS/scripts/train_xtts.py \
--dataset_path ./data \
--metadata_csv ./metadata.csv \
--output_dir ./xtts-najdi-lora \
--model_name "tts_models/multilingual/multi-dataset/xtts_v2" \
--lora_rank 16 \
--lora_alpha 32 \
--batch_size 4 \
--grad_accum_steps 4 \
--num_epochs 5 \
--learning_rate 5e-5 \
--mixed_precision fp16 \
--save_step 500
# تكلفة أعلى لكن جودة أفضل
# الوقت: ~2-7 أيام على A100
python TTS/scripts/train_xtts.py \
--dataset_path ./data \
--metadata_csv ./metadata.csv \
--output_dir ./xtts-najdi-full \
--model_name "tts_models/multilingual/multi-dataset/xtts_v2" \
--lora_rank 0 \ # 0 = full fine-tune
--batch_size 2 \
--grad_accum_steps 8 \
--num_epochs 20 \
--learning_rate 1e-5 \
--mixed_precision fp16 \
--deepspeed
LoRA fine-tune: ~٢–٦ ساعات على A100 (80GB) = ~$١٠–٥٠ في السحابة.
Full fine-tune: ~٢–٧ أيام على A100 = ~$٥٠٠–٥,٠٠٠.
تدريب من الصفر: ~٢–٤ أسابيع على ٨×A100 = ~$١٠,٠٠٠–٥٠,٠٠٠ (موصى به فقط للمؤسسات).
٤. التوليد والاختبار
from TTS.tts.configs.xtts_config import XttsConfig
from TTS.tts.models.xtts import Xtts
config = XttsConfig()
config.load_json("./xtts-najdi-lora/config.json")
model = Xtts.init_from_config(config)
model.load_checkpoint(config, "./xtts-najdi-lora/best_model.pth")
model.cuda()
# اختبار بجمل نجدية
texts = [
"السلام عليكم، كيف الحال؟",
"والله إنك ما قصرت، يعطيك العافية",
"ودي أزور الرياض هالسنة إن شاء الله",
"القهوة السعودية مع التمر شي ثاني",
]
for text in texts:
output = model.synthesize(
text=text,
speaker_wav="speaker_ref.wav",
language="ar",
)
sf.write(f"output_{text[:10]}.wav", output["wav"], 24000)
هـ. التقييم والتحسين
مقاييس التقييم
- MOS (Mean Opinion Score): استبيان بشري — يستمع ٢٠–٥٠ شخصاً لعينات ويقيّمون الجودة من ١–٥. الهدف: ≥ ٤.٠ (قريب من الإنسان).
- WER (ASR-based): نشغل Whisper على الصوت المولد ونحسب WER. جيد إذا WER < ١٠٪.
- مقارنة مع ElevenLabs: نفس الجمل نمررها على ElevenLabs (الإصدار العربي) ونقارن MOS و WER.
تحسين الجودة
- التشكيل التلقائي قبل TTS: استخدم مكتبة مثل
tashkeelأوfarasaلتشكيل النص قبل تمريره للنموذج: "السلام عليكم" → "اَلسَّلَامُ عَلَيْكُمْ". هذا يحسن النطق بشكل كبير. - Text Normalization: تحويل الأرقام، الرموز، الاختصارات إلى صيغتها المنطوقة. مثلاً "٪" → "في المئة"، "٢٠٢٤" → "ألفين وأربعة وعشرين".
- G2P (Grapheme-to-Phoneme): استخدام محول الحروف إلى أصوات (مثل
phonemizerمع espeak-ng) لتحسين النطق.
# تشكيل النص العربي تلقائياً
from tashkeel import Tashkeel
tashkeel = Tashkeel()
text = "السلام عليكم ورحمة الله وبركاته"
diacritized = tashkeel.run(text)
print(diacritized)
# اَلسَّلَامُ عَلَيْكُمْ وَرَحْمَةُ اللَّهِ وَبَرَكَاتُهُ
# ثم نمرره للنموذج
output = model.synthesize(
text=diacritized,
speaker_wav="speaker_ref.wav",
language="ar",
)
و. سير العمل الكامل
هذا هو المسار الكامل من الصفر إلى TTS سعودي ناطق باللهجة النجدية:
- جمع البيانات: شراء ٣٠ ساعة من FutureBee AI + تسجيل ١٠ ساعات نجدية إضافية (~$٥,٠٠٠)
- تجهيز النصوص: تدقيق إملائي، تشكيل تلقائي، text normalization
- تجهيز الصوت: resample to 24kHz, trim silence, split على pauses
- اختيار الأسلوب: البدء بـ XTTS LoRA (تجربة سريعة) → FastSpeech 2 (إنتاجي)
- التدريب: ~٦ ساعات LoRA → تقييم → ~٥ أيام full fine-tune → تقييم
- النشر: ONNX Runtime أو TensorRT (الفصل ٧)
- التحسين المستمر: إضافة بيانات جديدة، ضبط hyperparameters
أفضل نموذج TTS عربي متاح تجارياً هو SILMA AI للهجة النجدية (جاهز للاستخدام). إذا كنت تريد بناء نموذجك الخاص: XTTS-v2 + LoRA يعطيك ٨٠٪ من الجودة بـ ١٠٪ من التكلفة. استثمر وقتك في البيانات والـ post-processing (تشكيل + normalization) — هذه هي العامل الأكبر في الجودة النهائية.
النشر والتشغيل (Deployment)
النموذج المدرب ليس مفيداً حتى يعمل في الإنتاج. هذا الفصل يغطي تحسين وتشغيل نماذج TTS/STT في التطبيقات الحقيقية.
⚡ TensorRT — NVIDIA
مُحسِّن الاستدلال من NVIDIA للنماذج العصبية. يدمج الطبقات، يحدد الأوزان إلى FP16/INT8، ويحسن تخطيط الذاكرة. يمكن أن يسرع الاستدلال ٢–٥ مرات مقارنة بـ PyTorch الأصلي.
import torch
import torch_tensorrt
# تحميل HiFiGAN
model = HifiGAN(HifiGANConfig())
model.load_checkpoint("hifigan.pth")
model.eval().cuda()
# تحويل إلى TensorRT
inputs = [torch.randn(1, 80, 256).cuda()]
trt_model = torch_tensorrt.compile(
model,
inputs=inputs,
enabled_precisions={torch.half},
workspace_size=1 << 30,
min_block_size=1,
)
torch.jit.save(trt_model, "hifigan_trt.ts")
📦 ONNX Runtime
مُحسِّن متعدد المنصات — يدعم Windows، Linux، macOS، وحتى WebAssembly. يحول النموذج إلى ONNX (Open Neural Network Exchange) ثم يشغله بـ ONNX Runtime. أبطأ قليلاً من TensorRT لكن يدعم كل المنصات.
import onnxruntime as ort
import numpy as np
# تحويل النموذج إلى ONNX
torch.onnx.export(
model, mel_spec,
"model.onnx",
input_names=["mel"],
output_names=["audio"],
dynamic_axes={"mel": {2: "time"}, "audio": {1: "time"}},
)
# تشغيل ONNX Runtime
session = ort.InferenceSession("model.onnx")
audio = session.run(None, {"mel": mel_spec.numpy()})[0]
🧠 vLLM للنماذج الصوتية LLM-like
النماذج مثل Bark و Orpheus هي في جوهرها LLMs تولد رموزاً صوتية. vLLM يدعم هذه النماذج مع PagedAttention لتقليل استخدام الذاكرة وزيادة الإنتاجية.
🎤 NVIDIA Riva SDK
منصة NVIDIA المتكاملة لـ ASR و TTS. توفر:
- نماذج مدربة مسبقاً عالية الجودة
- دعم gRPC و WebSocket للبث
- TensorRT مدمج
- التعريب: يدعم العربية في ASR و TTS
🤗 Hugging Face TGI & Spaces
أسهل طريقة لنشر النماذج الصوتية: Hugging Face Inference Endpoints أو Spaces (مع Gradio). استضافة مُدارة تدعم أي نموذج من Hub.
from fastapi import FastAPI, WebSocket
from TTS.tts.models.xtts import Xtts
import soundfile as sf
import io
import json
app = FastAPI()
model = load_tts_model() # تحميل النموذج مرة واحدة
@app.websocket("/tts")
async def tts_endpoint(websocket: WebSocket):
await websocket.accept()
data = await websocket.receive_text()
request = json.loads(data)
output = model.synthesize(
text=request["text"],
speaker_wav=request.get("speaker_wav"),
language=request.get("lang", "ar"),
)
# إرسال الصوت كـ bytes
buffer = io.BytesIO()
sf.write(buffer, output["wav"], 24000, format="WAV")
await websocket.send_bytes(buffer.getvalue())
await websocket.close()
🌐 WebRTC للبث المباشر
للبث الحي مع زمن استجابة منخفض (< ٢٠٠ms). WebRTC ينقل الصوت مشفراً مباشرة بين المتصفح والخادم. يمكن دمج نماذج Silence Removal + ASR + TTS في دورة حوار كاملة.
💰 تكاليف التشغيل
| المكون | GPU | تكلفة/ساعة (سحابة) | استخدام الذاكرة |
|---|---|---|---|
| Whisper large-v3 | ~١٠ GB | ~$٠.٨٠ | ١٠ GB |
| XTTS-v2 | ~٦ GB | ~$٠.٥٠ | ٦ GB |
| Bark | ~٤ GB | ~$٠.٣٠ | ٤ GB |
| Orpheus (3B) | ~١٢ GB | ~$١.٠٠ | ١٢ GB |
| FastSpeech2 + HiFiGAN | ~٢ GB | ~$٠.١٥ | ٢ GB |
للاستخدام الإنتاجي: FastSpeech 2 + HiFiGAN هو الأرخص والأسرع مع جودة ممتازة. احتفظ بـ XTTS فقط إذا كنت تحتاج voice cloning. إذا كنت تحتاج ASR: Whisper medium (موازنة جيدة بين السرعة والدقة).
مستقبل نماذج الصوت
المجال يتغير بسرعة مذهلة. كل شهر يظهر نموذج جديد يدفع حدود الممكن. هذا الفصل يلقي نظرة على الاتجاهات والتوقعات.
🎛️ AudioLM & AudioPaLM (Google)
النماذج التوليدية الصوتية الشاملة — نموذج واحد يعالج الكلام والموسيقى والمؤثرات معاً. AudioPaLM يدمج فهم النص مع الصوت في فضاء رمزي واحد (unified vocabulary)، مما يسمح بترجمة الكلام إلى كلام، وتوليد الصوت من النص، وحتى تحويل النبرة. هذا هو الطريق نحو GPT-4o الصوتي.
🎙️ GPT-4o — الصوتي
OpenAI أطلقت GPT-4o مع قدرات صوتية أصلية (natively multimodal). الفرق: النموذج يسمع ويتكلم مباشرة بدون خطوات وسيطة. هذا يسمح بـ:
- فهم العاطفة من الصوت
- الرد بصوت مناسب للسياق
- زمن استجابة فوري
- تفاعلات طبيعية تشبه الحوار البشري
سابقاً: ASR → LLM → TTS (ثلاث نماذج، زمن استجابة طويل، فقدان العاطفة). الآن: نموذج واحد يسمع ويفهم ويتكلم — العاطفة والسرعة والسياق محفوظة.
📱 نماذج الصوت المضمنة (Embedded)
تشغيل ASR و TTS على الأجهزة المحدودة (الهواتف، السماعات الذكية، السيارات). التحدي: نماذج صغيرة عالية الجودة. التطورات:
- Whisper tiny: يعمل على هاتف iPhone حديث بسرعة قريبة من الحقيقية.
- DistilWhisper: نسخة مقطرة من Whisper أسرع بـ ٦ مرات مع فقدان ٢٪ فقط في الدقة.
- TensorFlow Lite + NNAPI: تسريع على معالجات الهواتف.
- Qualcomm AI Engine: نماذج صوتية محسّنة لمعالجات Snapdragon.
🌍 الكلام متعدد اللغات بنفس الصوت
قدرة النموذج على التحدث بأي لغة مع الحفاظ على جرس صوت المتحدث الأصلي. XTTS بدأ هذا الاتجاه، لكن المستقبل: نموذج واحد يتحدث العربية الفصحى، النجدية، الإنجليزية، والفرنسية بصوت المتحدث نفسه وبجودة أصلية.
🎭 التوليف العاطفي (Emotional TTS)
النماذج الحالية مثل Orpheus تبدأ في دعم العواطف، لكن المستقبل هو Fine-grained Emotional Control: تحديد العاطفة لكل كلمة أو مقطع، مع تغيرات دقيقة في النبرة والسرعة.
سيناريو مستقبلي: "قل هذه الجملة بغض ثم خفف إلى حزن في الكلمة الأخيرة" — النموذج ينفذ بدقة.
🇸🇦 الفرص في العالم العربي
منتجات TTS عربية
لا يوجد TTS سعودي/خليجي مفتوح عالي الجودة. فرصة لبناء نموذج مفتوح المصدر لكل دولة عربية.
ASR للهجات
تطبيقات النسخ الطبي القانوني تحتاج ASR دقيق للهجات المحلية.
تعليم اللغات
تطبيقات تعليم العربية للناطقين بغيرها مع نطق سليم وتصحيح فوري.
المساعدات الصوتية
مساعد صوتي عربي لفئة كبار السن وغير المتقنين للقراءة والكتابة.
نحن في بداية ثورة الصوت التوليدي. العربية ما زالت أرضاً غير مطروقة في هذا المجال — فرصة هائلة لمن يبني الآن. النماذج مفتوحة المصدر موجودة، الأدوات موجودة، فقط تحتاج إلى البيانات والإرادة.
🎙️ نهاية المجلد الرابع — نماذج الصوت والكلام
أكملت طريقك من الموجات الصوتية إلى TTS ناطق باللهجة النجدية.
انتقل إلى المجلد الخامس لاستكشاف نماذج الفيديو والأنظمة متعددة الوسائط.