Décalez le minutage des paroles de karaoké
Avancez ou retardez toutes les paroles d’un karaoké sans modifier chaque repère à la main.
Lancer gratuitement
Fournissez les lignes dans l’ordre de lecture avec leurs temps en millisecondes, puis choisissez un décalage positif ou négatif. L’outil ajoute cette valeur à chaque repère, ramène à zéro tout résultat antérieur au début de la piste et conserve exactement le texte fourni. Il refuse aussi une sortie dont les temps reculeraient, afin que vous repériez un ordre incorrect avant d’exporter ou de publier les paroles synchronisées.
Corrigez un décalage temporel constant
Un fichier de karaoké peut être cohérent en lui-même tout en affichant systématiquement les paroles trop tôt ou trop tard. Cela arrive souvent lorsqu’une nouvelle introduction est ajoutée au master audio, qu’un silence initial est supprimé ou que le texte synchronisé provient d’une autre édition du même enregistrement. Si l’écart reste constant, il est inutile de refaire chaque repère. Transmettez les lignes de paroles horodatées dans l’ordre et saisissez une valeur signée dans offset_ms. Une valeur positive retarde toutes les lignes, tandis qu’une valeur négative les avance. Le résultat garde les textes et leur séquence, avec des valeurs timestamp_ms recalculées. L’opération étant globale, les intervalles entre les repères restent identiques, sauf lorsque des résultats négatifs atteignent le début de la piste. Utilisez les millisecondes pour obtenir une correction explicite et reproductible : une seconde correspond à 1000 millisecondes. Repérez d’abord un événement musical net, mesurez son écart avec la ligne affichée, puis appliquez cet écart.
Comprenez le plancher à zéro et le contrôle de l’ordre
Une chronologie audio ne peut pas contenir de temps lisible avant zéro. Chaque repère déplacé est donc limité à zéro au minimum. Par exemple, avancer de 1000 millisecondes des lignes placées à 300 et 900 millisecondes les positionne toutes deux à zéro au lieu de créer des nombres négatifs. Leur écart relatif disparaît forcément à cette limite, mais leur ordre d’entrée et leur texte restent intacts. Ce comportement est utile lorsqu’un montage retire davantage d’introduction que n’en contenaient les premiers repères. Après chaque calcul, l’outil contrôle la séquence obtenue. Des temps identiques sont acceptés, car plusieurs lignes peuvent volontairement apparaître ensemble, notamment après leur limitation à zéro. Un repère inférieur au précédent constitue une inversion et provoque une erreur d’entrée au lieu d’un tri silencieux. Un tri pourrait masquer une source mal formée et modifier l’intention éditoriale. Corrigez alors l’ordre ou les temps d’origine avant de recommencer.
Intégrez le résultat corrigé avec prudence
Considérez les lignes renvoyées comme une table de minutage corrigée destinée à l’étape suivante de votre flux de karaoké. Prévisualisez-les avec le master audio exact qui sera diffusé, en vérifiant surtout la première voix, les changements de section et les lignes ramenées à zéro. Si l’écart augmente ou diminue pendant la chanson, un décalage global ne convient pas : ce phénomène révèle une dérive, une différence de tempo ou des montages internes et demande un réglage individuel. Conservez les données originales afin de pouvoir revenir en arrière et notez le décalage retenu avec la version concernée. La fonction est déterministe, n’effectue aucune requête réseau et ne modifie ni les mots, ni la ponctuation, ni l’ordre. Elle convient ainsi aux scripts de production, aux traitements par lots et aux contrôles de publication reproductibles. Via l’API, chaque requête coûte $0.002 ; le navigateur exécute le même calcul pur. Envoyez de 1 à 10,000 lignes par requête.
Cas d’usage
Resynchroniser après la coupe d’une introduction
Avancez tous les repères de la durée exacte retirée au début du master audio.
Prévoir une nouvelle ouverture
Retardez les paroles lorsqu’un compte à rebours, un identifiant ou une introduction instrumentale est ajouté.
Normaliser un export de karaoké
Appliquez une correction globale documentée avant l’export vers des sous-titres ou un lecteur.
Questions fréquentes
Quel est l’effet d’un décalage positif ?
Il retarde chaque ligne en ajoutant le nombre indiqué de millisecondes à tous les repères.
Que se passe-t-il si un décalage négatif place une ligne avant zéro ?
Cette ligne reçoit le temps zéro ; aucun repère négatif n’est jamais renvoyé.
Plusieurs lignes peuvent-elles obtenir le même temps ?
Oui. Les temps égaux sont valides, y compris lorsque plusieurs lignes précoces sont ramenées à zéro.
Pourquoi une inversion provoque-t-elle une erreur au lieu d’un tri ?
Un tri automatique pourrait cacher une source incorrecte et changer la séquence voulue ; vous devez donc corriger l’entrée.
Cet outil corrige-t-il une dérive au fil de la chanson ?
Non. Un décalage global ne corrige qu’un écart constant ; une dérive progressive exige un réglage individuel ou un changement d’échelle temporelle.
Quel est le prix d’une requête API ?
Chaque requête API coûte $0.002. Vous pouvez aussi exécuter le calcul localement dans le navigateur.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre 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)Exemple de requête
{
"lines": [
{
"timestamp_ms": 1200,
"text": "First line"
},
{
"timestamp_ms": 3500,
"text": "Second line"
}
],
"offset_ms": -1500
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "audio.karaoke_lyrics_sync_shift",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
max_mb | 200 |
max_minutes | 180 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |