واجهة الكلمات ذات الطوابع الزمنية
وصف نقطة النهاية
الكلمات ذات الطوابع الزمنية تُعيد طوابع زمنية على مستوى الكلمة للأغنية، لعرض الكلمات بشكل متزامن.
نقطة النهاية: POST /api/lyrics/timeline
الفوترة: مجاني (استعلام للقراءة فقط؛ لا يُخصم أي مبلغ ولا تُنشأ مهمة توليد).
صيغة الإرجاع: يُعاد مصفوفة الخط الزمني مباشرةً — لا يوجد غلاف data / success؛ وبعد التحليل تكون مجرد مصفوفة.
معاملات الطلب
Headers
| المعامل | النوع | مطلوب | ملاحظات |
|---|---|---|---|
| Authorization | string | نعم | Bearer YOUR_API_KEY |
| Content-Type | string | نعم | application/json |
معاملات الجسم
| المعامل | النوع | مطلوب | القيمة الافتراضية | ملاحظات |
|---|---|---|---|---|
| model | string | لا | suno-v6 | اسم النموذج للعميل: suno-v6 أو suno-v6-wild أو suno-v6-mini |
| song_id | string | نعم | - | معرّف الأغنية |
مثال الطلب
curl -X POST https://www.suno-api.io/api/lyrics/timeline \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "suno-v6",
"song_id": "clip_id"
}'
الاستجابة
فيما يلي استجابة حقيقية من بيئة الإنتاج لأغنية مدتها 189.6 ثانية على suno-v6 (في ذلك الطلب كان هناك 69 مقطعاً، وهنا نحتفظ فقط بأول وآخر بضعة مقاطع):
[
{
"word": "[Intro]\n\n\n[",
"start_s": 15,
"end_s": 15.04277,
"success": true,
"p_align": 0.99
},
{
"word": "Instrumental: ",
"start_s": 15.04704,
"end_s": 15.10264,
"success": true,
"p_align": 0.99
},
{
"word": "End]\n\n\n",
"start_s": 189.16974,
"end_s": 189.654,
"success": true,
"p_align": 0.99
}
]
مرجع الحقول
| الحقل | النوع | ملاحظات |
|---|---|---|
word |
string | نص هذا المقطع، ويحمل أسطراً جديدة بنفسه: سطر كلمات واحد لكل مقطع مع \n في نهاية المقطع و \n\n بين الفقرات، ولذلك تظهر عناصر لا تحتوي إلا على مسافات |
start_s |
number | وقت بداية المقطع بالثواني (مع كسور عشرية) |
end_s |
number | وقت نهاية المقطع بالثواني. وend_s للمقطع الأخير يساوي مدة الأغنية تقريباً |
success |
boolean | هل تمت محاذاة هذا المقطع بنجاح |
p_align |
number | ثقة المحاذاة، وقد ثبتت في القياس عند 0.99 |
أمور يجب الانتباه إليها
- لا تبحث عن غلاف. الاستجابة هي المصفوفة نفسها، وليست
{"data": ...}، ولا يوجد فيها حقلsuccess. - قد لا يوجد أي مقطع في البداية. في الأغاني ذات المقدمة الموسيقية فقط، أظهر القياس ظهور أول مقطع عند الثانية 15 فقط، وليس مضموناً أن يبدأ
start_sمن0؛ فإن كنت تبني كاريوكي فعليك معالجة الفراغ الافتتاحي بنفسك. - تُعاد أيضاً علامات الآلات والبنية بصيغ مثل
[Intro]و[Verse 1]وInstrumental: soft arpeggiating piano, …و[End]، ومعها توقيت كلمة بكلمة كذلك. وقبل بناء ترجمات الكلمات، رشّح هذه المقاطع بحسب[في البداية أو كلمةInstrumental، وإلا ظهرت أوصاف التوزيع الموسيقي كأنها كلمات. - التقسيم بالكلمة لا بالسطر. غالباً ما يُقسَّم سطر الكلمات نفسه إلى عدة مقاطع، ويلزم دمجها في أسطر بحسب
\n؛ ووقت السطر هوstart_sلأول مقطع فيه. - عدد المقاطع يعتمد على الأغنية؛ لا تفترض عدداً ثابتاً (قياس: أغنية مدتها 189.6 ثانية كان لها 69 مقطعاً وحجم استجابة نحو 6.5 كيلوبايت).
إنشاء ملف .lrc
هذه الواجهة تُعيد بيانات الخط الزمني فقط، ولا تُعيد ملفاً مباشرةً. وإذا احتجت ملف .lrc فابنِ الأسطر من start_s المُعاد بصيغة [mm:ss.cc] (حقل word يحمل أسطراً جديدة بنفسه، فاقسمه حسب الأسطر وتجاوز الأسطر الفارغة). وللاطلاع على مثال راجع «كيفية الحصول على الكلمات ذات الطوابع الزمنية (.lrc)» في واجهة تنزيل وسَماع وسائط الأغاني.
وفيما يلي نسخة كاملة مع ترشيح علامات الآلات/البنية (مقطع واحد لكل سطر، وهي مناسبة للتحقق من شكل البيانات أولاً):
import re
SKIP = re.compile(r"^\[.*\]$|^Instrumental:")
def to_lrc(segments):
lines = []
for seg in segments:
if not seg.get("success", True):
continue
text = (seg.get("word") or "").strip()
if not text or SKIP.match(text):
continue
cs = int(max(0.0, float(seg["start_s"])) * 100 + 0.5)
lines.append(f"[{cs // 6000:02d}:{(cs % 6000) // 100:02d}.{cs % 100:02d}]{text}")
return "\n".join(lines)
ملاحظات التوافق
كانت الوثائق السابقة تستخدم مثال كائن الغلاف { success, song_id, lyrics: [...] }. أما الوثائق الحالية فتعتمد مصفوفة الخط الزمني المُعادة مباشرةً.
احصل على مفتاح API
أنشئ مفتاح API من لوحة التحكم بعد التسجيل. كل عملية توليد تكلف 0.6 يوان وتعيد مقطوعتين، والتنزيلات غير محدودة، ولا حاجة إلى رقم هاتف.
احصل على مفتاح API العودة إلى النظرة العامة