Calcule o tempo do repertório, músicas e conversa
Um show pode parecer folgado até que apresentações, interação com o público, pausas para afinação e estimativas generosas consumam a margem.
Executar grátis
Esta calculadora aplica uma duração total a uma lista ordenada de músicas, reserva o tempo de conversa e mostra exatamente onde o plano deixa de caber. O resultado traz as músicas programadas, os minutos usados, a margem restante e o tempo adicional necessário para a primeira música excluída, permitindo que você revise ou automatize uma previsão prática de ensaio.
Comece com um orçamento de tempo realista
Informe todos os minutos disponíveis e liste as músicas na ordem planejada. Cada duração deve refletir a execução ao vivo, e não necessariamente a faixa de estúdio. Considere finais prolongados, introduções instrumentais, mudanças de andamento e arranjos que costumam crescer. Acrescente uma reserva total para falas, interação, afinação, água e outras pausas que não estejam nas estimativas das músicas. A calculadora separa esse tempo antes de encaixar o repertório, mantendo as falas visíveis e produzindo um resultado prudente. A duração total e cada música devem ser positivas; a conversa pode ser zero. Todos os valores usam minutos: quatro minutos e trinta segundos, por exemplo, devem ser enviados como 4.5. Uma entrada cuidadosa é mais útil do que uma conta precisa baseada em previsões otimistas.
Entenda como as músicas são escolhidas
As músicas são avaliadas desde o início da lista, uma de cada vez. Uma faixa entra somente se a conversa reservada, as faixas já aceitas e sua duração permanecerem dentro do total. Quando uma música não cabe, o cálculo para. Ele não pula essa faixa para procurar outra menor, pois isso alteraria silenciosamente a sequência artística. Portanto, a lista devolvida é o trecho inicial mais longo que cabe. A resposta também informa tempo musical, conversa, minutos usados e margem. Quando existe uma próxima faixa, ela é identificada com os minutos adicionais necessários. Se todas couberem, esse campo opcional é omitido. Caso a conversa sozinha ultrapasse o show, nenhuma música cabe e a margem negativa revela o déficit real em vez de escondê-lo como zero.
Use o resultado no ensaio e na produção
Trate a saída como um ponto de conferência e melhore as estimativas com dados do ensaio. Uma margem pequena pode desaparecer com aplausos longos, troca de instrumento ou transição obrigatória pelo horário do local. Vale comparar uma previsão normal, outra conservadora com músicas e conversa maiores e um repertório reduzido de contingência. Como a ordem é preservada, músicos, direção de palco e produção conseguem comparar as versões com facilidade. O déficit da próxima música ajuda a decidir entre reduzir uma fala, encurtar um arranjo ou retirar uma faixa inteira. Para automatizar, guarde o resultado com as estimativas de origem. Entradas idênticas produzem saídas idênticas no navegador e na API. Cada solicitação custa US$ 0,002, e a ferramenta apresenta uma conta objetiva, sem fingir que a otimização é uma recomendação artística.
Casos de uso
Monte um repertório para o local
Confira o show ordenado contra um horário fixo, preservando uma reserva explícita para falas e transições.
Prepare uma contingência de festival
Compare estimativas normais e conservadoras para descobrir em qual música um show apertado precisa terminar.
Revise a cronometragem do ensaio
Troque durações de estúdio por medições ao vivo e verifique se o plano revisado ainda deixa uma margem prática.
Perguntas frequentes
Quanto custa uma solicitação de API?
Cada solicitação de API custa US$ 0,002. O resultado é calculado de modo determinístico, sem rede nem modelo.
A calculadora reordena as músicas?
Não. Ela respeita a ordem enviada, devolve o maior trecho inicial que cabe e para na primeira faixa que ultrapassaria o limite.
Como informar minutos e segundos?
Converta a duração em minutos decimais. Por exemplo, trinta segundos são 0.5 minuto e quinze segundos são 0.25 minuto.
O que entra na reserva de conversa?
Inclua apresentações, interação, afinação, pausas e outros tempos planejados que ainda não estejam nas estimativas musicais.
Por que a margem pode ser negativa?
Isso acontece quando a conversa reservada, sozinha, supera a duração total e mostra o déficit real mesmo sem música disponível.
O que acontece quando todas cabem?
A programação contém todas as músicas, a margem restante fica disponível e o campo opcional da próxima faixa é omitido.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/video/concert-setlist-time-budget \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"total_duration_minutes":45,"songs":[{"title":"Opening Lights","duration_minutes":4.5},{"title":"River Signal","duration_minutes":6.25},{"title":"Midnight Avenue","duration_minutes":5.75},{"title":"Last Train Home","duration_minutes":7}]}'const res = await fetch("https://api.kit.forhosting.com/video/concert-setlist-time-budget", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"total_duration_minutes": 45,
"songs": [
{
"title": "Opening Lights",
"duration_minutes": 4.5
},
{
"title": "River Signal",
"duration_minutes": 6.25
},
{
"title": "Midnight Avenue",
"duration_minutes": 5.75
},
{
"title": "Last Train Home",
"duration_minutes": 7
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/video/concert-setlist-time-budget",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"total_duration_minutes": 45,
"songs": [
{
"title": "Opening Lights",
"duration_minutes": 4.5
},
{
"title": "River Signal",
"duration_minutes": 6.25
},
{
"title": "Midnight Avenue",
"duration_minutes": 5.75
},
{
"title": "Last Train Home",
"duration_minutes": 7
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/video/concert-setlist-time-budget", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"total_duration_minutes":45,"songs":[{"title":"Opening Lights","duration_minutes":4.5},{"title":"River Signal","duration_minutes":6.25},{"title":"Midnight Avenue","duration_minutes":5.75},{"title":"Last Train Home","duration_minutes":7}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"total_duration_minutes":45,"songs":[{"title":"Opening Lights","duration_minutes":4.5},{"title":"River Signal","duration_minutes":6.25},{"title":"Midnight Avenue","duration_minutes":5.75},{"title":"Last Train Home","duration_minutes":7}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/video/concert-setlist-time-budget", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"total_duration_minutes": 45,
"songs": [
{
"title": "Opening Lights",
"duration_minutes": 4.5
},
{
"title": "River Signal",
"duration_minutes": 6.25
},
{
"title": "Midnight Avenue",
"duration_minutes": 5.75
},
{
"title": "Last Train Home",
"duration_minutes": 7
}
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "video.concert_setlist_time_budget",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_items | 500 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |