واجهة معايرة الطوابع الزمنية للكلمات
هذه ليست تعرّفاً صوتياً. النص يعتمد دائماً على كلماتك الأصلية كما أرسلتها؛ ونحن نضع كل حرف في اللحظة الصحيحة فقط — لذا لا تحدث أبداً حالة «أحرف سُمعت خطأً فانحرفت الكلمات».
وصف نقطة النهاية
تُحاذي الكلمات الموجودة مع الصوت وتعيد طوابع زمنية على مستوى السطر وعلى مستوى الحرف، لتسليط الضوء حرفاً بحرف بأسلوب الكاريوكي، والكلمات المتدحرجة، وتوليد الترجمات.
نقطة النهاية: POST /api/music/lyrics-align
المصادقة: راجع المصادقة؛ الترويسة هي Authorization: Bearer YOUR_API_KEY
الفوترة: لكل طلب (حالياً 0.1 يوان افتراضياً لكل طلب)؛ وإذا كانت أغنية من المنصة وقد حُدّد فصل الغناء، فتُحتسب مرة أخرى بسعر «فصل الغناء/الموسيقى المصاحبة» في المنصة. والمبلغ المخصوم فعلاً يتبع إعداد الأسعار في لوحة الإدارة.
الزمن المتوسط: 5–15 ثانية (حسب طول الصوت وما إذا كان فصل الغناء سيتم في اللحظة)
لماذا نحتاج المعايرة: طوابع زمنية من جهة التوليد ليست دقيقة دائماً
تعيد واجهة الكلمات ذات الطوابع الزمنية الطوابع الزمنية كلمةً كلمة من جهة التوليد مباشرةً، وهي غير دقيقة:
- التكرارات والهارموني الكثيف والراب والنوتات الطويلة تنحرف غالباً ككتلة أو تُزيح أحرفاً مفردة؛
- بعض الأغاني ينقصها مقطع في البداية (مثل مقدمة موسيقية صافية، حيث يبدأ أول جزء بعد الثانية عشرة)؛
- بعض الأسطر يصعب ربطها بمرتكز زمني واضح.
تعيد المعايرة بناء محاذاة الوقت على أساس الكلمات التي تقدّمها أنت: يُصحَّح الوقت فقط، ولا يُغيَّر النص أبداً — وهو مناسب للحالات التي يُهم فيها «هل ينطبق تماماً» (تسليط الضوء حرفاً بحرف كما في KTV، وترجمات لكل حرف، وتقييم الغناء معاً).
الطريقة الموصى بها (ثلاث خطوات، أفضل نتيجة)
- استخرج الغناء الصافي أولاً (فصل الغناء/الموسيقى المصاحبة) وحاذِ فقط مسار الغناء — فلا تزعجك الموسيقى ولا الهارموني. الأساس القياسي: في مقارنة سطراً بسطر بين «المزيج الكامل ومسار الغناء» للأغنية نفسها، اختلف 5 من 28 سطراً بأكثر من 0.25 ثانية (الأكبر 2.64 ثانية)؛ واختلف محرّكان مستقلان بمتوسط 0.239 ثانية على مسار الغناء و0.508 ثانية على المزيج الكامل — أي تناسق يقلّ للنصف تقريباً. لذا يُنصح بتشغيله لتسليط الضوء حرفاً بحرف (KTV/الترجمات). (وجاري إعادة قياس مقدار التحسّن بالمحرّك الجديد.)
- قدّم الكلمات كاملة: الأغنية كلها، سطراً سطراً، بمقابلة واحد لواحد مع الصوت. أي جملة أو مقطع ناقص يُزيح كل الأسطر التالية؛ ولا تُدرج في الكلمات طوابع مثل
[00:23.82](فتُتجاهل تلقائياً). - في أغاني المنصة يكفي تحديد
vocal_separate: trueلننجز «الفصل + المحاذاة» في خطوة واحدة.
ثلاث طرق للاستخدام
| الطريقة | ما ترسله | مصدر الكلمات | فصل الغناء |
|---|---|---|---|
| أغنية خارجية · رابط عام | audio_url + الكلمات |
أنت توفّرها | ❌ غير مدعوم |
| أغنية خارجية · رفع ملف محلي مباشرةً (أُضيف في 2026-10) | audio_object_key + الكلمات |
أنت توفّرها | ❌ غير مدعوم |
| أغنية من المنصة (مولّدة على هذا الموقع) | song_id |
نأخذها من سجل الأغنية | ✅ اختياري |
علاقة المعاملات (أكثر موضع يخطئ فيه الناس — اقرأه بعناية)
- إرسال
song_id→ مسار أغنية المنصة: لا ترسل معهlyricsأوaudio_urlأوaudio_object_key؛ - إرسال
audio_urlأوaudio_object_key→ مسار الأغنية الخارجية: واحد فقط من الاثنين، ولا ترسلsong_id؛ vocal_separateيعمل فقط مع أغاني المنصة، وإرساله مع أغنية خارجية يُرفض (الصوت ليس عندنا فلا يمكن فصله).
جديد: رفع ملف محلي مباشرةً (الصوت لا يمرّ عبر خوادمنا)
استخدمه عندما يكون الصوت على جهازك ولا تريد رفعه أولاً إلى مساحتك العامة. خطوتان:
POST /api/music/lyrics-align/upload-ticketمعfile_name/file_size/content_typeفتحصل علىput_url(رابط موقّع لا يحتوي بيانات اعتماد طويلة الأجل) وobject_key؛- أرسل الملف بـ
PUTإلىput_url، مع إرفاقcontent_typeالوارد في الاستجابة كما هو (فهو داخل التوقيع؛ تغيير حرف واحد يعني 403)؛ - عند إرسال طلب المحاذاة، أرسل
audio_object_keyبدلاً منaudio_url.
الاعتماد للاستخدام مرة واحدة: بعد انتهاء المحاذاة (نجاحاً أو فشلاً) يحذف الخادم هذا الكائن، وإعادة استخدام المفتاح نفسه تُرجع خطأ.
جديد: لم تعد الكلمات إلزامية
سابقاً كانت الأغنية الخارجية تتطلب كلمات. الآن يمكن عدم إرسالها: يجري الخادم تعرّفاً واحداً ويستخدم النص المتعرَّف عليه ككلمات.
ويجب قول الثمن بوضوح: يصبح النص تابعاً لنتيجة التعرّف، وقد تكون بعض الأحرف غير دقيقة. وتُوسم هذه الاستجابات بـ
lyrics_source: "asr" وconfidence: "low"، وفي warnings[] يظهر
{"code":"no_reference_lyrics"}.
لإنشاء تسليط الضوء حرفاً بحرف / KTV، احرص دائماً على تقديم الكلمات الأصلية.
معاملات الطلب
Headers
| المعامل | النوع | مطلوب | ملاحظات |
|---|---|---|---|
| Authorization | string | نعم | Bearer YOUR_API_KEY |
| Content-Type | string | نعم | application/json |
معاملات جسم الطلب
| المعامل | النوع | مطلوب | القيمة الافتراضية | ملاحظات |
|---|---|---|---|---|
| song_id | string | واحد من اثنين | - | معرّف أغنية المنصة |
| lyrics | string | لا | - | الكلمات الأصلية، بفصل الأسطر بـ \n. يمكن الآن عدم إرسالها |
| audio_url | string | واحد من اثنين للخارجية | - | عنوان الصوت؛ يجب أن يكون قابلاً للتنزيل علناً |
| audio_object_key | string | واحد من اثنين للخارجية | - | مفتاح الكائن المرفوع مباشرةً (استدعِ /lyrics-align/upload-ticket أولاً) |
| vocal_separate | boolean | لا | false |
هل يُفصل الغناء أولاً (أغاني المنصة فقط) |
| language | string | لا | تلقائي | Chinese / English وغيرها؛ وإذا لم يُرسل يُخمَّن من الكلمات |
| granularity | string | لا | both |
both / line (دون إخراج لكل حرف) / word |
| sections | string | لا | keep |
keep يحتفظ بوسوم مثل [Chorus] (لا تدخل الخط الزمني) / drop |
| format | string | لا | json |
json / lrc / lrc-word (الأخيران يعيدان أيضاً نصّي lrc وlrc_word) |
القيود
| البند | القيد |
|---|---|
| مدة الصوت | ≤ 6 دقائق (الزيادة تُرجع خطأ واسترداداً كاملاً) |
| مصدر الصوت | يجب أن يكون قابلاً للتنزيل علناً؛ ولا تُقبل العناوين التي تحتاج جلسة دخول |
| تنسيق الكلمات | نص عادي، أسطر بـ \n؛ ووسوم المقاطع مثل [Verse] و【主歌】 تبقى كما هي لكنها لا تدخل الخط الزمني |
| الدفعات | أغنية واحدة لكل طلب؛ ولعدة أغانٍ كرّر الاستدعاء بنفسك |
| حفظ النتيجة | هذه الواجهة لا تحفظ شيئاً؛ احفظ النتيجة بنفسك |
أمثلة الطلب
أغنية خارجية (كلمات + عنوان الصوت)
curl -X POST https://www.suno-api.io/api/music/lyrics-align \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"lyrics": "أسير في شوارع باردة\nنسيم الليل يلامس عينيّ\nالزمن يمضي كالماء",
"audio_url": "https://your-bucket.example.com/song.mp3"
}'
أغنية من المنصة (دون فصل)
curl -X POST https://www.suno-api.io/api/music/lyrics-align \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"song_id": "17e52af7-b5df-4877-a98a-dce94e0e6aa2"}'
أغنية من المنصة + فصل الغناء (موصى به للكاريوكي)
curl -X POST https://www.suno-api.io/api/music/lyrics-align \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"song_id": "17e52af7-b5df-4877-a98a-dce94e0e6aa2", "vocal_separate": true}'
الاستجابة
استجابة ناجحة
{
"success": true,
"lyrics_source": "platform",
"vocal_separate": false,
"coverage": 0.935,
"exact": 196,
"fuzzy": 4,
"total": 214,
"lines": [
{
"text": "أسير في شوارع باردة",
"start": 21.66,
"end": 24.06,
"chars": [
{"char": "أ", "start": 21.66, "end": 21.74, "word": true},
{"char": "س", "start": 21.98, "end": 22.22, "word": true}
]
}
]
}
شرح الحقول
| الحقل | النوع | ملاحظات |
|---|---|---|
success |
boolean | هل نجح الطلب |
lyrics_source |
string | platform = الكلمات من أغنية المنصة؛ user = الكلمات منك؛ asr = لم ترسل كلمات والنص من التعرّف |
vocal_separate |
boolean | هل مرّ هذه المرة بفصل الغناء |
confidence |
string | high / low (ويكون low دائماً عند lyrics_source=asr) |
warnings[] |
array | تنبيهات تدهور الأداء؛ وعند عدم وجود كلمات تحتوي {"code":"no_reference_lyrics"} |
coverage |
number | جودة المحاذاة: نسبة الأحرف ذات المرتكز الزمني الواضح (0–1) |
exact / fuzzy / total |
number | أحرف مطابقة تماماً / مطابقة صوتياً / أحرف الكلمات الصالحة |
lines[].text |
string | سطر كلمات واحد، مطابق حرفاً بحرف لأصلك |
lines[].start / end |
number | وقت بداية ونهاية السطر (ثوانٍ) |
lines[].section |
boolean | هل السطر وسم مقطع (true = بلا وقت وبلا تسليط ضوء) |
lines[].chars[] |
array | أوقات كل حرف: char وstart/end بالثواني وword هل يدخل الخط الزمني (العلامات الترقيمية false) |
words[] |
array | قائمة أحرف مسطّحة: text / start / end / line؛ ولا تُعاد عند granularity=line |
lrc |
string | نص LRC لكل سطر (فقط مع format=lrc أو lrc-word) |
lrc_word |
string | LRC محسّن لكل حرف مع وسوم <mm:ss.xx> داخل السطر (فقط مع format=lrc-word) |
كيف تستخدم coverage (ثلاث درجات)
| coverage | الاستخدام المقترح |
|---|---|
| ≥ 0.9 | يمكن تسليط الضوء حرفاً بحرف (كاريوكي) |
| 0.8 – 0.9 | مزج بين الحرف والسطر، أو تسليط الضوء على السطر فقط والحرف للاسترشاد |
| < 0.8 | تسليط الضوء على السطر فقط (التكرارات والهارموني الكثيف واللهجات والراب تنخفض غالباً) |
الحالة والأوقات
| الحالة | الزمن المقيس |
|---|---|
| أغنية المنصة · دون فصل | نحو 4.5 ثانية |
| أغنية المنصة · فصل (مسار الغناء موجود) | نحو 11 ثانية |
| أغنية المنصة · فصل (يلزم فصله في اللحظة) | نحو 25 ثانية، وحتى نحو دقيقة |
| أغنية خارجية · كلمات + عنوان الصوت | نحو 5–15 ثانية (حسب الطول) |
حد التنفيذ الواحد على الخادم 8 دقائق؛ اضبط مهلة العميل على 120 ثانية أو أكثر.
استجابات الخطأ
{
"success": false,
"message": "音频超过 6 分钟上限(实际 7.2 分钟)"
}
| الحالة | هل يُخصم؟ |
|---|---|
| لا يوجد صوت (لم يُرسل أي من الثلاثة) | لا يُخصم (لم تبدأ المعالجة) |
إرسال audio_url وaudio_object_key معاً |
لا يُخصم (لم تبدأ المعالجة) |
| كائن الرفع المباشر لم يُحفظ بعد / حُذف | لا يُخصم (لم تبدأ المعالجة) |
granularity / sections / format غير صالحة |
لا يُخصم (لم تبدأ المعالجة) |
| أغنية المنصة غير موجودة / ليست لهذا الحساب | لا يُخصم (لم تبدأ المعالجة) |
| معاملات ناقصة أو غير صالحة | لا يُخصم (لم تبدأ المعالجة) |
| الصوت يتجاوز حد 6 دقائق | استرداد كامل |
| الصوت غير قابل للتنزيل (عنوان غير عام / يحتاج دخولاً) | استرداد كامل |
| لم تُرسل كلمات وفشل التعرّف على الخادم | استرداد كامل |
| حُدّد فصل الغناء لكن لا يوجد مسار غناء قابل للاستخدام | استرداد كامل (بما يشمل رسم الفصل) |
| خلل أو مهلة في خدمة المحاذاة | استرداد كامل |
المبدأ: لا نتيجة نهائية يعني استرداداً كاملاً. لا يُخصم إلا عند إعادة الطوابع الزمنية لكل حرف فعلاً، والاسترداد تلقائي دون طلب.
الفوترة
| البند | متى يُحتسب | ملاحظات |
|---|---|---|
| معايرة الطوابع الزمنية للكلمات (الأساس) | كل مرة | لكل طلب (حالياً 0.1 يوان لكل طلب)؛ والمبلغ الفعلي يتبع إعداد الأسعار في لوحة الإدارة |
| رسم النسخ الإضافي | فقط عند عدم تقديم كلمات | على الخادم تشغيل تعرّف صوتي مرةً، وهو كلفة لا توجد في فئة «مع كلمات»، لذا يُسعّر منفصلاً |
| فصل الغناء (اختياري، أغاني المنصة فقط) | عند تحديد vocal_separate |
يُحتسب مرة واحدة بسعر «فصل الغناء/الموسيقى المصاحبة» الحالي ويُسوَّى مع هذه الواجهة |
التركيب:
المستحق = السعر الأساسي + (لا كلمات ? رسم النسخ : 0) + (فصل محدَّد ? سعر الفصل : 0)
رسم فصل الغناء يُحتسب مرة واحدة: إن كنت قد فصلت الأغنية ومسار الغناء متاح مباشرةً تحتسبه هذه الواجهة؛ وإن لزم الفصل في اللحظة تحتسبه خطوة الفصل.
مثال كامل (Python)
import requests
API_KEY = "YOUR_API_KEY"
BASE = "https://www.suno-api.io"
def align_lyrics(song_id=None, lyrics=None, audio_url=None, vocal_separate=False):
payload = {}
if song_id:
payload["song_id"] = song_id
payload["vocal_separate"] = vocal_separate
else:
payload["lyrics"] = lyrics
payload["audio_url"] = audio_url
r = requests.post(
f"{BASE}/api/music/lyrics-align",
headers={"Authorization": f"Bearer {API_KEY}"},
json=payload,
timeout=600,
)
data = r.json()
if not data.get("success"):
raise RuntimeError(data.get("message"))
return data
res = align_lyrics(song_id="17e52af7-b5df-4877-a98a-dce94e0e6aa2", vocal_separate=True)
print("جودة المحاذاة coverage =", res["coverage"])
for line in res["lines"]:
print(f'{line["start"]:7.2f} {line["text"]}')
# كاريوكي لكل حرف: كل حرف في line["chars"] له start / end خاص به
أسئلة شائعة
س: هل النتيجة لكل حرف أم لكل سطر؟
ج: كلاهما. lines[].start لكل سطر، وlines[].chars[].start / end لكل حرف؛ والمشغّل يأخذ ما يحتاجه.
س: لماذا النص المُعاد مطابق لما أرسلته؟ ج: هذا هو التصميم. لا نتعرّف ثم نعيد الكتابة، بل نحاذي الوقت فقط، فلا يمكن أن «تُصحَّح الكلمات إلى خطأ إملائي».
س: coverage مرتفع لكن ما زال يبدو منزاحاً قليلاً.
ج: خطأ المحاذاة لكل حرف عادة في حدود عشرات المللي ثانية؛ وإذا كان الانزياح ثابتاً في الأغنية كلها فالسبب الأرجح صمت في بداية الصوت — اقتطعه ثم أعد المحاولة.
س: لماذا كان فصل الغناء يعمل قبل قليل ثم صار يقول «مسار الغناء غير متاح»؟ ج: نتائج الفصل هي عناوين مؤقتة قصيرة الأجل (بالقياس: تنتهي بعد نحو نصف ساعة). وفي هذه الحالة تحاول الواجهة الفصل تلقائياً مرة أخرى؛ وإن فشلت يقع استرداد كامل. لذا فإن «افصل الآن ثم عاير لاحقاً» غير موثوق — نفّذ الأمرين في التدفق نفسه.
س: هل يجب أن أفصل أغنية المنصة بنفسي؟
ج: لا. مع vocal_separate: true نتحقق هل للأغنية مسار غناء؛ وإن لم يوجد مسار صالح نُرجع خطأ ونسترد، ولا نمرّر المزيج الكامل.
س: هل يمكن بشكل دفعات؟ ج: أغنية واحدة لكل طلب. وللدفعات كرّر الاستدعاء؛ وكل استدعاء يُحتسب طبيعياً، لذا يُنصح بتخزين النتائج محلياً.
س: هل تُحفظ النتيجة؟ ج: هذه الواجهة لا تحفظ شيئاً؛ احفظ القيمة المُعادة بنفسك (طوابع السطر والحرف كلها في الاستجابة).
احصل على مفتاح API
أنشئ مفتاح API من لوحة التحكم بعد التسجيل. كل عملية توليد تكلف 0.6 يوان وتعيد مقطوعتين، والتنزيلات غير محدودة، ولا حاجة إلى رقم هاتف.
احصل على مفتاح API العودة إلى النظرة العامة