Sposti i tempi del testo karaoke in millisecondi
Anticipi o ritardi un intero testo karaoke senza modificare manualmente ogni battuta.
Esegui gratis nel browser
Fornisca le righe nell’ordine di riproduzione con tempi in millisecondi, quindi scelga uno spostamento positivo o negativo. Lo strumento aggiunge tale valore a ogni indicazione, porta a zero ogni risultato precedente all’inizio della traccia e conserva esattamente il testo ricevuto. Rifiuta inoltre un risultato con tempi decrescenti, aiutandoLa a individuare un ordine errato prima di esportare o pubblicare il testo sincronizzato.
Corregga uno scarto temporale costante
Un file karaoke può essere coerente al proprio interno ma mostrare tutte le parole sistematicamente in anticipo o in ritardo. Succede spesso quando un nuovo master audio include un’introduzione, viene eliminato il silenzio iniziale oppure il testo sincronizzato proviene da un’altra edizione della stessa registrazione. Se lo scarto è costante, non occorre rifare ogni indicazione. Invii le righe del testo con marca temporale nell’ordine previsto e inserisca un valore con segno in offset_ms. Un valore positivo ritarda tutte le righe, mentre uno negativo le anticipa. Il risultato conserva testi e sequenza, ricalcolando ogni timestamp_ms. Poiché l’operazione è globale, gli intervalli fra le battute rimangono invariati, tranne quando valori negativi molto precoci raggiungono l’inizio della traccia. Usi i millisecondi per una regolazione esplicita e ripetibile: un secondo equivale a 1000 millisecondi. Prima di confermare, individui un riferimento musicale netto, misuri la differenza rispetto alla riga visualizzata e utilizzi tale differenza come spostamento.
Comprenda il limite a zero e il controllo dell’ordine
Una linea temporale audio non può avere un istante riproducibile precedente a zero, quindi ogni tempo spostato viene limitato inferiormente a zero. Per esempio, anticipando di 1000 millisecondi due battute poste a 300 e 900 millisecondi, entrambe diventano zero invece di produrre valori negativi. La loro distanza relativa si perde inevitabilmente su quel confine, ma la sequenza ricevuta e il testo restano intatti. Questo comportamento è utile quando un montaggio elimina più introduzione di quanta ne precedesse le prime battute. Dopo ogni calcolo, lo strumento verifica la sequenza ottenuta. Tempi uguali sono ammessi, perché più righe possono apparire insieme intenzionalmente, comprese quelle limitate a zero. Un valore inferiore al precedente costituisce un’inversione e genera un errore di input non valido, senza ordinare silenziosamente i record. Il riordino potrebbe nascondere una sorgente errata e alterare l’intenzione dell’autore. Corregga quindi tempi o ordine originali e ripeta l’operazione.
Utilizzi in sicurezza il risultato corretto
Consideri le righe restituite come una tabella temporale corretta per la fase successiva del Suo flusso karaoke. Le provi con l’esatto master audio destinato alla distribuzione, controllando soprattutto il primo ingresso vocale, i cambi di sezione e le righe limitate a zero. Se lo scarto cresce o diminuisce durante il brano, una compensazione globale non è adatta: quel comportamento indica deriva, una differenza di tempo musicale o montaggi interni e richiede la regolazione delle singole battute. Conservi i dati originali per rendere reversibile l’operazione e annoti lo spostamento scelto insieme alla versione modificata. La funzione è deterministica, non effettua richieste di rete e non cambia parole, punteggiatura o ordine. È quindi adatta a script di build, preparazioni in serie e controlli di pubblicazione ripetibili. Tramite API, ogni richiesta costa $0.002; il browser usa lo stesso calcolo puro. Per una verifica prevedibile, invii da 1 a 10,000 righe per richiesta.
Casi d'uso
Sincronizzare dopo il taglio dell’introduzione
Anticipi ogni battuta dell’esatta durata rimossa dall’inizio del master audio.
Creare spazio per una nuova apertura
Ritardi il testo quando aggiunge un conto alla rovescia, un identificativo o un’introduzione strumentale.
Normalizzare un’esportazione karaoke
Applichi una correzione globale documentata prima di passare le righe a sottotitoli o lettori.
Domande frequenti
Che cosa produce uno spostamento positivo?
Ritarda ogni riga aggiungendo a tutti i tempi il numero indicato di millisecondi.
Che cosa accade se un valore negativo porta una riga prima dello zero?
Quella riga riceve il tempo zero; il risultato non contiene mai indicazioni negative.
Più righe possono avere lo stesso tempo finale?
Sì. I tempi uguali sono validi, anche quando più righe iniziali vengono limitate a zero.
Perché un’inversione genera un errore invece di essere riordinata?
L’ordinamento automatico potrebbe nascondere dati errati e cambiare la sequenza prevista; deve quindi correggere l’input.
Può correggere una deriva temporale lungo il brano?
No. Uno spostamento globale corregge solo uno scarto costante; una deriva progressiva richiede regolazioni individuali o una scala temporale.
Quanto costa una richiesta API?
Ogni richiesta API costa $0.002. Può anche eseguire il calcolo localmente nel browser.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/audio/karaoke-lyrics-sync-shift \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"lines":[{"timestamp_ms":1200,"text":"First line"},{"timestamp_ms":3500,"text":"Second line"}],"offset_ms":-1500}'const res = await fetch("https://api.kit.forhosting.com/audio/karaoke-lyrics-sync-shift", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"lines": [
{
"timestamp_ms": 1200,
"text": "First line"
},
{
"timestamp_ms": 3500,
"text": "Second line"
}
],
"offset_ms": -1500
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/audio/karaoke-lyrics-sync-shift",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"lines": [
{
"timestamp_ms": 1200,
"text": "First line"
},
{
"timestamp_ms": 3500,
"text": "Second line"
}
],
"offset_ms": -1500
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/audio/karaoke-lyrics-sync-shift", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"lines":[{"timestamp_ms":1200,"text":"First line"},{"timestamp_ms":3500,"text":"Second line"}],"offset_ms":-1500}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"lines":[{"timestamp_ms":1200,"text":"First line"},{"timestamp_ms":3500,"text":"Second line"}],"offset_ms":-1500}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/audio/karaoke-lyrics-sync-shift", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"lines": [
{
"timestamp_ms": 1200,
"text": "First line"
},
{
"timestamp_ms": 3500,
"text": "Second line"
}
],
"offset_ms": -1500
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "audio.karaoke_lyrics_sync_shift",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Limiti
max_mb | 200 |
max_minutes | 180 |
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |