周波数間の半音数計算
周波数間の半音数計算機は、2つの正の周波数を十二平均律における符号付きの音程へ変換します。開始周波数と終了周波数をヘルツで入力すると、その比の底2の対数を12倍して求めます。オクターブなどの一般的な音程だけでなく、調律、音響測定、音声解析、ピッチ補正で使う半音未満の差も扱えます。周波数比に加え、第2周波数が第1周波数より高いか、低いか、同じかも返します。
無料で実行
目的の順序で周波数を入力してください
frequency_1_hzには基準または開始となる周波数を、frequency_2_hzには比較する周波数を指定してください。どちらもヘルツ単位の正の有限数である必要があります。結果には符号が付くため、順序は重要です。440 Hzから880 Hzでは正の12半音、880 Hzから440 Hzでは負の12半音になります。同じ値なら結果は0で、方向はunisonです。439.7 Hzや261.625565 Hzのような小数も入力できます。音名、波長、cents、比率は直接入力せず、先に周波数へ変換してください。応答には受理した入力値も含まれるため、測定記録やテストデータと計算結果を対応させやすくなります。未指定、0、負数、数値文字列、無限大、数値以外のデータは拒否され、定義できない対数を誤った結果として返すことはありません。
対数による計算方法をご確認ください
まず終了周波数を開始周波数で割り、その比の底2の対数を求めて12倍します。これは十二平均律の仕組みに対応しています。周波数が2倍になると音高は1オクターブ上がり、log2(2)は1なので、結果は12半音です。比が1なら0、1未満なら負の距離になります。音名の表とは異なり、この方法は連続値を扱います。そのため、わずかに広い完全五度を7.01955半音、小さな調律差を0.23半音のように表せます。周波数比と半音数は、JSONの再現性を保ちながら実用上十分な精度を残すため、小数点以下12桁に丸めます。formulaとtemperamentの項目で計算規約を明示しているため、別のソフトウェアがcents、純正律、ほかの音律を前提とする場合にも取り違えを防げます。
符号付きの結果を正しく利用してください
semitonesは第1周波数から第2周波数までの向き付き距離としてお読みください。正なら第2周波数が高く、負なら低く、0なら一致しています。directionには同じ関係をup、down、unisonで示すため、画面側で符号を解釈する必要がありません。整数の結果は十二平均律の正確な段階を表し、12は1オクターブ、7は完全五度、1は半音です。小数部分は、楽器の調律、スペクトルピークの比較、ピッチシフト量の設定で特に役立ちます。centsへ変換する場合は半音数を100倍してください。再現性を高めるには測定値の元の精度を保ち、入力前に丸めないでください。成功したAPIリクエストは1項目あたり$0.002で、ブラウザー版は同じ決定的な計算を端末内で実行し、周波数データを外部へ送信しません。
活用例
楽器の調律を測定する
測定した基音と目標周波数を比較し、符号付きのずれを半音未満の精度で確認できます。
ピッチシフト量を設定する
既知の周波数から別の周波数へ録音音声を移すために必要な半音数を求められます。
スペクトルピークを解析する
検出した2つのピークの比を、演奏者や音声ツールが理解しやすい音程へ変換できます。
よくある質問
どのような式で計算しますか?
十二平均律の標準的な関係である semitones = 12 × log2(frequency_2_hz / frequency_1_hz) を使用します。
結果が負になるのはなぜですか?
第2周波数が第1周波数より低いことを示します。入力順を入れ替えると、絶対値は同じまま符号が反転します。
半音数は小数になることがありますか?
はい。任意の周波数比が平均律の段階に正確に一致することは少ないため、小数の結果は正常で有用です。
結果をcentsへ変換する方法はありますか?
semitonesを100倍してください。十二平均律の1半音は100 centsです。
無効になる入力は何ですか?
未指定、0、負数、無限大、数値以外、文字列は拒否されます。両方ともヘルツ単位の正の有限なJSON数値にしてください。
APIリクエストの料金はいくらですか?
成功したAPIリクエストは1項目あたり$0.002です。同じ決定的な計算をブラウザーでは無料で利用できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/optics/semitones-between-frequencies \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"frequency_1_hz":440,"frequency_2_hz":880}'const res = await fetch("https://api.kit.forhosting.com/optics/semitones-between-frequencies", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"frequency_1_hz": 440,
"frequency_2_hz": 880
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/optics/semitones-between-frequencies",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"frequency_1_hz": 440,
"frequency_2_hz": 880
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/optics/semitones-between-frequencies", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"frequency_1_hz":440,"frequency_2_hz":880}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"frequency_1_hz":440,"frequency_2_hz":880}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/optics/semitones-between-frequencies", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"frequency_1_hz": 440,
"frequency_2_hz": 880
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "optics.semitones_between_frequencies",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |