يتوفر Fish Audio S2 Pro على Novita AI كواجهة برمجة تطبيقات TTS مستضافة بدون بدء تشغيل بارد. يغطي هذا الدليل السريع مسار المطور: احصل على مفتاح API الخاص بك، وأكد نقطة النهاية، وأرسل طلب TTS الأول الخاص بك بصوت مستنسخ، وافهم المعلمات المهمة لاستنساخ الصوت والتحكم في المشاعر. تم بناء S2 Pro على بنية ثنائية الانحدار الذاتي (Dual-Autoregressive architecture) تم تدريبها على مجموعة كبيرة متعددة اللغات — الميزة التي تميزه عن TTS العام هي أن كل صوت تستنسخه يعمل عبر جميع اللغات المدعومة دون إعادة تدريب.
متى تستخدم هذا الدليل السريع
استخدم هذا الدليل إذا كنت بحاجة إلى:
- توليف الكلام من النص عبر مجموعة واسعة من اللغات المدعومة باستخدام صوت مستنسخ مخصص.
- استنساخ صوت من عينة صوتية مدتها 10–30 ثانية وإعادة استخدامه عبر الطلبات دون تكلفة إضافية لكل طلب.
- التحكم في التنغيم والعواطف داخل السطر باستخدام علامات القوسين بلغة طبيعية (
[whisper]،[excited]). - بناء خطوط أنابيب تحتاج إلى TTS متعدد اللغات دون تكامل منفصل لكل لغة.
إذا كنت تحتاج فقط إلى TTS باللغة الإنجليزية الأساسية بأصوات مدمجة وبدون استنساخ، فقم بتقييم نموذج Fish Audio S1 أو GLM TTS أولاً — تظهر ميزة S2 Pro عندما تحتاج إلى استنساخ عبر اللغات أو تحكم دقيق في المشاعر.
الخطوة 1: الحصول على مفتاح Novita API الخاص بك
أنشئ حسابًا في Novita AI وقم بإنشاء مفتاح API من لوحة تحكم Novita AI. قم بتخزينه كمتغير بيئة:
export NOVITA_API_KEY="your_api_key_here"
احتفظ بالمفتاح بعيدًا عن كود جانب العميل وحزم الواجهة الأمامية والمستودعات العامة.
الخطوة 2: تأكيد النموذج ونقطة النهاية
توجد وثائق Novita AI لـ Fish Audio S2 Pro TTS في مرجع API Fish Audio S2 Pro. تحقق من مسار نقطة النهاية الحالية ومعرف النموذج هناك قبل البرمجة — يتم تأكيد عنوان URL لنقطة النهاية المستضافة ومخطط الطلب في هذا المرجع.
لاستنساخ الصوت، يتم استخدام ثلاث نقاط نهاية Novita عبر سير العمل:
| الخطوة | الطريقة | نقطة النهاية |
|---|---|---|
| تحميل عينة الصوت | POST |
https://api.novita.ai/v1/files |
| إنشاء الاستنساخ (غير متزامن) | POST |
https://api.novita.ai/v1/async/voice-cloning |
| الاستعلام عن النتيجة | GET |
https://api.novita.ai/v1/async/task-result |
| TTS بصوت مستنسخ | POST |
https://api.novita.ai/v4beta/txt2speech |
يستخدم استنساخ الصوت نموذج fish-audio-voice-cloning لخطوة إنشاء الاستنساخ، بشكل منفصل عن نموذج TTS.
الخطوة 3: استنساخ صوت
يتطلب استنساخ الصوت ثلاث استدعاءات API: تحميل عينة صوتية قصيرة، إنشاء الاستنساخ، ثم استرداد voice_id. بمجرد حصولك على voice_id، يمكنك إعادة استخدامه في طلبات TTS إلى أجل غير مسمى دون تكلفة إضافية.
متطلبات العينة الصوتية:
- المدة: 10–30 ثانية تعطي أفضل النتائج
- التنسيق: MP3 أو WAV
- المحتوى: كلام نظيف مع الحد الأدنى من الضوضاء الخلفية
- النص: تقديم النص المنطوق الدقيق يحسن دقة الاستنساخ
Python: سير عمل الاستنساخ الكامل
import base64
import os
import time
import requests
API_KEY = os.environ["NOVITA_API_KEY"]
BASE_URL = "https://api.novita.ai"
# الخطوة 1: تحميل الملف الصوتي
with open("voice_sample.mp3", "rb") as f:
encoded_audio = base64.b64encode(f.read()).decode("utf-8")
upload_response = requests.post(
f"{BASE_URL}/v1/files",
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
},
json={
"file": encoded_audio,
"purpose": "voice-cloning",
},
)
upload_response.raise_for_status()
file_id = upload_response.json()["file_id"]
print(f"معرف الملف الذي تم تحميله: {file_id}")
# الخطوة 2: إنشاء استنساخ الصوت
clone_response = requests.post(
f"{BASE_URL}/v1/async/voice-cloning",
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
},
json={
"model": "fish-audio-voice-cloning",
"audio_file_id": file_id,
"text": "النص المنطوق في العينة الصوتية هنا.",
},
)
clone_response.raise_for_status()
task_id = clone_response.json()["task_id"]
print(f"معرف مهمة الاستنساخ: {task_id}")
# الخطوة 3: الاستعلام عن voice_id
voice_id = None
while True:
result = requests.get(
f"{BASE_URL}/v1/async/task-result",
headers={"Authorization": f"Bearer {API_KEY}"},
params={"task_id": task_id},
).json()
if result["status"].endswith("SUCCEED"):
voice_id = result["result"]["voice_id"]
print(f"معرف الصوت المستنسخ: {voice_id}")
break
elif "FAILED" in result["status"]:
raise RuntimeError(f"فشل الاستنساخ: {result}")
time.sleep(2)
احفظ voice_id. ستستخدمه كـ reference_id في كل استدعاء TTS.
cURL: إنشاء الاستنساخ (بعد تحميل الملف)
curl -s -X POST https://api.novita.ai/v1/async/voice-cloning \
-H "Authorization: Bearer $NOVITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "fish-audio-voice-cloning",
"audio_file_id": "YOUR_FILE_ID",
"text": "النص المنطوق في العينة الصوتية هنا."
}'
الخطوة 4: إرسال طلب TTS
بمجرد حصولك على voice_id من الخطوة 3، قم بتمريره كـ reference_id في طلب TTS. يقوم النموذج بتوليد الكلام بالصوت المستنسخ.
Python
import os
import requests
API_KEY = os.environ["NOVITA_API_KEY"]
VOICE_ID = "your_cloned_voice_id" # من الخطوة 3
response = requests.post(
"https://api.novita.ai/v4beta/txt2speech",
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
},
json={
"text": "مرحبًا بك في العرض التوضيحي. تم استنساخ هذا الصوت من عينة صوتية قصيرة.",
"reference_id": VOICE_ID,
"format": "mp3",
"sample_rate": 44100,
},
)
response.raise_for_status()
audio_url = response.json()["audio_url"]
print(f"رابط الصوت: {audio_url}")
cURL
curl -s -X POST https://api.novita.ai/v4beta/txt2speech \
-H "Authorization: Bearer $NOVITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "مرحبًا بك في العرض التوضيحي. تم استنساخ هذا الصوت من عينة صوتية قصيرة.",
"reference_id": "YOUR_CLONED_VOICE_ID",
"format": "mp3",
"sample_rate": 44100
}'
`
يحتوي الرد على `audio_url` — رابط موقّع مسبقًا يشير إلى الملف الصوتي الذي تم إنشاؤه.
## الخطوة 5: التحقق من الأسعار والحدود والأخطاء الشائعة
**الأسعار** (تحقق من الأسعار الحالية على [novita.ai/pricing](https://novita.ai/pricing)):
| العملية | السعر |
|---|---|
| توليد TTS | ~15.00 دولار / 1 مليون حرف |
| استنساخ الصوت | 0.10 دولار لكل صوت (لمرة واحدة) |
يتم فرض رسوم على استنساخ الصوت مرة واحدة لكل استنساخ، وليس لكل طلب TTS. بمجرد الاستنساخ، فإن استخدام `voice_id` في استدعاءات TTS يكلف فقط سعر TTS القائم على الأحرف.
**حدود كل طلب:**
| الحد | القيمة |
|---|---|
| الحد الأقصى لطول الإدخال | 10,000 حرف |
| العينة الموصى بها للاستنساخ | 10–30 ثانية |
| تنسيقات الإخراج المدعومة | `mp3`, `opus`, `wav`, `pcm` |
| معدل عينة الصوت | حتى 44,100 هرتز |
**الأخطاء الشائعة:**
| الخطأ | السبب | الإصلاح |
|---|---|---|
| `401 غير مصرح` | مفتاح API غير صالح أو مفقود | تحقق من تعيين `NOVITA_API_KEY` بشكل صحيح |
| `400 طلب سيء` عند تحميل الملف | الملف الصوتي كبير جدًا أو تنسيق خاطئ | استخدم MP3/WAV، واحتفظ به تحت بضعة ميغابايت |
| حالة مهمة الاستنساخ `FAILED` | العينة الصوتية قصيرة جدًا أو بها ضوضاء | استخدم 10–30 ثانية من الكلام النظيف |
| صوت فارغ أو مشوش | حقل `text` فارغ أو تجاوز الحد | احتفظ بالإدخال أقل من 10,000 حرف |
## علامات التحكم في المشاعر
يدعم S2 Pro علامات `[قوسين]` داخل السطر تتحكم في كيفية عرض النموذج لكلمات أو عبارات معينة. يتم تفسيرها كتعليمات بلغة طبيعية أثناء التوليد — لست مقيدًا بقائمة ثابتة من الرموز.
```python
text_with_emotion = (
"[cheerful] مرحبًا بعودتك! [pause] "
"أنا سعيد جدًا بوجودك هنا. "
"[whisper] بيننا فقط، هذا الجزء سر. [normal] "
"على أي حال، لنبدأ."
)
response = requests.post(
"https://api.novita.ai/v4beta/txt2speech",
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
},
json={
"text": text_with_emotion,
"reference_id": VOICE_ID,
"format": "mp3",
"sample_rate": 44100,
},
)
أمثلة على علامات القوسين التي يفهمها النموذج:
| العلامة | التأثير |
|---|---|
[whisper] |
إلقاء هامس |
[excited] |
طاقة أعلى، سرعة أسرع |
[calm] |
نبرة هادئة ومقيسة |
[laughs] |
ضحك مضمن في الكلام |
[professional broadcast tone] |
أسلوب إلقاء مذيع الأخبار |
[pitch up] |
رفع درجة الصوت للنص التالي |
[pause] |
وقفة قصيرة |
العلامات عبارة عن أوصاف حرة، وليست قيم تعداد ثابتة. تعلم النموذج تعيينات العلامات إلى الخصائص الصوتية من بيانات التدريب، لذا تعمل العبارات الوصفية أيضًا. جرب علامات محددة لحالة الاستخدام الخاصة بك؛ قد تختلف النتائج مع العبارات غير المعتادة.
المعلمات الرئيسية
| المعلمة | النوع | ملاحظات |
|---|---|---|
text |
سلسلة نصية | مطلوب. يصل إلى 10,000 حرف. |
reference_id |
سلسلة نصية | مطلوب. معرف نموذج الصوت — voice_id المستنسخ أو مرجع صوت النظام. |
format |
سلسلة نصية | تنسيق الإخراج: mp3، opus، wav، pcm. الافتراضي: mp3. |
sample_rate |
عدد صحيح | معدل عينة الصوت بالهرتز. يُوصى بـ 44100 للجودة العالية. |
temperature |
رقم | يتحكم في عشوائية التوليد. القيم الأعلى = تنغيم أكثر تنوعًا. |
top_p |
رقم | عتبة أخذ العينات النووية. |
للحصول على مخطط المعلمات الكامل وأي خيارات إضافية خاصة بـ S2 Pro، راجع مرجع API Novita AI Fish Audio S2 Pro.
استكشاف الأخطاء وإصلاحها
الصوت المستنسخ يبدو آليًا أو غير متسق.
من المحتمل أن تكون العينة قصيرة جدًا أو بها ضوضاء خلفية. سجل مقطعًا نظيفًا لمدة 20–30 ثانية بوتيرة ثابتة وبدون تداخل. يساعد تقديم النص الدقيق text للعينة في طلب الاستنساخ على تحسين محاذاة الصوتيات.
رابط الصوت يعيد 404 بعد الاستعلام. تنتهي صلاحية الروابط الموقعة مسبقًا. قم بتنزيل الصوت أو معالجته فورًا بعد استلام الرابط.
علامات المشاعر لا تنتج التأثير المتوقع.
يعتمد سلوك العلامات على توزيعات بيانات التدريب. جرب عبارات أكثر وصفًا — على سبيل المثال، [very softly, barely audible] بدلاً من [quiet]. بعض العلامات ستعمل بشكل أفضل من غيرها؛ اختبر مع إدخالات قصيرة أولاً.
حالة مهمة الاستنساخ تظل معلقة.
أضف فاصل استعلام (1–2 ثانية بين الفحوصات) لتجنب تحديد معدل نقطة نهاية نتيجة المهمة. إذا ظلت المهمة معلقة لأكثر من دقيقتين، تحقق من خطوة تحميل الملف — ربما انتهت صلاحية file_id.
الحاجة لاستخدام نفس الصوت عبر اللغات.
مرر نفس voice_id مع نص بأي لغة مدعومة. يطبق S2 Pro جرس الصوت المستنسخ على اللغة الجديدة دون الحاجة إلى استنساخ منفصل. تحقق من مرجع API S2 Pro للحصول على القائمة الحالية للغات المدعومة.
الأسئلة الشائعة
ما الذي يميز S2 Pro عن Fish Audio S1؟ يستخدم S2 Pro بنية ثنائية الانحدار الذاتي أكبر تم تدريبها على مجموعة كبيرة متعددة اللغات. الاختلافات العملية: دعم لغوي أوسع، تحكم في المشاعر داخل السطر عبر علامات القوسين، وقدرة على توليف متعدد المتحدثين غير متوفرة في S1. راجع مرجع API S2 Pro للحصول على قائمة اللغات الحالية.
هل يمكنني استنساخ صوت مرة واحدة واستخدامه لجميع اللغات المدعومة؟
نعم. يمكن للصوت المستنسخ من عينة إنجليزية توليد الكلام باليابانية أو الإسبانية أو العربية أو أي لغة أخرى مدعومة باستخدام نفس voice_id. ينقل النموذج جرس الصوت عبر اللغات دون تدريب إضافي.
ما المدة التي يجب أن تكون عليها العينة الصوتية؟ 10–30 ثانية من الكلام النظيف والمتسق. يمكن أن تعمل العينات الأقصر ولكنها قد تنتج نتائج أقل استقرارًا. العينات التي تزيد عن 30 ثانية لا تحسن جودة الاستنساخ بشكل ملحوظ.
هل يتم فرض رسوم على استنساخ الصوت لكل طلب TTS؟
لا. رسوم استنساخ الصوت البالغة 0.10 دولار هي رسوم لمرة واحدة لكل استنساخ. بعد الإنشاء، يكلف استخدام voice_id في طلبات TTS فقط سعر TTS لكل حرف.
ماذا يحدث إذا حذفت reference_id؟
تحقق من مرجع API S2 Pro للسلوك الافتراضي الحالي — قد يستخدم النموذج صوتًا افتراضيًا أو يتطلب مرجعًا.
كيف أحصل على مفتاح API؟ سجل في novita.ai وأنشئ مفتاحًا من لوحة تحكم Novita AI.
