タップ間隔からBPM
0、500、1000、1500 msのタップは500 msの間隔が3つで、テンポは120 BPMです。グルーヴに合わせてタップした時刻を入れれば、プロジェクトに設定できるテンポが分かります。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- タップ回数
- 0, 500, 1,000, 1,500
- タップ (ms)
- 0, 500, 1,000, 1,500 bpm
- タップ回数
- 4
- 間隔 (ms)
- 500, 500, 500
- 区間の数
- 3
タップ間隔からBPMを求める計算機は、利用者の入力したタップ時刻の並びを、再現可能な単一のテンポ(毎分ビート数)に変換します。ミリ秒単位で少なくとも2つの順序付き時刻—最初のタップからの相対オフセット、または絶対時計値—を渡すと、ツールは連続する各間隔を測り、正のギャップの平均を取り、スタジオ定番の関係式(BPMは平均ミリ秒毎ビートで六万を割った値)で平均間隔を換算します。プロジェクトテンポが無いのにグルーヴだけ聞こえる制作者、タップテンポの流れを示す教員、メトロノームやシーケンサのテストを書く開発者はいずれも、表計算を開かずストップウォッチで推測せずに済む同じ決定的な算術を必要とします。
タップ時刻が毎分ビート数になる仕組み
タップによるテンポ推定は、安定したビートが連続ヒット間にほぼ等しい時間ギャップを生むという観察から始まります。各タップの瞬間をミリ秒で記録し、列が厳密に増加することを要求すれば、連続する差はすべて正の間隔となり、1ビートに1タップという前提の下で1拍周期を表します。それらの間隔を平均すると人間の小さなタイミング誤差が平滑化されます。
遅れた、または早い1タップがずらすのは1〜2ギャップだけで、多数の間隔の平均は意図したパルスに収束します。平均間隔を毎分ビート数へ換算するとき、音楽制作全般で使うのと同じ逆数を用います。1分には六万ミリ秒あるので、その定数を平均ミリ秒毎ビートで割ると、その平均間隔が1分間続いた場合に四分音符パルスが何回起きるかが得られます。
たとえば0、500、1000、1500ミリ秒の4タップは500ミリ秒の等間隔が3つと平均500を生み、120 BPM—ハウスやポップで馴染みのグリッド—に対応します。ライブの不揃いなタップでも機能します。480、520、500ミリ秒の間隔は平均500となり、丸め後も120 BPMを報告します。
非正の間隔を拒否するのは必須です。ゼロギャップは無限テンポを意味し、負のギャップはタイムスタンプの順序誤りを意味します。このため本機能は各タイムスタンプを有限数に強制し、正のデルタだけを構築して平均し、BPM・平均間隔・間隔リスト全文・順序付き手順を公開し、学生やユニットテストが手計算で算術を再現できるようにします。
実務のコツ、制限、関連検索
可能なら4〜8回以上タップしてください。間隔が増えるほど1回のタイミング外れの影響が減ります。ただしスクリプト試験ではタイムスタンプ2点で単一間隔テンポを既に定義できます。
列は厳密に増加させてください。スタジオの定番確認点は手計算で容易です。平均間隔500ミリ秒は120 BPM、600ミリ秒は100 BPM、約428.57ミリ秒はおよそ140 BPMです。
本ランディングはタップからBPM、間隔からタップテンポ、タップ時刻から毎分ビート数を探す利用者向けです。音声オンセット検出器でもスイング量子化器でも、BPMをミリ秒の音符表にする表でもありません—既知のプロジェクトテンポを音符・ディレイ長に換える場合は姉妹機能のBPM→ミリ秒計算機を使ってください。
既存グリッドのない人間またはプログラムのタップが源のときに本機能を選んでください。往復確認は単純です。 各連続差を再計算し、平均し、六万をその平均で割り、公開 bpm と12桁丸め内で一致することを確認します。
活用例
タップしたグルーヴからセッションテンポを推定
制作者は参照トラックやライヴテイクに合わせてタップし、ミリ秒タイムスタンプを貼り付け、返却された平均テンポでDAWのプロジェクトBPMを設定します。
よくある質問
タップ時刻からBPMはどう計算しますか?
連続する正の間隔をミリ秒で測り、それらの平均を取り、BPMを平均間隔で 60000 を割った値として求めます。1回の平均拍周期が1分に何拍入るかに対応します。
タップは何回必要ですか?
タイムスタンプは最低2点(正の間隔が1つ)です。タップを増やすほど平均が単発のタイミング誤差を平滑化し、安定性が上がります。
絶対時計が必要ですか、それとも0から始められますか?
どちらでも構いません。 重要なのは連続タイムスタンプの差だけなので、0始まりの相対オフセットは epoch 様式の絶対ミリ秒と同等です。
500 ms間隔のタップは何BPMですか?
120 BPMです。60000ミリ秒を平均の間隔500 msで割って求めます。0、500、1000、1500 msのタップはちょうどこの結果になります。
なぜ間隔の平均を使うのですか?
人の手による小さなずれをならすためです。1回だけ早すぎたり遅すぎたりしても動くのは1つか2つの間隔だけで、全体の平均は安定します。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/hobby/music-bpm-from-tap \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"taps":[0,500,1000,1500]}'const res = await fetch("https://api.kit.forhosting.com/hobby/music-bpm-from-tap", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"taps": [
0,
500,
1000,
1500
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/hobby/music-bpm-from-tap",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"taps": [
0,
500,
1000,
1500
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/hobby/music-bpm-from-tap", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"taps":[0,500,1000,1500]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"taps":[0,500,1000,1500]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/hobby/music-bpm-from-tap", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"taps": [
0,
500,
1000,
1500
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "hobby.music_bpm_from_tap",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
単調増加でない、または不完全な列は明確な invalid_input で拒否されるため、スクリプトが単一クリックや逆順リストからテンポを捏造することはありません。経路は純数学—ネットワークなし、乱数シードなし、壁時計依存なし—なので、無料のブラウザ実行器とプリペイドAPIは固定小数点丸め後に毎回同じJSONを返します。
APIの呼び出し方と戻り値
配列には少なくとも2個、最大500個の有限数が必要です。クライアントを制御できる場合は整形済み文字列より数値送信を推奨します。数値文字列は厳密な有限数値パターンに一致する場合のみ受け付けます。0から始まる相対時計でも、epoch 様式の絶対ミリ秒でも構いません。平均に入るのは差だけだからです。必須の配列フィールド taps を1つ含むJSON本体を送ってください。別名 timestamps、tap_times、times_ms、tap_timestamps でも受け付けます。各タイムスタンプの絶対値は公開上限内に収め、IEEE倍精度で差が十分定義されるようにします。成功時の応答は、丸め済み taps_ms 列、tap_count、連続する正のデルタの intervals_ms、interval_count、平均間隔 mean_interval_ms と同義の beat_ms、推定テンポ bpm、単位文字列 unit の bpm、連続する正の間隔の平均で 60000 を割ることを示す formula、短い要約 message、生タイムスタンプから各間隔・平均・最終除算まで辿る steps を返します。配列欠落、非配列値、2未満のタイムスタンプ、非有限エントリ、数値化に失敗する空文字列、連続タップ間の非正間隔はいずれも invalid_input を返し、課金されません。料金は成功リクエストごとに定額 $0.002、単位は item です。
実務のコツ、制限、関連検索
高負荷でキャプチャ層が重複タイムスタンプを出し得る場合は、API呼び出し前に重複除去するか微小オフセットを加えてください。指導では安定した成功経路の列と、単一タップや逆順の意図的エラーを対にして、学習者がすぐに invalid_input を見るようにします。invalid_input を返す失敗タスクはプリペイド残高を消費しないため、学習者が境界を意図的に探る探索スクリプトも安く保てます。
連携の活用例
教室でのタップテンポと逆数の演習
教員は順序付きタップ一覧を渡し、生徒が平均間隔と 60000/平均 を手計算し、API応答の決定的なBPM欄と照合できるようにします。
メトロノームとシーケンサのユニットテスト
開発者は固定の合成タップ配列を与え、音声ハードウェアや壁時計タイマーなしで bpm・mean_interval_ms・intervals_ms を golden フィクスチャに対して検証します。
技術的な質問
タップが厳密に増加していない場合は?
ゼロまたは負の間隔は順序の乱れや重複を意味します。ツールは invalid_input を返し、テンポを捏造しません。
タップ間隔からBPMを求める計算機は無料ですか?
ブラウザツールは無料でローカル実行です。API呼び出しは成功リクエストごとに $0.002 のKITプリペイド残高を使い、失敗タスクは課金されません。