周波数からC3やF4などのノート名に変換する

Python 3 で周波数からノート名に変換

A4 は 440Hz、 C3 は 130.8Hz のようにノート毎に周波数が決まっていますが、周波数からノートに変換するコードを Python 3 で書いてみました。

import math

SCALE_LIST = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"]
C0_FREQUENCY = 16.35

def frequency_to_note(freq):
    n = round(math.log2(freq / C0_FREQUENCY) * 12)
    return SCALE_LIST[n % 12] + str(n // 12)

実行するとこんな感じ。ノートの音程ぴったりじゃない場合は四捨五入で丸めています。

>>> frequency_to_note(55)
'A1'
>>> frequency_to_note(440)
'A4'
>>> frequency_to_note(130)
'C3'
>>> frequency_to_note(185)
'F#3'

参考URL