/audio/speech سهل. سرد مقالة حقيقية هو حيث تظهر المشكلات المثيرة للاهتمام: تقبل نقطة النهاية 4096 حرفًا كحد أقصى لكل طلب، وكل صوت ينتمي إلى نموذج معيّن، وصيغ الصوت تختلف من نموذج إلى آخر، والنص المكتوب ليُقرأ لا يشبه إطلاقًا النص المكتوب ليُسمع.
في هذا الدرس سنعالج الأربعة كلها. النتيجة سكربت يُحوِّل عنوان URL إلى ملف صوتي واحد:
- اختيار نموذج وصوت يناسبان السرد الطويل
- إجراء طلب كلام واحد وحفظ الصوت
- تقسيم مقالة طويلة إلى أجزاء تتّسع لحدّ الأحرف
- دمج الأجزاء المُولَّدة في ملف واحد دون طبقات مسموعة
- إعادة صياغة المقالة إلى نص يستحق الاستماع
- جمع القطع معًا، ثم إلقاء نظرة على البثّ للاستخدام التفاعلي
الإعداد
تحتاج إلى Python 3.9 أو أحدث، وحزمةrequests، ومفتاح Venice API.
1. اختر نموذجًا وصوتًا
الأصوات تنتمي إلى نماذج. إرسال صوت من عائلة إلى نموذج من عائلة أخرى هو أشيع الأخطاء الأولى، لذا ابدأ بسرد ما يقبله كل نموذج فعليًا:model_spec.voices هي القائمة المعتمدة للأصوات في نموذج، ويخبرك supported_formats بقيم response_format التي يقبلها. احذف | length من الاستعلام لطباعة أسماء الأصوات نفسها.
سنستخدم tts-xai-v1 مع الصوت eve. يدعم pcm، وهو ما يجعل دمج الأجزاء سهلًا في القسم 4.
سرعة التوليد تتفاوت بين نماذج TTS بشكل أكبر بكثير من جودة المخرجات، والفجوة كبيرة بما يكفي لتغيير معماريتك. قِس زمن طلب واقعي مقابل نموذجين أو ثلاثة قبل أن تلتزم. جزء قد يُعيده نموذج في ثوانٍ قليلة قد يستغرق آخر عدة دقائق.
2. إجراء طلب واحد
جسم الاستجابة صوت خام لا JSON، لذلك اكتب البايتات مباشرةً إلى ملف.3. تقسيم النص عند حدّ 4096 حرفًا
يقبل حقلinput 4096 حرفًا كحد أقصى. النص الأطول يُرفض بالكامل بدلًا من اقتطاعه بصمت:
narrate.py:
max_chars الافتراضية 1500 لا شيء قريب من سقف 4096، وذلك بقصد. يزداد وقت التوليد مع طول الإدخال، لذلك تعود الأجزاء الأصغر أسرع، ولأنها تعمل بالتوازي فإنها تُنهي المهمة كاملة أسرع. كما تجعل إعادة المحاولة رخيصة عندما يفشل أحد الطلبات.
4. دمج الأجزاء في ملف واحد
ربط صوتٍ مُشفَّر مثل MP3 غير موثوق، لأن كل جزء يحمل ترويسات إطاراته الخاصة. طلبpcm يتجاوز المشكلة كليًا. PCM عيّنات خام دون حاوية، فالدمج مجرد إلحاق بايتات، ووحدة wave في مكتبة Python القياسية تكتب لنا الترويسة.
ThreadPoolExecutor.map يُعيد النتائج بالترتيب الذي أُرسلت به المدخلات، لذلك تصل الأجزاء بترتيب القراءة رغم أنها وُلِّدت في الوقت نفسه.
لمعرفة المعدّل لأي نموذج، اطلب مقطعًا قصيرًا واحدًا بصيغة wav واقرأ الترويسة التي يعود بها:
5. إعداد نصّ يبدو مناسبًا للاستماع
قراءة Markdown مستخرَج حرفيًا شبه غير قابلة للاستماع. عناوين URL أوضح مثال. نموذج الكلام يهجّئها حرفًا حرفًا، فيخرجhttps://docs.venice.ai/llms.txt هكذا:
h t t p s نقطتان مائلة مائلة docs نقطة venice نقطة a i l l m s نقطة t x tتسبّب العناوين وعلامات النقاط والجداول وكتل الشيفرة نُسخًا أصغر من المشكلة نفسها. بدلًا من محاربة Markdown بالتعبيرات النمطية، يمكننا أن نطلب من نموذج دردشة إعادة صياغة المقالة كنصٍّ مُعدّ للنطق. أنشئ
article_to_audio.py:
URL_PATTERN كشبكة أمان للرابط العَرضي الذي قد يتركه النموذج.
6. جمع الأجزاء معًا
نقطة الدخول تستخرج، وتكتب النص، وتحفظه، وتسرده:script.txt بجانب الصوت يستحق السطرين. حين يبدو سردٌ خاطئًا، يُظهر النصُّ في الغالب سبب ذلك، ويمكنك إصلاحه دون دفع تكلفة توليد جديدة.
Venice مبنيّ على مبدأ بسيط لكنه قوي. خصوصية المستخدم أولًا. تنبع بنية المنصة بكاملها من هذا الالتزام الفلسفي.
البثّ للاستخدام التفاعلي
السرد الدفعي يُحسِّن الوقت الإجمالي. أما واجهة الصوت التفاعلية فأولويتها معاكسة، وهي إخراج أول صوت بأسرع وقت ممكن. تعيينstreaming: true يُعيد الجسم جملةً بجملة أثناء التوليد، بحيث يمكن أن يبدأ التشغيل بعد ثانية تقريبًا بدلًا من انتظار المقطع الكامل.
pcm على mp3 عندما تُغذّي به مباشرةً Web Audio API في المتصفح أو جهاز صوت، لأنه لا يحتاج إلى خطوة فك تشفير.
خيارات الطلب التي تستحق المعرفة
الأخطاء
بما أن الأجزاء مستقلّة، فإن فشلًا يكلّفك دومًا واحدًا منها فقط، وإعادة استدعاء
synthesize لذلك الجزء آمنة دائمًا.
الخطوات التالية
بعض الامتدادات الطبيعية من هنا:- خزّن الصوت مؤقتًا حسب مُلخِّص هاش للنص والصوت والنموذج، بحيث لا يُعاد توليد الفقرات غير المتغيّرة أبدًا.
- استبدل الصوت بصوتٍ مستنسخ عبر استنساخ الصوت ليستخدم السرد صوتك.
- ولّد النص المصدر بدلًا من استخراجه، باستخدام إجابات موثّقة بالمصادر عبر البحث في الويب.
- أضف مقدمة أو صوتًا خلفيًا عبر الموسيقى والمؤثرات الصوتية.
تحويل النص إلى كلام
مرجع لنقطة نهاية الكلام ومعاملاتها.
استنساخ الصوت
اسرد بصوت مخصّص بدلًا من صوت جاهز.
إجابات موثّقة بالمصادر عبر البحث في الويب
ولِّد النص الذي ستسرده هذه الأداة.
تحويل الكلام إلى نص
فرِّغ الصوت للتحقق من سرد كامل من طرف إلى طرف.