دوز مباشرة للمحتوى الرئيسي
دروس فالذكاء الاصطناعي

صناعة صوت حميمي طبيعي ثنائي اللغة باستعمال ElevenLabs وWhisper وffmpeg

كيشرح هاد الدليل، اعتماداً على تجارب حقيقية، كيفاش تصمّم صوت طبيعي ثنائي اللغة بالعربية والإنجليزية، وتتحكّم فالتنفّس والنبرة، وتستعمل مواد صوتية مستقلة وffmpeg لإنجاز أصوات البوسان، والأجواء المحيطة، ومقاطع صوتية، وصوت المكالمات المباشرة.

صناعة صوت حميمي طبيعي ثنائي اللغة باستعمال ElevenLabs وWhisper وffmpeg

نظرة عامة على المشروع

هاد الـworkflow مخصّص لصناعة صوت حميمي ثنائي اللغة، بالصينية والإنجليزية، يكون طبيعي ومترابط. المبدأ الأساسي ماشي هو نخلي نموذج تحويل النص لصوت يقلّد جميع الأصوات، ولكن نقسمو العمل النهائي لمسارات صوتية عندها أدوار مختلفة: ElevenLabs كيتكلف بالحوار والتنفس، والتسجيلات الحقيقية كتوفر أصوات القبل والجو المحيط، وffmpeg كيتكلف بالقص وتبديل السرعة والمزج والربط، بينما Whisper كيخدم كأداة لمراقبة الجودة.

الخلاصة الأهم: نموذج الصوت كيتكلف غير بـ«الكلام» والتنفس اللي داخل فإيقاع الكلام. أصوات القبل والأصوات الرطبة وغيرها من المؤثرات غير اللغوية خاصها تدار بوحدها، ومن بعد تتخلط مع الصوت البشري.

الطريقة المذكورة فـREADME تكمّلات على Mac mini، ولكنها ما مرتبطةش بموديل معيّن من Mac. أي نظام يقدر يستعمل ElevenLabs API، ويشغّل ffmpeg ويستعمل Whisper للتفريغ، يقدر يعاود الخطوات الأساسية.

الأدوات الأساسية والأدوار ديالها

  • ElevenLabs: كينشئ الصوت عبر Voice Design، وكيولّد الحوار باستعمال نموذج تحويل النص لصوت.
  • ffmpeg: كيوحّد معدل أخذ العينات، كيبطّأ السرعة، كيقصّ المقاطع، كيدير التلاشي، والمزج والربط.
  • Whisper: كيتحقق واش المقاطع غير اللغوية ما تحوّلاتش لكلمات قابلة للتعرّف عليها.
  • تسجيلات حقيقية مرخّصة بشكل قانوني: كتوفر أصوات الجو المحيط بشكل مستقل. الطريقة الأصلية استعملات غير مواد CC0 من الملك العام، مع تسجيل المصادر.

التثبيت والتحضير قبل البداية

1. تحضير ElevenLabs

سجّل فـElevenLabs وخذ بيانات الاعتماد اللي كتسمح باستعمال Voice Design وواجهة تحويل النص لصوت. الواجهات اللي خاصك فعلياً هي POST /v1/text-to-voice/design وPOST /v1/text-to-voice.

فالمرحلة الأولى صيفط voice_description ونصّ التجربة باش تحصل على عدة معاينات مرشحة؛ من بعد ما تختار المرشح، استعمل generated_voice_id ديالو باش تحفظ الصوت النهائي. منين يكمل الحفظ، سجّل voice_id واستعمل نفس المعرّف فكل عمليات الدمج اللاحقة.

2. تثبيت ffmpeg

تأكد بلي الطرفية تقدر تشغّل ffmpeg مباشرة. فـmacOS تقدر تثبتو باستعمال مدير الحزم المعتاد. من بعد التثبيت شغّل الأمر التالي للتحقق:

ffmpeg -version

3. تحضير Whisper

Whisper فهاد الطريقة ما كيستعملش باش يولّد الصوت، ولكن كـ«مسبار للتحقق من الصوت». كيراجع المقاطع المرشحة ديال القبل أو الأصوات غير اللغوية: إلا قدر يفرّغ منها كلمات بشكل ثابت، فهذا غالباً كيعني بلي النموذج كان كينطق كلمات محاكية للصوت، وماشي كينتج صوتاً غير لغوي حقيقياً.

4. إنشاء مجلدات المواد

من الأحسن تقسّم الملفات مسبقاً حسب الدور ديالها، ويدخل فيها على الأقل: مخرجات الصوت البشري، مرشحو أصوات القبل، مواد القبل اللي دازت الفحص، التسجيلات الأصلية ديال الجو، نوافذ الجو المقطوعة، وملفات المزج النهائية. هاد التنظيم كيمنع استعمال مواد مرشحة وما تراجعاتش مباشرة فالمنتج النهائي.

الخطوة الأولى: تصميم صوت ثنائي اللغة بالصينية والإنجليزية

استعمل وصفاً مكتوباً، وما تعتمدش غير على اختيار صوت من مكتبة الأصوات

حسب اختبارات README، الأصوات الصينية الجاهزة ممكن يكون عندها لكنة فالإنجليزية، بينما وصف الخلفية الثنائية اللغة بوضوح عبر Voice Design كيعطي غالباً نتيجة طبيعية أكثر فالصينية والإنجليزية بجوج. خاص الوصف يحدد أربع فئات ديال المعلومات: القدرة فاللغة الأم، الفئة العمرية، العلاقة أو طابع الشخصية، والمشاعر المستهدفة.

هاد هو الوصف اللي استعملاتو الطريقة الأصلية، وتقدر تعدلو حسب احتياجات الشخصية:

Native bilingual speaker of Mandarin Chinese (standard putonghua) and American English,
both at native level, with no cross-language accent in either. Male, 35–40. Studio quality.
Persona: mature, dominant, doting. Emotion: composed, doting, low-burning.
Rich, chesty, slightly gravelly low voice; unhurried, even pacing with weight on key words
and a breathy softness at the ends of sentences.

ما تستعملش نصوص إعلانية فالتجربة. اختار كلاماً غادي تقولوه الشخصية فعلاً فالحياة اليومية، وولّد عدة مرشحين باستعمال نفس الوصف. فالاستماع الأول، ركّز واش الصوت كيشبه الشخصية المستهدفة وهي كتهضر بشكل طبيعي، وما تقارنش غير واش الصوت غليظ أو زوين.

اختيار النموذج المناسب

  • الحوار العادي: README كيوصي بـv3، حيث مناسب للتعبير على المشاعر اليومية انطلاقاً من محتوى النص.
  • المكالمات الفورية أو المشاهد الحميمية: كيوصى بـv4. هو أنسب لمعالجة الصينية والإنجليزية والمزج بينهما فالصوت نفسه، وكيتعرف بسهولة أكثر على وسوم التوجيه الصوتي الخفيفة.
  • المقاطع الطويلة بالإنجليزية فقط: إلا ما استعملتيش v4، تقدر تختار eleven_turbo_v2_5 وتحدد بوضوح language_code=en باش تنقص اللكنة الصينية فالإنجليزية.

ضبط معايير الصوت

نقطة البداية اللي تقاست فـREADME هي:

  • stability=0.35: تنوّع ودرامية أوضح.
  • stability=0.5: أقرب للهضرة اليومية، وكيقلل الإحساس بالتمثيل المتعمّد.
  • similarity_boost=0.8: للحفاظ على ثبات الصوت المستهدف.
  • style=0.3: السجل الأصلي كيذكر أن v3 ما كيتعرفش على هاد المعامل، لذلك ما تعتمدش عليه للتحكم فـv3.

فالتصحيح، بدّل متغيراً واحداً كل مرة. خبي نسخة من صوت مرجعي سبق وحصل على تقييم مزيان، ومن بعد بدّل غير الاستقرار أو وسم واحد، باش تعرف بالضبط منين جا التغيير.

الخطوة الثانية: دمج التنفس مع إيقاع الكلام

زيد الوسوم غير ملي يتبدل الأسلوب الصوتي

ما تزيدش وسماً فكل جملة. غالباً كيكون كافي تستعمل جوج أو ثلاثة ديال الوسوم الخفيفة فكل مجموعة من ستة حتى لعشرة جمل، والجمل اللي من بعد تقدر تكمل بنفس الأسلوب الصوتي. الكلمات اللي كتستعملها الطريقة الأصلية بزاف هي low وclose وquiet وsoft وunhurried.

[low and close to her ear, unhurried]
……جي. ما تختاباش.

……قرّب شوية. إيوا.

[quiet laugh under the breath]
……علاش مستعجل؟

كلمات قوية بحال intense وheavy وgrowl وstrained وrough ماشي ممنوعة نهائياً، ولكن فالاختبارات الأصلية كانت كتخلي الصوت مبالغاً فيه بسهولة. الاستراتيجية اللي كتخدم بثبات أكثر هي تخلي الصوت منخفض وقريب وبطيء، ماشي تطلب من النموذج يمثل بقوة.

استعمل علامات الترقيم لتشكيل التنفس

مقارنة مع تكرار كتابة heavy breathing، إضافة كمية مناسبة من «……» فبداية الجملة أو نهايتها أو وسطها كتجيب توقفاً طبيعياً أكثر. فكل مجموعة، دير غير جوج أو ثلاثة ديال الأنفاس الواضحة، وبدّل طريقة التعبير، بحال زفير خفيف، توقف وسط الكلام، حبس نفس قصير، زفير مع ابتسامة، أو قطع الصوت قبل ما يكمل.

تكرار نفس النفس بشكل متواصل كيبيّن الإحساس بالتكرار. من بعد التوليد، خاصك تسمع المقطع كامل، وما تكتفيش بمراجعة الجمل منفردة.

ولّد المقطع كاملاً قدر الإمكان

ملي كيتولد المقطع كامل دفعة وحدة، كيكون الحفاظ على استمرارية التنفس والمشاعر وطبقة الصوت أسهل. إلا ركّبتي ثمان جمل كل وحدة بوحدها، كل جزء غادي يبان بحال إلا بدا من جديد. إلا كانت المكالمة الفورية ما كتسمحش بتوليد المقطع كامل، قسّمو لكتل من جوج جمل أو حوالي أربعين حرفاً صينياً، وتجنب كتلة من جملة وحدة.

نقل السياق

v4 كيدعم previous_text وnext_text. ملي كتولد الكتل وحدة بوحدة، صيفط النص السابق واللاحق للنموذج، فهذا كيخفف الإحساس بالقراءة الآلية. README كيشير بوضوح أن v3 ما كيدعمش هاد الجوج ديال الحقول، وإرسالهم لـv3 ممكن يسبب خطأ، لذلك خاص بناء الطلبات حسب النموذج.

تجنب التوجيه اللغوي الخاطئ

إلا كان البرنامج كيحدد النموذج أو اللغة اعتماداً على نسبة الحروف الصينية، خاصو يحيد أولاً الوسوم الإنجليزية اللي بين الأقواس المربعة. وإلا ممكن جملة صينية قصيرة تتصنف بالخطأ كإنجليزية بسبب كثرة الوسوم الإنجليزية فيها. مع v4 تقدر تخلي نفس النموذج مستعملاً دائماً، وهاد الشي كيقلل تبديل اللغة بين الصينية والإنجليزية.

الخطوة الثالثة: التحكم فالسرعة

فالاختبارات الأصلية، معامل speed ديال v4 ما عطاش النتيجة المتوقعة. باش تبطّأ v4، زِد أولاً توقفات طبيعية فالنص، ومن بعد استعمل ffmpeg لتبطئة الصوت مع الحفاظ على الطبقة:

ffmpeg -i input.mp3 -filter:a "atempo=0.9" output.mp3

إلا كان المقطع بالإنجليزية فقط واستعملتي نموذج turbo، فـREADME كيسجل نقطة بداية صالحة هي speed=0.84، وتقدر تزيد توقفات بين الجمل:

<break time="0.4s"/>

ما تكدسش بزاف ديال وسوم التوقف فمقطع واحد. الاختبارات الأصلية كتقترح ستة تقريباً كحد أقصى، حيث الزيادة ممكن تخلي الخرج غير مستقر.

الخطوة الرابعة: بناء مكتبة قابلة لإعادة الاستعمال لأصوات القبل

علاش ما نكتبوش كلمات محاكية للصوت مباشرة؟

ملي كنخليو نموذج تحويل النص لصوت ينطق كلمات محاكية للقبل، فالنتيجة الشائعة كتكون مقاطع صوتية أو إحساس بالحروف يمكن التعرف عليه، وماشي صوتاً غير لغوي طبيعياً. وحتى كتابة وسوم الحركة فقط ممكن تتحول لصوت همهمة عادي. لذلك المشروع الأصلي استعمل طريقة مكتبة المواد: «ولّد كميات كبيرة أولاً، ومن بعد قصّ وفرز».

خطوات الإنتاج

  1. استعمل نفس الصوت ونفس النص اللي فيه حركة القبل، وولّد المقطع كاملاً من خمس حتى ست مرات. الطريقة الأصلية استعملات v4 وstability=0.35.
  2. استعمل كشف الصمت أو أداة لتحرير الصوت، وقصّ المقاطع غير اللغوية المرشحة من كل خرج.
  3. فرّغ كل مقطع باستعمال Whisper. أي مقطع كيخرج منه حرف أو كلمة واضحة خاصو يتحيد مباشرة.
  4. راقب نسبة طاقة الفرق إلى الطاقة الأصلية. فالاختبارات الأصلية، المقاطع الأكثر مصداقية كانت غالباً فوق 0.2؛ والمقاطع اللي تحوّلات لنطق كلمات كانت تقريباً بين 0.12 و0.16؛ والهمهمة العادية كانت غالباً تحت 0.1. هاد الأرقام جاية من مواد محددة، وصالحة غير كمرجع أولي.
  5. سمع يدوياً للمواد اللي دازت الفحص، وصنّفها لفئات بحال قبلة خفيفة، قبلة أعمق، وتغيّر فالموضع.
  6. وقت الاستعمال، اختار عشوائياً مقطعاً ما تستعملش مؤخراً، وبدّل الطبقة والسرعة بشكل خفيف بما لا يتجاوز تقريباً 3%. الطريقة الأصلية كتسمح غير بالتبطئة، وما كتسمحش بالتسريع.

الفرز الآلي ما يقدرش يعوض الاستماع اليدوي. README كيذكر أن مقطعاً فيه صفير مستمر داز، وWhisper فرّغ منه نتيجة شبيهة بـSssss، ولكن بسبب إغفال فالفحص دخل للمنتج النهائي. الطريقة الصحيحة خاصها تراجع نص التفريغ، ومؤشرات الموجة، والإحساس الفعلي عند الاستماع.

الخطوة الخامسة: إكمال المزج بمسارين باستعمال صوت الجو الحقيقي

اختيار المواد

الطريقة الأصلية قارنت بين ثلاث إمكانيات: نخليو نموذج الصوت يحاكي الجو، نستعملو توليد مؤثرات صوتية بالذكاء الاصطناعي، أو نعتمدو على تسجيلات حقيقية. فالنتيجة تم اختيار تسجيلات حقيقية CC0 بلا صوت بشري وبترخيص واضح. قبل استعمال أي تسجيل خارجي، خاص التحقق من الرخصة وحفظ مصدره.

ما تضربش الصوت مباشرة فمعامل ثابت

المستوى المتوسط والقمم ديال تسجيلات الجو ممكن يختلفو بزاف، وممكن يكون فيها حتى فترات طويلة هادئة. استعمال معامل صوت ثابت مباشرة ممكن يخلي الصوت ما يتسمعش نهائياً أو يغطي على الصوت البشري. الطريقة الأكثر استقراراً هي:

  1. قصّ عشوائياً جوج نوافذ من المادة الأصلية، بطول قريب من طول الصوت البشري.
  2. قِس القمة ديال النافذتين، واختار اللي فيها صوت فعلي أكثر.
  3. حسب الكسب باش تكون قمة صوت الجو تقريباً مساوية لقمة الصوت البشري الحالي ناقص 12 dB.
  4. زيد تلاشي دخول مدته 0.5 ثانية لصوت الجو.
  5. خلي تقريباً ثانية وحدة من الصوت من بعد ما يسالي الصوت البشري، واستعمل تلاشي خروج مدته تقريباً 1.4 ثانية.
  6. إلا كانت مادة القبلة فيها أصلاً الإحساس المناسب، ما تزيدش عليها صوت الجو مرة أخرى.

مثال على المزج باستعمال ffmpeg

نفترضو أن الصوت البشري هو v.mp3، ونافذة صوت الجو المقصوصة هي w.wav، وأن GAIN هو الكسب المحسوب بعد محاذاة القمم، وEND هو الموضع اللي كيبدا فيه التلاشي:

ffmpeg -i v.mp3 -i w.wav -filter_complex \
 "[1:a]volume=GAIN,afade=t=in:st=0:d=0.5,afade=t=out:st=END-1.4:d=1.4[w];\
  [0:a]apad=pad_dur=1.0[v];[v][w]amix=inputs=2:duration=first:normalize=0[a]" \
 -map "[a]" -c:a libmp3lame -q:a 2 out.mp3

normalize=0 مهم بزاف. حسب اختبارات README، إلا تحيد، amix ممكن يهبط مستوى الصوت البشري بشكل واضح.

فرّق بين وسم المزج ووسم القراءة

تقدر فمرحلة الكتابة تستعمل وسوماً بحال [low, close, wet]، وتخلي wet وسم للمزج اللاحق. قبل ما يرسل البرنامج الطلب لنموذج الصوت، خاصو يحيد هاد الكلمة باش ما يحاولش النموذج يمثل المؤثر الصوتي؛ ومن بعد ما يرجع الصوت البشري، زِد المادة الحقيقية المناسبة حسب الوسم. ملي ما يبقاش الوسم فالعنصر اللي من بعد، خاص صوت الجو يبدا يتلاشى.

الخطوة السادسة: إنتاج مقطع صوتي كامل

قسّم السيناريو لثلاثة أنواع ديال الكتل: كتل الحوار العادي كتدوز لتحويل النص لصوت؛ الكتل غير اللغوية بالكامل كتختار من مكتبة المواد؛ والكتل اللي فيها وسم صوت الجو كتولّد الصوت البشري أولاً، ومن بعد كتدير المزج بمسارين.

ممكن يكون عند الصوتيات اللي جاية من مصادر مختلفة معدلات عينات مختلفة، وخصّها تتوحّد قبل الدمج، مثلاً حوّلها أولاً لـ 44100 Hz:

ffmpeg -i input.wav -ar 44100 output.wav

من بعد ما يتوحّد معدل العينات، استعمل فلتر concat ديال ffmpeg باش تجمعهم فمسار واحد حسب ترتيب السكريبت. منين يكمل الدمج، خاصك تسمع التسجيل من اللول حتى للآخر، وتركّز بالخصوص واش كاين تبدّل مفاجئ فالتون، والضجيج الخلفي، وعلو الصوت، والتنفس بين المقاطع.

الخطوة السابعة: الاستعمال فالمكالمات المباشرة

المهم فالوضع المباشر هو تنقص وقت الانتظار مع الحفاظ على السياق. تقدر تقسّم النص حسب الوسوم اللي جاية بوحدها فالسطر، باش الجمل اللي من بعدها وما فيهاش وسم جديد تورث نفس الصوت الحالي. منين يتجمعو جوج جمل أو تقريباً أربعين حرف صيني، صيفطهم للتوليد.

  1. ملي كيتشغّل المقطع الحالي، ولّد المقطع اللي من بعدو مسبقاً فالخلفية.
  2. مرّر لـ v4 الجملة اللي قبل المقطع الحالي والجملة اللي من بعدو.
  3. المقاطع غير اللفظية الخالصة خذها مباشرة من صندوق المؤثرات، وما تعاودش تطلب تحويل النص لصوت.
  4. من بعد ما يكمل تشغيل الجملة الأخيرة، عاد حلّ الميكروفون باش ما يتغطّاش الصوتين على بعضياتهم.
  5. إلى فشل التوليف، عرض غير النص أو خلّي صمت قصير، وما تبدّلش مؤقتاً لصوت آخر.

الانقطاع فالشخصية بسبب تبديل الصوت فالنص غالباً كيبان أكثر من توقّف ديال حوالي ثانية. لذلك، خاص الأولوية تكون للحفاظ على نفس صوت الشخصية.

تقنيات متقدمة لتصحيح الأخطاء

إنشاء عينات ثابتة للمقارنة

حفظ تسجيلاً أساسياً تأكدتي بلي طبيعي. كل مرة بدّل غير حاجة وحدة من بين الاستقرار، والوسوم، وعلامات الترقيم، والموديل، ولا سرعة المعالجة اللاحقة، وقارن النسخة الجديدة بالنسخة الأساسية فاستماع أعمى.

تقسيم وسوم التوليد عن وسوم المعالجة اللاحقة

موديل الصوت خاصو يتوصل غير بوسوم الصوت اللي خاصو يمثّلها؛ أصوات البيئة، وفئة المادة، وقوة الميكساج راه بيانات وصفية ديال المعالجة اللاحقة، وخصها تتحيّد قبل الطلب. بهاد الطريقة كتفادى أن الموديل يقرا تعليمات الإنتاج بصوت مسموع أو يحاول يقلّد المؤثرات الصوتية.

حفظ سجل الاستعمال الأخير

دير طابور للاستعمالات الأخيرة ديال صندوق المؤثرات، مثلاً تفادى آخر عشرة مقاطع تستعملو. هاد الشي كينقص الإحساس بالتكرار، وكيكون أكثر استقراراً من السحب العشوائي الكامل كل مرة.

عتبة آلية للجودة

تقدر تزيد الفحوصات التالية لخط إخراج المحتوى:

  • واش Whisper نسخ كلمات ما خاصهاش تكون موجودة.
  • واش الفرق بين قمم صوت الكلام وصوت البيئة قريب من القيمة المستهدفة.
  • واش معدل العينات موحّد.
  • واش نهاية التسجيل محافظة على الذيل الصوتي الطبيعي.
  • واش الموديل المستعمل فالطلب كيدعم المعاملات الممرّرة.
  • واش تحيّدت الوسوم الإنجليزية قبل كشف اللغة.

التكلفة، الترخيص وحدود المحتوى

الـ README كيسجّل استعمال خطة Creator، بثمن 22 دولار فالشهر وحوالي 120 ألف كلمة؛ تصميم الصوت لأول مرة كيستهلك تقريباً ثلاثة آلاف كلمة، والاستعمال اليومي كيتراوح بين بضع مئات وألفين كلمة. والـ README كيشير حتى لعرض محدود المدة كان موجوداً فداك الوقت على v4، لذلك خاص الثمن الفعلي، والرصيد، وطريقة الفوترة يرجعو للصفحة الرسمية وقت الاستعمال.

خاص جميع المحتويات تكون مرتبطة حصرياً ببالغين واضحين. ما تستعملش إعدادات لشخصيات ممكن يتفهم منها أنها قاصرة، ولا تعابير عمرية غامضة. المنصة كتراجع المحتوى اعتماداً على النص، والمحتوى المخالف ممكن يسبب توقيف الحساب.

ملي تستعمل تسجيلات ديال أشخاص آخرين، خاصك تتأكد من الترخيص. حتى إلا كانت المادة قابلة للتحميل مجاناً، هاد الشي ما كيعنيش بالضرورة مسموح تعاود توزّعها أو تستعملها تجارياً. المسار الأصلي كيستعمل غير مواد CC0، وكيحتافظ بمصدر كل ملف.

الخلاصة

الصوت الحميمي الطبيعي ما كيتحققش بتكديس وسوم قوية. الطريقة الأكثر موثوقية هي تخلي موديل الصوت يركّز على الحوار، والإحساس الخفيف، وإيقاع التنفس، وتقسم الأصوات غير اللفظية لمواد مختارة بعد التفريغ والاستماع اليدوي، ومن بعد تخلي ffmpeg يدير مطابقة القمم، والتلاشي فالدخول والخروج، والدمج.

بدا بأصغر نسخة: أولاً دير صوتين ثابتين بلغتين، ومن بعد تحقق من التوليد الكامل ونقل السياق، ثم زِد صندوق المؤثرات وصوت البيئة. فكل مرحلة احتافظ بعينة أساسية وبدّل متغير واحد فقط؛ غالباً هاد الطريقة كتوصّل لنتيجة طبيعية، منسجمة وقابلة لإعادة الاستعمال أسهل من الزيادة المستمرة فالوسوم.