音声テンポ変更計算:BPM変化率と再生時間
クリップのテンポを変更すると、拍のグリッドだけでなく再生時間も変わります。この計算ツールでは、元のBPM、目標BPM、既知のクリップ長を入力すると、符号付きのテンポ変化率、再生時間の倍率、変更後の長さが求められます。音声ファイルのアップロードや解析は不要で、編集者、制作者、DJ、開発者がすばやく再現可能な結果を得られます。
無料で実行
テンポと現在のクリップ長を入力します
最初に素材クリップの現在のBPMを入力し、次に合わせたい目標BPMを入力してください。拍の速度がゼロまたは負の場合は有効なテンポ比を作れないため、どちらの値もゼロより大きい必要があります。続いて、現在のクリップ長を秒単位で入力します。精度が必要な場合は小数を残してください。たとえば、92.5秒のリージョンは丸めずにそのまま指定できます。このツールは音声ファイルを調べたり、拍を検出したり、テンポを推測したりしません。入力された数値だけを使うため、BPM検出後の確認、編集の準備、テンポ情報をすでに持つ自動処理に適しています。境界値の計算では再生時間をゼロにできますが、負の値にはできません。ループ、ステム、キュー、シーンの一部だけを変更する場合は、プロジェクト全体ではなく、その範囲の正確な長さをお使いください。
変化率と倍率の意味を確認します
テンポ変化率は、目標BPMと元のBPMを比較した値です。目標BPMを元のBPMで割り、1を引いてから100を掛けて求めます。結果が正なら高速化、負なら低速化、ゼロなら同じテンポです。再生時間は反対方向に変化するため、その倍率は元のBPMを目標BPMで割った値になります。120 BPMから150 BPMへ変更すると、テンポは25パーセント上がり、再生時間の倍率は0.8です。したがって、高速化後のクリップは元の80パーセントの長さになります。120 BPMから90 BPMへ変更した場合は変化率が負となり、倍率は1より大きくなるため、結果は長くなります。この倍率は明示的に返されるので、同じ一様な変換に従うマーカー、リージョン、編集点の位置にも適用できます。
音声制作の工程で結果を活用します
変更後の長さは、タイムライン上の空き時間の確保、ループの整列、キューの配置、書き出し時間の見積もり、映像との同期に利用できます。この計算は、クリップ全体に同じテンポ変更を適用し、再生速度と時間が正確に反比例することを前提としています。アーティファクト、トランジェントの品質、ピッチの挙動、エラスティックオーディオの設定、各DAW固有の処理結果は予測しません。ピッチを維持するアルゴリズムでも同じ目標時間にはできますが、音質は素材とソフトウェアに左右され、この計算式では決まりません。テンポオートメーションがある場合や、元のBPMが異なる区間を含む場合は、一定テンポの区間ごとに計算して結果を合計してください。別のシステムへ渡す際は、丸め誤差の累積を防ぐため十分な小数桁を保ちます。自動呼び出しの基本料金は1回あたり$0.002です。ブラウザーでも同じ決定論的な式を使い、音声を送信する必要はありません。
活用例
ループをセッションのテンポに合わせる
ループに必要な高速化または低速化の割合と、セッションBPMに合わせた後の長さを計算します。
映像に合わせた音楽編集を計画する
カット位置を決めたり映像のタイムラインを直したりする前に、音楽キューの変更後の長さを見積もります。
音声ツール内のマーカーを調整する
自動処理で再生時間の倍率を使い、キュー、リージョン、マーカーの時刻を一貫して変換します。
よくある質問
テンポの変化率はどのように計算しますか?
目標BPMを元のBPMで割り、1を引いて100を掛けます。正の値は増加、負の値は減少を示します。
再生時間の倍率が逆比になるのはなぜですか?
テンポが速いほど同じ拍数を短時間で再生するため、元のBPMを目標BPMで割った値で再生時間を調整します。
この計算ツールはピッチを維持しますか?
ここで計算するのはテンポと再生時間だけです。ピッチの挙動は、再生機能やタイムストレッチ機能がピッチを維持するかどうかで決まります。
BPMと再生時間に小数を使えますか?
はい。2つのBPMと秒単位のクリップ長には、有限の小数値を入力できます。
BPMがゼロまたは負の場合はどうなりますか?
テンポ比には正の元BPMと目標BPMが必要なため、無効な入力としてエラーを返します。
APIリクエストの料金はいくらですか?
APIリクエストは1回あたり$0.002です。同じ決定論的な計算をブラウザーでも実行できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/audio/tempo-change-percent \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"original_bpm":120,"target_bpm":150,"duration_seconds":240}'const res = await fetch("https://api.kit.forhosting.com/audio/tempo-change-percent", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"original_bpm": 120,
"target_bpm": 150,
"duration_seconds": 240
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/audio/tempo-change-percent",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"original_bpm": 120,
"target_bpm": 150,
"duration_seconds": 240
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/audio/tempo-change-percent", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"original_bpm":120,"target_bpm":150,"duration_seconds":240}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"original_bpm":120,"target_bpm":150,"duration_seconds":240}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/audio/tempo-change-percent", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"original_bpm": 120,
"target_bpm": 150,
"duration_seconds": 240
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "audio.tempo_change_percent",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_mb | 200 |
max_minutes | 180 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |