🎙️

نماذج الصوت والكلام

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 هو الصورة التي «يراها» نموذج الصوت الحديث.

💡 حدسي — لماذا Mel Spectrogram؟

تخيل أنك ترسم منحنى جبلي: STFT يعطيك خريطة كاملة بدقة عالية، لكن معظم التفاصيل الدقيقة في الترددات العالية غير مهمة للأذن. Mel Spectrogram يضغط الترددات العالية ويفرد الترددات المنخفضة — تماماً كما تسمعها أذنك. هذا يقلص حجم البيانات مع الحفاظ على المعلومات المهمة.

📊 MFCC

MFCC (Mel-Frequency Cepstral Coefficients): خطوة إضافية فوق Mel Spectrogram — نأخذ اللوغاريتم ثم نطبق DCT (Discrete Cosine Transform) لاستخراج ١٣-٤٠ معامل. MFCCs كانت المعيار الذهبي في أنظمة التعرف على الكلام قبل حقبة deep learning، ولا تزال مفيدة في بعض المهام.

🐍 Python عملياً — librosa & torchaudio

مكتبتا Python الأساسيتان للتعامل مع الصوت:

Pythonlibrosa — تحميل وعرض طيف
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()
Pythontorchaudio — معالجة مباشرة للتدريب
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 & CER

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)سرعة
tiny39M~1 GB~7.7%⚡⚡⚡⚡⚡
base74M~1 GB~5.8%⚡⚡⚡⚡
small244M~2 GB~4.6%⚡⚡⚡
medium769M~5 GB~3.9%⚡⚡
large1.55B~10 GB~2.9%
large-v31.55B~10 GB~2.8%

الأداء على العربية

Whisper يحقق WER حوالي ١٠–١٥٪ على العربية الفصحى (بفضل تدريبه متعدد اللغات)، لكنه يتدهور على اللهجات العامية (WER ~٢٥–٤٠٪) بسبب ندرة بياناتها في التدريب. النسخة الخالية من التشكيل (Arabic diacritics) أسهل بكثير من المشكولة.

Fine-tuning Whisper للعربية

💡 لماذا Fine-tune؟

Whisper العام جيد جداً للإنجليزية والفصحى، لكنه ضعيف على اللهجات العربية (المصرية، الخليجية، الشامية، المغاربية). Fine-tuning على ١٠–١٠٠ ساعة من لهجة محددة يخفض WER من ~٣٠٪ إلى ~٥–١٠٪.

PythonFine-tuning Whisper مع HuggingFace
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 وحدهما.

نماذج حديثة أخرى

النموذجالمطورالميزة الرئيسيةاللغات
CanaryNVIDIAمتعدد اللغات + fast Conformerالإنجليزية، الإسبانية، الألمانية، الفرنسية، البرتغالية
SenseVoiceAlibabaتصنيف المشاعر + الكشف عن المتحدث٥٠+ لغة، صيني ممتاز
ParaformerAlibabaغير ذاتي (non-autoregressive) — سرعة عالية جداًصيني، إنجليزي
USM (Universal Speech Model)Googleمدرب على ١٢ مليون ساعة١٠٠+ لغة

🌍 تحديات العربية في 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 مباشرة. جودة أعلى، تدريب أبسط.
💡 حدسي — Autoregressive vs Non-autoregressive

تخيل أنك تكتب خطاباً: الطريقة الذاتية (AR) تكتب كلمة كلمة — لا يمكنك كتابة الكلمة الثالثة قبل الثانية. الطريقة غير الذاتية (NAR) تكتب كل الكلمات دفعة واحدة. الأولى أدق لكن أبطأ. الثانية أسرع بكثير لكن قد تخسر بعض السلاسة.

FastPitch (NVIDIA)

مشابه لـ FastSpeech 2 لكن مع تحكم صريح في Pitch (الدرجة الصوتية). يفيد لإضافة تعبير وانفعال. يستخدم Duration + Pitch + Energy predictors.

🎛️ Vocoder — من الطيف إلى الموجة

المرحلة الثانية: تأخذ Mel Spectrogram وتولّد الشكل الموجي الفعلي (WAV).

النموذجعامالجودةالسرعةملاحظات
WaveNet2016⭐⭐⭐⭐⭐بطيء جداًDeepMind — أول vocoder عصبي مقنع
WaveGlow2018⭐⭐⭐⭐سريعNVIDIA — قائم على Normalizing Flows
MelGAN2019⭐⭐⭐سريع جداًGAN-based، خفيف وسريع
HiFiGAN2020⭐⭐⭐⭐⭐سريع جداًالمعيار الحالي — جودة WaveNet بسرعة GAN
LPCNet2019⭐⭐⭐سريع جداًيعمل على CPU حتى
🧮 كيف يعمل HiFiGAN

HiFiGAN يستخدم Multi-Receptive Field Fusion (MRF): عدة طبقات Conv1D بمقاسات نواة مختلفة لالتقاط أنماط بأطوال متفاوتة، مع Periodic Activation (يولد الموجات الدورية للكلام). خسارة: GAN loss + Mel loss + Feature matching loss.

🔄 التدفق الكامل: Text → Spectrogram → Audio

PythonTTS كامل مع FastSpeech2 + HiFiGAN
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).
Pythonاستخدام XTTS-v2 لتوليد الكلام
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). يستطيع:

  • تغيير العاطفة في الجملة بأكملها أو في كلمات محددة
  • ٧ عواطف: سعيد، حزين، غاضب، مفاجأ، خائف، هادئ، محايد
  • سرعات كلام مختلفة
  • اللهجات واللكنات
💡 لماذا Orpheus مختلف؟

إنه أول نموذج TTS مفتوح المصدر يقترب من ElevenLabs في الجودة والعاطفة. يمكنه قول "أنا سعيد بلقائك" بنبرة دافئة حقيقية — وليس بمجرد تغيير pitch.

🌐 CosyVoice

من Alibaba — نموذج متعدد اللغات مع دعم ممتاز للصينية والعربية. يستخدم Flow Matching + LLM. يدعم الصوت متعدد المتحدثين من مقطع واحد.

💬 ChatTTS

نموذج TTS مخصص للمحادثات الطبيعية. يضيف توقفات، تغيرات في النبرة، وعلامات عدم اليقين (مثل "آه"، "همم"). يجعل الصوت يبدو كأنه إنسان حقيقي يتحدث.

⚖️ مقارنة شاملة

النموذجمفتوح؟ArabicVoice 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.

PythonAudioLDM — توليد مؤثرات صوتية
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 vs TTS

Voice Conversion يحول ملف صوتي (تقول الجمله بصوتك) إلى صوت آخر. TTS يولد الصوت من النص. أدوات مثل RVC ممتازة للهواة والمبدعين لأنها تحتاج بيانات أقل.

🎧 Speech Enhancement

تحسين جودة الصوت وإزالة الضوضاء:

  • Demucs (Meta): فصل الموسيقى إلى مكوناتها (غناء، bass، drums، غيرها). يستخدم Conv-TasNet architecture.
  • SepFormer (Meta): فصل الكلام المتداخل — متحدثان يتحدثان في نفس الوقت. يستخدم Transformer للترميز الزمني.

👥 Speaker Diarization

الإجابة على السؤال: «من يتحدث ومتى؟»

PyAnnote Audio: مكتبة Python الرائدة في diarization. تكتشف التغييرات بين المتحدثين وتصنف كل مقطع:

PythonSpeaker Diarization مع PyAnnote
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 على اللهجة النجدية

١. إعداد البيئة

bash
# متطلبات 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  # للتسريع

٢. معالجة البيانات

Pythonتجهيز الملفات الصوتية
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")

٣. التدريب

bashLoRA fine-tuning XTTS
# 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
bashFull fine-tuning XTTS
# تكلفة أعلى لكن جودة أفضل
# الوقت: ~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 = ~$١٠,٠٠٠–٥٠,٠٠٠ (موصى به فقط للمؤسسات).

٤. التوليد والاختبار

Pythonاختبار النموذج بعد التدريب
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) لتحسين النطق.
Pythonتشكيل النص قبل TTS
# تشكيل النص العربي تلقائياً
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 سعودي ناطق باللهجة النجدية:

  1. جمع البيانات: شراء ٣٠ ساعة من FutureBee AI + تسجيل ١٠ ساعات نجدية إضافية (~$٥,٠٠٠)
  2. تجهيز النصوص: تدقيق إملائي، تشكيل تلقائي، text normalization
  3. تجهيز الصوت: resample to 24kHz, trim silence, split على pauses
  4. اختيار الأسلوب: البدء بـ XTTS LoRA (تجربة سريعة) → FastSpeech 2 (إنتاجي)
  5. التدريب: ~٦ ساعات LoRA → تقييم → ~٥ أيام full fine-tune → تقييم
  6. النشر: ONNX Runtime أو TensorRT (الفصل ٧)
  7. التحسين المستمر: إضافة بيانات جديدة، ضبط hyperparameters
💡 ملاحظة ختامية للفصل

أفضل نموذج TTS عربي متاح تجارياً هو SILMA AI للهجة النجدية (جاهز للاستخدام). إذا كنت تريد بناء نموذجك الخاص: XTTS-v2 + LoRA يعطيك ٨٠٪ من الجودة بـ ١٠٪ من التكلفة. استثمر وقتك في البيانات والـ post-processing (تشكيل + normalization) — هذه هي العامل الأكبر في الجودة النهائية.

٧ 🚢

النشر والتشغيل (Deployment)

النموذج المدرب ليس مفيداً حتى يعمل في الإنتاج. هذا الفصل يغطي تحسين وتشغيل نماذج TTS/STT في التطبيقات الحقيقية.

⚡ TensorRT — NVIDIA

مُحسِّن الاستدلال من NVIDIA للنماذج العصبية. يدمج الطبقات، يحدد الأوزان إلى FP16/INT8، ويحسن تخطيط الذاكرة. يمكن أن يسرع الاستدلال ٢–٥ مرات مقارنة بـ PyTorch الأصلي.

Pythonتحويل HiFiGAN إلى TensorRT
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 لكن يدعم كل المنصات.

PythonONNX Runtime للنماذج الصوتية
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.

PythonFastAPI + WebSocket لنشر TTS
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 ناطق باللهجة النجدية.
انتقل إلى المجلد الخامس لاستكشاف نماذج الفيديو والأنظمة متعددة الوسائط.