API tekstu z znacznikami czasu
Opis punktu końcowego
Tekst z znacznikami czasu zwraca znaczniki czasu na poziomie słów dla utworu — do zsynchronizowanego wyświetlania tekstu.
Punkt końcowy: POST /api/lyrics/timeline
Rozliczenie: Bezpłatne (zapytanie tylko do odczytu; nic nie jest pobierane i nie tworzy się zadanie generowania).
Format odpowiedzi: tablica osi czasu jest zwracana bezpośrednio — nie ma zewnętrznej otoczki data / success; po sparsowaniu to po prostu tablica.
Parametry żądania
Headers
| Parametr | Typ | Wymagany | Uwagi |
|---|---|---|---|
| Authorization | string | tak | Bearer YOUR_API_KEY |
| Content-Type | string | tak | application/json |
Parametry body
| Parametr | Typ | Wymagany | Domyślnie | Uwagi |
|---|---|---|---|---|
| model | string | nie | suno-v6 | Nazwa modelu dla klienta: suno-v6, suno-v6-wild lub suno-v6-mini |
| song_id | string | tak | - | Identyfikator utworu |
Przykład żądania
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"
}'
Odpowiedź
Poniżej prawdziwa odpowiedź produkcyjna dla utworu o długości 189,6 sekundy w suno-v6 (to wywołanie miało 69 segmentów; zachowano tu tylko pierwsze i ostatnie):
[
{
"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
}
]
Opis pól
| Pole | Typ | Uwagi |
|---|---|---|
word |
string | Tekst tego segmentu; zawiera własne znaki nowej linii: jedna linia tekstu na segment z \n na końcu segmentu i \n\n między akapitami, dlatego pojawiają się wpisy zawierające tylko spacje |
start_s |
number | Czas początku segmentu w sekundach (z częścią dziesiętną) |
end_s |
number | Czas końca segmentu w sekundach. end_s ostatniego segmentu to praktycznie długość utworu |
success |
boolean | Czy ten segment został poprawnie wyrównany |
p_align |
number | Pewność wyrównania; w pomiarach stabilnie 0.99 |
Na co uważać
- Nie szukaj otoczki. Odpowiedzią jest sama tablica, a nie
{"data": ...}, i nie ma w niej polasuccess. - Na początku może nie być segmentu. W utworze z czystym wstępem pomiar pokazał pierwszy segment dopiero w 15. sekundzie, a
start_snie musi zaczynać się od0; przy karaoke obsłuż początkową lukę samodzielnie. - Zwracane są także znaczniki instrumentalne i strukturalne, w postaciach
[Intro],[Verse 1],Instrumental: soft arpeggiating piano, …i[End], również z czasami słowo po słowie. Przed budowaniem napisów odfiltruj te segmenty po początkowym[albo poInstrumental; inaczej opisy aranżacji pojawią się jako tekst utworu. - To podział na słowa, nie na linie. Ta sama linia tekstu bywa dzielona na kilka segmentów i trzeba je scalić w linie po
\n; czas linii tostart_sjej pierwszego segmentu. - Liczba segmentów zależy od utworu; nie zakładaj stałej liczby (pomiar: utwór 189,6 sekundy miał 69 segmentów, a treść odpowiedzi około 6,5 KB).
Generowanie pliku .lrc
Ten punkt końcowy zwraca tylko dane osi czasu; nie zwraca pliku bezpośrednio. Jeśli potrzebujesz .lrc, złóż linie z zwróconego start_s w formacie [mm:ss.cc] (pole word zawiera własne znaki nowej linii — podziel po liniach i pomiń puste). Przykład znajdziesz w sekcji „Jak pobrać tekst z znacznikami czasu (.lrc)” w API pobierania i odsłuchu mediów utworów.
Poniżej pełna wersja z filtrowaniem znaczników instrumentalnych i strukturalnych (jeden segment na linię, dobra do sprawdzenia najpierw kształtu danych):
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)
Uwagi o zgodności
Wcześniejsza dokumentacja używała przykładu z obiektem-otoczką { success, song_id, lyrics: [...] }. Obecna dokumentacja przyjmuje jako obowiązującą tablicę osi czasu zwracaną bezpośrednio.
Uzyskaj klucz API
Po rejestracji utwórz klucz API w konsoli. Każde generowanie kosztuje 0,6 ¥ i zwraca 2 utwory, pobierania są nieograniczone, a numer telefonu nie jest wymagany.
Pobierz klucz API Powrót do przeglądu