音階の周波数一覧と求め方(Python)

音階の周波数一覧と求め方(Python)の図

今回は音階の周波数一覧と求め方について説明します。

周波数一覧

とりあえず一覧が必要な方向けに最初に一覧を貼っておきます。

下記の「小数点以下の桁数」に値を入力して「変更」ボタンを押すと、桁数を変更することができます。

音名周波数 [Hz]
A0 (ラ0)27.50000
A#0 (ラ#0)29.13524
B0 (シ0)30.86771
C1 (ド1)32.70320
C#1 (ド#1)34.64783
D1 (レ1)36.70810
D#1 (レ#1)38.89087
E1 (ミ1)41.20344
F1 (ファ1)43.65353
F#1 (ファ#1)46.24930
G1 (ソ1)48.99943
G#1 (ソ#1)51.91309
A1 (ラ1)55.00000
A#1 (ラ#1)58.27047
B1 (シ1)61.73541
C2 (ド2)65.40639
C#2 (ド#2)69.29566
D2 (レ2)73.41619
D#2 (レ#2)77.78175
E2 (ミ2)82.40689
F2 (ファ2)87.30706
F#2 (ファ#2)92.49861
G2 (ソ2)97.99886
G#2 (ソ#2)103.82617
A2 (ラ2)110.00000
A#2 (ラ#2)116.54094
B2 (シ2)123.47083
C3 (ド3)130.81278
C#3 (ド#3)138.59132
D3 (レ3)146.83238
D#3 (レ#3)155.56349
E3 (ミ3)164.81378
F3 (ファ3)174.61412
F#3 (ファ#3)184.99721
G3 (ソ3)195.99772
G#3 (ソ#3)207.65235
A3 (ラ3)220.00000
A#3 (ラ#3)233.08188
B3 (シ3)246.94165
C4 (ド4)261.62557
C#4 (ド#4)277.18263
D4 (レ4)293.66477
D#4 (レ#4)311.12698
E4 (ミ4)329.62756
F4 (ファ4)349.22823
F#4 (ファ#4)369.99442
G4 (ソ4)391.99544
G#4 (ソ#4)415.30470
A4 (ラ4)440.00000
A#4 (ラ#4)466.16376
B4 (シ4)493.88330
C5 (ド5)523.25113
C#5 (ド#5)554.36526
D5 (レ5)587.32954
D#5 (レ#5)622.25397
E5 (ミ5)659.25511
F5 (ファ5)698.45646
F#5 (ファ#5)739.98885
G5 (ソ5)783.99087
G#5 (ソ#5)830.60940
A5 (ラ5)880.00000
A#5 (ラ#5)932.32752
B5 (シ5)987.76660
C6 (ド6)1046.50226
C#6 (ド#6)1108.73052
D6 (レ6)1174.65907
D#6 (レ#6)1244.50793
E6 (ミ6)1318.51023
F6 (ファ6)1396.91293
F#6 (ファ#6)1479.97769
G6 (ソ6)1567.98174
G#6 (ソ#6)1661.21879
A6 (ラ6)1760.00000
A#6 (ラ#6)1864.65505
B6 (シ6)1975.53321
C7 (ド7)2093.00452
C#7 (ド#7)2217.46105
D7 (レ7)2349.31814
D#7 (レ#7)2489.01587
E7 (ミ7)2637.02046
F7 (ファ7)2793.82585
F#7 (ファ#7)2959.95538
G7 (ソ7)3135.96349
G#7 (ソ#7)3322.43758
A7 (ラ7)3520.00000
A#7 (ラ#7)3729.31009
B7 (シ7)3951.06641
C8 (ド8)4186.00904

周波数の求め方(Python)

そもそも音階の周波数は一定の法則に従って決まっています。

まず、表を見ると、A4の周波数は440Hzとなり、B♭は440Hzに2の1/12乗を掛けた値になっています。

これはすべての音に共通しています。

なので、基準音A4の周波数fを440Hz、基準音との差(±も考慮)をdとすると、

音階の周波数一覧と求め方(Python)の図

と求めることができます。

たとえば、A3の場合基準音との差は-12となりますので、

音階の周波数一覧と求め方(Python)の図

と求めることができます。

ここで、プログラムで周波数を求める場合、入力文字列に対して基準音との差を求める必要があります。

そこで基準音をA4とし、あらかじめ、

notes: dict = {"A": 0, "B": 2, "C": -9, "D": -7, "E": -5, "F": -4, "G": -2}

のように定義しておくことで、オクターブをk、基準音との差dとして、

音階の周波数一覧と求め方(Python)の図

とすることができます。

たとえばA3の場合、k=3、notes["A"]=0なので、

音階の周波数一覧と求め方(Python)の図

となります。

これを利用して、周波数を求める関数を作成します。今回はPythonを使用します。

notes: dict = {"A": 0, "B": 2, "C": -9, "D": -7, "E": -5, "F": -4, "G": -2}

# 音名とオクターブから周波数を計算する
def calcFrequency(note: str, octave: int) -> float:
    
    # 音名から音階を取得(一時的)
    noteIndex: int = notes[note[0].upper()]
    
    # 変化記号があれば取得
    accidental: str = note[1] if len(note) > 1 else ""
    
    # 変化記号により音階を変更
    if accidental in ["#", "♯"]:
        noteIndex += 1
    elif accidental in ["b", "♭"]:
        noteIndex -= 1
        
    # 周波数を計算
    frequency: float = 440 * 2 ** ((octave - 4) + noteIndex / 12)

    # 小数第5位まで表示
    print(f"{frequency:.5f} Hz")
    return frequency

calcFrequency("A", 4)   #440.00000 Hz
calcFrequency("A", 3)   #220.00000 Hz
calcFrequency("Bb", 4)  #466.16376 Hz
calcFrequency("A#", 4)  #466.16376 Hz
calcFrequency("C", 4)   #523.25113 Hz

このように周波数を求める関数を作成することができました。