曲とトークを含むセットリスト時間配分を計算
余裕があるように見える公演予定でも、曲紹介、観客とのやり取り、チューニング、長めの演奏見積もりによって時間はすぐに埋まります。この計算ツールは、曲順を維持した一覧に公演の総時間を適用し、トーク時間を先に確保して、どの曲から予定を超えるかを明確に示します。採用された曲、使用時間、残り時間、次の曲を加えるために必要な追加時間が返されるため、リハーサル計画の確認や自動化にご利用いただけます。
無料で実行
現実的な公演時間を設定します
使用できる総時間を分単位で入力し、演奏予定の順番で曲を並べます。各曲の長さには、スタジオ音源ではなく実際のライブ演奏を反映してください。長いエンディング、演奏による導入、テンポ変更、通常延長されるアレンジも含めます。曲紹介、観客との会話、チューニング、水分補給など、曲の見積もりに含まれない時間は、トーク時間としてまとめて確保します。計算時にはこの時間を先に差し引くため、会話時間が隠れず、余裕を持った結果になります。総時間と各曲の長さは正の値が必要ですが、トークは0でも構いません。数値はすべて分単位です。たとえば4分30秒は 4.5 と入力します。楽観的な値による精密な計算より、現実的な見積もりのほうが実用的です。
曲が選ばれる仕組みを確認します
曲は一覧の先頭から1曲ずつ評価されます。確保したトーク、すでに採用した曲、新しい曲の合計が総時間以内の場合だけ、その曲が追加されます。入らない曲が見つかると計算は終了します。その曲を飛ばして後の短い曲を探すことはありません。これは意図した演奏順を自動的に変えないためです。結果の曲一覧は、先頭から連続して収まる最長部分になります。曲の合計時間、トーク、使用時間、残り時間も表示されます。次の曲がある場合は、その曲名と追加で必要な時間が示されます。すべて収まる場合、この任意項目は省略されます。トークだけで総時間を超える場合は0曲となり、負の残り時間によって不足を正確に示します。
リハーサルと制作で結果を活用します
結果を確認地点として利用し、リハーサルの実測値で見積もりを改善してください。わずかな余裕は、長い拍手、楽器交換、会場の厳格な転換時刻によって失われることがあります。通常案、曲とトークを長めにした慎重案、短縮した緊急案を比較すると有効です。曲順が保たれるため、演奏者、舞台監督、制作担当者が各案を容易に比較できます。次の曲に不足する時間を見れば、トークや編曲を短縮するか、1曲を外すか判断しやすくなります。自動化する場合は、元の見積もりと結果を一緒に保存してください。同じ入力はブラウザーでも API でも常に同じ結果になります。API リクエストは1回 $0.002 であり、本ツールは時間計算を行いますが、芸術的な曲順を推奨するものではありません。
活用例
会場枠に合う曲順を作成します
固定された出演枠と曲順を照合し、トークや転換の時間を明示的に確保できます。
フェス用の短縮案を準備します
通常と慎重な見積もりを比較し、厳しい時間枠で終了すべき曲を特定できます。
リハーサル時間を見直します
音源の長さをライブの実測値に置き換え、実用的な余裕が残るか確認できます。
よくある質問
API リクエストの料金はいくらですか?
API リクエストは1回 $0.002 です。ネットワークやモデルを使わず、決定的に計算されます。
曲順は自動で並べ替えられますか?
いいえ。指定順を維持し、先頭から収まる最長部分を返し、超過する最初の曲で停止します。
分と秒はどのように入力しますか?
小数の分に変換してください。たとえば30秒は 0.5 分、15秒は 0.25 分です。
トーク時間には何を含めますか?
曲紹介、観客との会話、チューニング、休憩など、曲の見積もりにない予定時間を含めます。
残り時間が負になるのはなぜですか?
確保したトークだけで総時間を超えた場合です。曲が入らなくても実際の不足時間を表示します。
すべての曲が収まる場合はどうなりますか?
全曲が予定一覧に入り、残り時間が表示され、次の曲に関する任意項目は省略されます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
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)リクエスト例
{
"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": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "video.concert_setlist_time_budget",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_items | 500 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |