API тексту з мітками часу
Опис кінцевої точки
Текст із мітками часу повертає мітки часу на рівні слів для пісні — для синхронного показу тексту.
Кінцева точка: 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)» в API завантаження та прослуховування медіа пісень.
Нижче — повний варіант із фільтрацією інструментальних і структурних маркерів (один сегмент на рядок, зручно спершу перевірити форму даних):
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 ¥ і повертає 2 треки, завантаження необмежені, номер телефону не потрібен.
Отримати API-ключ Повернутися до огляду