تحويل النص إلى كلام باللغة العربية في Python: دليل عملي خطوة بخطوة بالشيفرة البرمجية

في هذه الصفحة
- ما تحتاجه قبل البدء
- الخطوة 1: أول طلب لتحويل النص إلى كلام بالعربية في Python
- الخطوة 2: اختيار الصوت العربي المناسب بحسب اللهجة
- الخطوة 3: دالة مساعدة قابلة لإعادة الاستخدام مع إعادة المحاولة وفحص الوقفات
- الخطوة 4: ضبط التشكيل قبل توليد الفصحى صوتياً
- الخطوة 5: توليد مئات المقاطع الصوتية العربية مجمعة
- الخطوة 6: تحويل مقال عربي طويل إلى ملف صوتي واحد
- الخطوة 7: بث الصوت العربي للوكلاء الصوتيين
- كتابة نص عربي يُقرأ بسلاسة عبر الكود
- استكشاف أخطاء تحويل النص إلى كلام باللغة العربية وإصلاحها في Python
- كيف اختبرنا هذا الكود
- إخلاء المسؤولية
يوضح هذا الدليل كيفية توليد كلام عربي باستخدام Python، خطوة بخطوة، مع شيفرة برمجية يمكنك نسخها وتشغيلها مباشرة. ستتعلم كيفية إرسال أول طلب لك، واختيار صوت بحسب اللهجة، وإضافة الوقفات بأمان، وضبط التشكيل (علامات الإعراب) للفصحى، وتوليد مئات المقاطع الصوتية دفعة واحدة، وتحويل المقالات الطويلة إلى ملف صوتي واحد، وبث الصوت المباشر لوكلاء الصوت في الوقت الفعلي.
تعتمد هذه الأمثلة على واجهة برمجة تطبيقات (API) تحويل النص إلى كلام باللغة العربية من Munsit ومكتبة requests الشائعة. تُبنى كل خطوة على ما قبلها، ويمكن قراءة الدليل كاملاً في جلسة واحدة. إذا أردت تكوين رؤية أشمل أولاً، بما في ذلك متى تختار الـ API بدلاً من أدوات الاستوديو، فاقرأ دليل مطوري واجهات برمجة تطبيقات تحويل النص إلى كلام باللغة العربية.
ما تحتاجه قبل البدء
- Python 3.9 أو إصدار أحدث.
- مكتبة requests.
- مفتاح API من لوحة تحكم Munsit. تحصل الحسابات الجديدة على رصيد مجاني، مما يتيح لك الاختبار دون الحاجة إلى بطاقة بنكية. يمكنك الاطلاع على الخطط في صفحة أسعار Munsit.
قم بتثبيت requests واحفظ مفتاحك في متغير بيئي لضمان عدم ظهوره في شيفرتك البرمجية أو في سجل Git:
pip install requests
# macOS or Linux
export MUNSIT_API_KEY="your_key_here"
# Windows PowerShell
$env:MUNSIT_API_KEY="your_key_here"
الخطوة 1: أول طلب لتحويل النص إلى كلام بالعربية في Python
تستقبل نقطة نهاية التوليد الصوتي (synthesis) معرّف النموذج في عنوان URL مع نص JSON بسيط. توجد ثلاثة حقول إلزامية: معرّف الصوت (voice ID)، والنص العربي، وقيمة الاستقرار (stability) بين 0 و1. وتكون الاستجابة عبارة عن ملف WAV كامل، وما عليك سوى حفظ البايتات الناتجة.
step1_first_call.py
import os
import requests
API_KEY = os.environ["MUNSIT_API_KEY"]
BASE_URL = os.environ.get("MUNSIT_BASE_URL", "https://api.munsit.com/api/v1")
MODEL_ID = "faseeh-v1-preview"
payload = {
"voice_id": "YOUR_VOICE_ID", # copy one from the voices list (Step 2)
"text": "مرحبا بك في منصت", # "Welcome to Munsit"
"stability": 0.5, # required, 0.0 to 1.0
"speed": 1.0, # optional, 0.7 to 1.2
"sample_rate": 24000, # optional, 8000 to 48000 Hz
}
response = requests.post(
f"{BASE_URL}/text-to-speech/{MODEL_ID}",
headers={"x-api-key": API_KEY, "Content-Type": "application/json"},
json=payload,
timeout=60,
)
response.raise_for_status()
with open("speech.wav", "wb") as f:
f.write(response.content)
print("Saved speech.wav,", len(response.content), "bytes")

إليك بعض الملاحظات حول الإعدادات الاختيارية، المستندة بالكامل إلى توثيق synthesize:
- تتراوح السرعة (Speed) بين 0.7 (أبطأ) و1.2 (أسرع)، والقيمة الافتراضية هي 1.0.
- يتراوح معدل العينات (Sample rate) بين 8000 و48000 هرتز. القيمة الافتراضية هي 24000؛ ويوصى بـ 48000 للتطبيقات في الوقت الفعلي واستخدامات WebRTC لتجنب الحاجة إلى إعادة أخذ العينات.
- اللهجة (Dialect) هي تلميح اختياري بثلاث قيم: auto وemirati وfusha. بالنسبة للهجات الأخرى، مثل النجدية أو الحجازية، تنبثق اللهجة من الصوت الذي تختاره.
- تعتمد التكلفة على عدد الأحرف، لذا فإن إزالة النصوص غير الضرورية توفر من رصيدك.
الخطوة 2: اختيار الصوت العربي المناسب بحسب اللهجة
معرّفات الأصوات هي سلاسل نصية مبهمة (opaque strings)، لذا يفضل البحث عنها في النظام بدلاً من تخمينها. تقبل نقطة نهاية الأصوات (voices endpoint) فلترة بحسب اللهجة وبحسب الوسوم، مثل المحتوى السردي (narration) أو الحواري (conversational):
step2_list_voices.py
import os
import requests
API_KEY = os.environ["MUNSIT_API_KEY"]
BASE_URL = os.environ.get("MUNSIT_BASE_URL", "https://api.munsit.com/api/v1")
def list_voices(dialect=None, tags=None):
params = {}
if dialect:
params["dialect"] = dialect # for example "najdi", "emirati", "fusha"
if tags:
params["tags"] = tags # for example "narration" or "conversational"
r = requests.get(f"{BASE_URL}/voices", headers={"x-api-key": API_KEY},
params=params, timeout=30)
r.raise_for_status()
data = r.json()
# Accept either a plain list or a list wrapped in an object
if isinstance(data, dict):
data = data.get("data") or data.get("voices") or data.get("items") or []
return data
for v in list_voices(dialect="najdi"):
print(v.get("voice_id") or v.get("id"), "|", v.get("name"), "|",
v.get("dialect"), "|", v.get("gender"))هناك تفصيلان مهمان تجدر معرفتهما. أولاً، تؤدي الفلترة باستخدام saudi إلى إرجاع أصوات نجدية وحجازية وجنوبية سعودية أيضاً، لذا استخدم najdi أو hijazi عندما تحتاج إلى نبرة منطقة معينة بدقة. ثانياً، تميل قائمة الأصوات المميزة حالياً نحو الأصوات النجدية، مع خيارات أقل للهجتين الحجازية والإماراتية، لذا تحقق مما يتيحه حسابك قبل التخطيط لمشروع كبير. يمكنك أيضاً الاستماع المسبق للأصوات في استوديو تحويل النص إلى كلام من Munsit.
تتعامل الشيفرة البرمجية أعلاه مع الاستجابة سواء جاءت كقائمة بسيطة أو كقائمة مغلّفة داخل كائن، مما يضمن استمرار عملها حتى في حال تغير تنسيق الاستجابة.
الخطوة 3: دالة مساعدة قابلة لإعادة الاستخدام مع إعادة المحاولة وفحص الوقفات
عندما تنتقل إلى ما هو أبعد من مجرد إرسال طلب تجريبي واحد، احرص على تغليف الـ API في دالة مساعدة بسيطة. تؤدي هذه الدالة ثلاث مهام مفيدة: إعادة المحاولة تلقائياً عند انشغال الخدمة، وإرجاع خطأ واضح يتضمن رسالة الخادم عند وجود خلل في الطلب، وفحص وسوم الوقفات قبل إرسالها.
munsit_tts.py
"""A small, reusable helper for Munsit Arabic text to speech."""
import os
import re
import time
import requests
API_KEY = os.environ["MUNSIT_API_KEY"]
BASE_URL = os.environ.get("MUNSIT_BASE_URL", "https://api.munsit.com/api/v1")
MODEL_ID = "faseeh-v1-preview"
HEADERS = {"x-api-key": API_KEY, "Content-Type": "application/json"}
BREAK_TAG = re.compile(r'<break\s+time="([^"]*)"\s*/>')
VALID_TIME = re.compile(r"^(\d+(\.\d+)?)(ms|s)$")
def check_pauses(text):
"""Warn about pause tags the API would silently ignore or clamp."""
problems = []
tags = BREAK_TAG.findall(text)
total = 0.0
for value in tags:
m = VALID_TIME.match(value)
if not m:
problems.append(f'"{value}" has no unit (s or ms) and will be ignored')
continue
seconds = float(m.group(1)) / (1000 if m.group(3) == "ms" else 1)
if seconds > 3:
problems.append(f'"{value}" is longer than 3s and will be clamped to 3s')
total += min(seconds, 3)
if len(tags) > 20:
problems.append(f"{len(tags)} pause tags; over 20 may be dropped")
if total > 30:
problems.append(f"{total:.1f}s of pauses; about 30s is the maximum")
return problems
def synthesize(text, voice_id, stability=0.5, speed=1.0, sample_rate=24000,
dialect=None, retries=3):
"""Return WAV bytes, retrying on rate limits and server errors."""
for warning in check_pauses(text):
print("Pause tag warning:", warning)
payload = {"voice_id": voice_id, "text": text, "stability": stability,
"speed": speed, "sample_rate": sample_rate}
if dialect:
payload["dialect"] = dialect # "auto", "emirati" or "fusha"
for attempt in range(retries + 1):
r = requests.post(f"{BASE_URL}/text-to-speech/{MODEL_ID}",
headers=HEADERS, json=payload, timeout=60)
if r.status_code == 200:
return r.content
if r.status_code in (429, 500, 502, 503, 504) and attempt < retries:
wait = 2 ** attempt
print(f"Got {r.status_code}, retrying in {wait}s")
time.sleep(wait)
continue
raise RuntimeError(f"Synthesis failed ({r.status_code}): {r.text[:300]}")
def diacritize(text):
"""Add tashkeel (vowel marks) to formal Arabic text."""
r = requests.post(f"{BASE_URL}/tashkil/diacritize", headers=HEADERS,
json={"text": text}, timeout=60)
r.raise_for_status()
return r.json()["diacritized_text"]
لماذا نفحص وسوم الوقفات برمجياً؟ لأن الـ API يطبق قواعد الوقفات بصمت. فالوسم مثل <break time="1"/> لا يحتوي على وحدة زمنية، وبالتالي لا ينتج عنه أي وقف ولا يعطي خطأً. كما يتم تقليص أي وقفة تزيد عن 3 ثوانٍ إلى 3 ثوانٍ فقط، وقد يتم تقليص أو تجاهل ما زاد عن 20 وسماً أو ما يقارب 30 ثانية من إجمالي الوقفات في الطلب الواحد. اكتشاف هذه الحالات قبل توليد الصوت يوفر عليك استهلاك الرصيد وعناء الاستماع غير المجدي.

تنتظر حلقة إعادة المحاولة لمدة ثانية واحدة، ثم ثانيتين، ثم 4 ثوانٍ قبل التوقف. وعادة ما تعيد قيود معدل الطلبات (rate limiting) رمز الحالة HTTP 429، ويعد التراجع الأسي القصير (exponential backoff) هو الأسلوب القياسي للتعامل معها. راجع صفحة حدود الاستخدام في التوثيق لمعرفة الحدود المطبقة على خطتك.
الخطوة 4: ضبط التشكيل قبل توليد الفصحى صوتياً
غالباً ما تُكتب اللغة العربية دون حركات، مما يترك بعض الكلمات مبهمة أو ملتبسة على أي محرك صوتي. تتيح لك نقطة نهاية التشكيل إضافة علامات الإعراب وتُرجع النص الأصلي والنص المشكول معاً، حتى تتمكن من المقارنة بينهما قبل توليد الصوت:
step4_tashkil.py
from munsit_tts import diacritize, synthesize
formal = "يسرنا ان نرحب بكم في المعرض الدولي للكتاب"
marked = diacritize(formal)
print(marked)
audio = synthesize(marked, voice_id="YOUR_FUSHA_VOICE_ID", dialect="fusha")
with open("welcome_fusha.wav", "wb") as f:
f.write(audio)
استخدم هذه الميزة للنصوص المكتوبة بالفصحى، مثل الإعلانات، والمحتوى التعليمي، والنصوص الرسمية، حيث تقدم أفضل النتائج. ويشير التوثيق إلى أن النصوص العامية أو غير الرسمية أو التي تحتوي على أخطاء قد تتطلب مراجعة بعد التشكيل الآلي، لذا يُفضل تصحيح الكلمات الفردية يدوياً في حال كانت النصوص باللهجة النجدية أو الإماراتية.
الخطوة 5: توليد مئات المقاطع الصوتية العربية مجمعة
غالباً ما تتطلب مقاطع الفيديو الترويجية للمنتجات، وقوائم الرد الصوتي التفاعلي (IVR)، والوحدات التعليمية مئات المقاطع القصيرة. احفظ النصوص في ملف CSV يحتوي على عمود لمعرّف المقطع (id) وعمود للنص (text)، ثم قم بتوليدها باستخدام مجمع خيوط معالجة (thread pool) صغير:
step5_batch.py
import csv
from concurrent.futures import ThreadPoolExecutor
from pathlib import Path
from munsit_tts import synthesize
VOICE_ID = "YOUR_VOICE_ID"
OUT = Path("audio")
OUT.mkdir(exist_ok=True)
def render(row):
target = OUT / f"{row['id']}.wav"
if target.exists(): # skip files already made
return f"{row['id']}: skipped"
target.write_bytes(synthesize(row["text"], voice_id=VOICE_ID))
return f"{row['id']}: done"
with open("scripts.csv", encoding="utf-8") as f:
rows = list(csv.DictReader(f)) # columns: id,text
# Keep concurrency low and check the rate limits page for your plan
with ThreadPoolExecutor(max_workers=3) as pool:
for result in pool.map(render, rows):
print(result)

يتخطى السكربت أي مقطع موجود مسبقاً، لذا إذا توقف في منتصف العملية يمكنك ببساطة إعادة تشغيله. ويُعد تحديد 3 عمّال (workers) خياراً افتراضياً حذراً ومدروساً لـ ThreadPoolExecutor في Python؛ ولا ترفع هذا العدد إلا بعد التحقق من حدود معدل الطلبات في خطتك.
الخطوة 6: تحويل مقال عربي طويل إلى ملف صوتي واحد
لا تحدد وثائق synthesize حداً أقصى لطول النص، كما يصعب إعادة إرسال الطلبات الطويلة عند حدوث أي خطأ. النمط الأكثر أماناً هو تقسيم النص الطويل عند نهايات الجمل، بما في ذلك علامة الاستفهام العربية (؟) والفاصلة المنقوطة (؛)، ثم توليد كل جزء على حدة ودمج ملفات WAV باستخدام وحدة wave المدمجة في Python:
step6_long_text.py
import io
import re
import wave
from munsit_tts import synthesize
SENTENCE_END = re.compile(r"(?<=[.!؟?؛])\s+")
def split_text(text, max_chars=800):
"""Split on Arabic and Latin sentence endings, keeping chunks under max_chars."""
chunks, current = [], ""
for sentence in SENTENCE_END.split(text.strip()):
if current and len(current) + len(sentence) + 1 > max_chars:
chunks.append(current)
current = sentence
else:
current = f"{current} {sentence}".strip()
if current:
chunks.append(current)
return chunks
def join_wavs(wav_list, path):
"""Concatenate WAV files that share the same format into one file."""
with wave.open(path, "wb") as out:
for i, data in enumerate(wav_list):
with wave.open(io.BytesIO(data), "rb") as w:
if i == 0:
out.setparams(w.getparams())
out.writeframes(w.readframes(w.getnframes()))
article = open("article.txt", encoding="utf-8").read()
parts = [synthesize(chunk, voice_id="YOUR_VOICE_ID") for chunk in split_text(article)]
join_wavs(parts, "article.wav")
print(f"Joined {len(parts)} parts into article.wav")
تنجح عملية الدمج لأن كل جزء يُعاد بالتنسيق نفسه. وإذا قمت بتغيير معدل العينات أو الصوت بين الأجزاء، فلن تتطابق التنسيقات بعد ذلك، لذا احرص على إبقاء هذه الإعدادات ثابتة للمقال بأكمله.
الخطوة 7: بث الصوت العربي للوكلاء الصوتيين
بالنسبة للوكيل الصوتي أو نظام الاستجابة الصوتية التفاعلية (IVR)، فإن انتظار اكتمال المقطع بأكمله قبل تشغيله يضيف تأخيراً ملحوظاً. اضبط streaming على true وسيعيد API صوتاً بتنسيق 16 bit PCM على شكل أجزاء متدفقة أثناء توليده. ومع مكتبة requests، استخدم الاستجابات المتدفقة لقراءة الأجزاء فور وصولها:
step7_streaming.py
import os
import time
import wave
import requests
API_KEY = os.environ["MUNSIT_API_KEY"]
BASE_URL = os.environ.get("MUNSIT_BASE_URL", "https://api.munsit.com/api/v1")
SAMPLE_RATE = 48000 # 48 kHz is recommended for real time use
payload = {
"voice_id": "YOUR_VOICE_ID",
"text": "أهلا، كيف أقدر أساعدك اليوم؟",
"stability": 0.5,
"streaming": True, # returns PCM16 chunks as they are generated
"sample_rate": SAMPLE_RATE,
}
start = time.perf_counter()
first_chunk_at = None
with requests.post(f"{BASE_URL}/text-to-speech/faseeh-v1-preview",
headers={"x-api-key": API_KEY}, json=payload,
stream=True, timeout=60) as r:
r.raise_for_status()
# Assumes mono 16 bit PCM: confirm channel count in the streaming docs
with wave.open("stream.wav", "wb") as out:
out.setnchannels(1)
out.setsampwidth(2)
out.setframerate(SAMPLE_RATE)
for chunk in r.iter_content(chunk_size=4096):
if not chunk:
continue
if first_chunk_at is None:
first_chunk_at = time.perf_counter() - start
out.writeframes(chunk) # or send chunk straight to a player
print(f"First audio after {first_chunk_at * 1000:.0f} ms; saved stream.wav")
ملاحظتان عمليتان: يقيس هذا المثال الوقت الذي يستغرقه وصول الجزء الأول، وهو الرقم الأهم للمتصل؛ فقِسه من خوادمك الخاصة بدلاً من الاعتماد على الأرقام المنشورة. كما يفترض أيضاً صوتاً أحادي القناة (mono) عند تغليف الأجزاء في ملف WAV، لذا تحقق من التنسيق في وثائق مخرجات البث قبل الاعتماد عليه. ولإنشاء وكلاء صوتيين متكاملين، توفر Munsit وثائق لإضافات وأدلة لكل من LiveKit وPipecat وVapi وUltravox، والتي تتولى إدارة البث بالنيابة عنك.
كتابة نص عربي يُقرأ بسلاسة عبر الكود
- اكتب بلهجة الصوت نفسه. فالصوت النجدي الذي يقرأ الفصحى سيظل يبدو فصيحاً. استخدم كلمات مثل 'وش' و'الحين' في النصوص النجدية.
- اكتب الأرقام الرئيسية ككلمات. فالأسعار وأرقام الهواتف والتواريخ هي أكثر ما تتعثر فيه الأصوات عادةً.
- اختبر الأسماء الإنجليزية بالصيغتين. جرّب أسماء العلامات التجارية بالأحرف اللاتينية وبالأحرف العربية، واعتمد الصيغة التي تبدو صحيحة في النطق.
- حافظ على نظافة النص. احذف وسوم HTML والرموز التعبيرية ورموز التتبع قبل إرسال النص من أنظمة إدارة المحتوى أو قواعد البيانات.
- احفظ النصوص البرمجية بترميز UTF 8. افتح الملفات بتحديد ترميز UTF 8 صراحةً، كما في الأمثلة، لتجنب تشوه الأحرف العربية.
استكشاف أخطاء تحويل النص إلى كلام باللغة العربية وإصلاحها في Python
| ما يظهر لك | السبب المحتمل | الحل |
|---|---|---|
| HTTP 401 | مفتاح API مفقود أو غير صحيح | تحقق من تعيين متغير البيئة في نافذة الطرفية نفسها |
| HTTP 400 | حقل مطلوب مفقود أو خارج النطاق المسموح، وغالباً ما يكون stability | أرسل voice_id وtext مع تحديد stability بقيمة بين 0 و1 |
| HTTP 413 من التشكيل | حجم جسم الطلب كبير جداً | قسّم النص وشكّله على أجزاء |
| HTTP 429 | عدد كبير جداً من الطلبات في الوقت نفسه | أعد المحاولة مع تراجع تدريجي وتقليل عدد العمّال (workers) |
| غياب الوقف المؤقت في المكان المتوقع | وسم وقف بدون وحدة قياس | استخدم 500ms أو 1s، وتحقق من صحة وسم الوقف |
| تشغيل الصوت كضجيج | تشغيل صوت PCM الخام كما لو كان ملف WAV | غلّف الأجزاء المتدفقة باستخدام وحدة wave، كما في الخطوة 7 |
| فشل حفظ المقال المدمج | توليد الأجزاء بإعدادات مختلفة | احتفظ بالصوت ومعدل العينات نفسهما لكل جزء |
| الأحرف العربية تظهر مشوهة في الملفات | ترميز نصي غير صحيح | اقرأ الملفات واكتبها بترميز UTF 8 |
كيف اختبرنا هذا الكود
تم تشغيل كل مقتطف برمجي في هذا الدليل التوجيهي بالكامل مقابل خادم محاكاة محلي يتبع تنسيقات الطلب والاستجابة الموثقة: الحقول المطلوبة، ومخرجات WAV وPCM المتدفقة، وفلتر الأصوات، واستجابة التشكيل. وقد أكد ذلك أن الكود يعمل، ويعيد المحاولة عند مواجهة الخطأ 429، ويبلغ بوضوح عن الخطأ 400، ويتخطى ملفات الدُفعات الموجودة، ويدمج النصوص الطويلة بنجاح. ومع ذلك، فإن هذا لا يغني عن الاختبار المباشر لـ API بمفتاحك الخاص، لذا نفّذ الخطوة 1 أولاً قبل المتابعة. تم التحقق من تفاصيل API وفقاً لوثائق Munsit العامة في أكتوبر 2026.
إخلاء المسؤولية
- تستند نقاط نهاية API والمعاملات والحدود الواردة في هذا الدليل التوجيهي إلى وثائق Munsit العامة التي تمت مراجعتها في أكتوبر 2026، وقد تتغير لاحقاً. يُرجى مراجعة الوثائق المحدثة قبل النشر في بيئة الإنتاج.
- تم اختبار الكود مقابل محاكاة محلية لـ API الموثق وليس على الخدمة المباشرة. يُرجى إجراء الاختبار بمفتاح API الخاص بك قبل الاعتماد عليه.
- يفترض مثال البث صوتاً أحادي القناة (mono) بدقة 16 bit عند كتابة ملف WAV. تأكد من التنسيق في وثائق البث.
- يُقدَّم هذا الكود بحالته الراهنة لأغراض تعليمية. يُرجى مراجعته بما يناسب متطلبات الأمان ومعالجة الأخطاء والامتثال الخاصة بك.
- لا تقم باستنساخ الأصوات أو تقليدها إلا بموافقة خطية من المتحدث، والتزم بقوانين حماية البيانات المعمول بها لديك.
- تعود ملكية أسماء المنتجات والمكتبات لأصحابها المعنيين. ولا ينطوي ذكرها على أي شراكة أو تأييد.
الأسئلة الشائعة
هل يمكنني تحويل النص إلى كلام باللغة العربية في Python مجاناً؟
يمكنك الاختبار مجاناً عبر الرصيد الذي تقدمه Munsit للحسابات الجديدة، كما يمكن تشغيل النماذج العربية مفتوحة المصدر في Python. تأكد من التراخيص ومستوى الجودة قبل استخدام أي صوت لأغراض تجارية.
ما المكتبة التي يُنصح باستخدامها في Python لتحويل النص إلى كلام باللغة العربية؟
بالنسبة لـ API المستضاف، فإن مكتبة requests هي كل ما تحتاج إليه. أما للوكلاء الصوتيين، فاستخدم إضافات أطر العمل المخصصة لـ LiveKit أو Pipecat بدلاً من كتابة كود البث بنفسك.
كيف أختار لهجة عربية في Python؟
اختر صوتاً يتحدث اللهجة المطلوبة عبر استخدام فلتر اللهجات في نقطة النهاية voices. كما يقبل مؤشر اللهجة الاختياري عند توليد الصوت كلاً من auto وemirati وfusha.
ما تنسيق الصوت الذي يعيده API؟
ملف WAV كامل افتراضياً، أو أجزاء متدفقة بتنسيق 16 bit PCM عند تفعيل ميزة البث.
كيف أضيف وقفات مؤقتة في تحويل النص إلى كلام باللغة العربية؟
أدرج وسم break مصحوباً بوحدة قياس، مثل 500ms أو 1s. يبلغ الحد الأقصى لكل وقفة 3 ثوانٍ، وتُتجاهل الوسوم التي لا تحتوي على وحدة قياس.
هل يمكنني استنساخ صوت باستخدام Python؟
نعم. تقبل نقطة نهاية استنساخ الصوت الملفات الصوتية وتعيد معرّف صوت جديداً يمكن استخدامه في طلب التوليد نفسه. احرص على عدم استنساخ أي صوت إلا بعد الحصول على إذن خطي بذلك.


