music/midi/ MidiPitches
There is a table here and here.
Summary
In A=440hz equal temperament, naturally A is 440Hz. The ration of a semitone is always 805f677a878e798163eed95540dd1b93016c103f07af1b30c5feb1c16956db7a2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3. So we can find all the other frequencies using this. Middle C is 60 and the A above middle C (the 400Hz one, sometimes called concert pitch) is 69.
Some Notes
I've only included A's and C's – you can work out the rest from here
Syntax | Description |
---|---|
Header | Title |
Paragraph | Text |
A | B | C | D |
---|---|---|---|
a | b | c | d |
| Lilypond name | ABC name | Pitch(dec) | Pitch(hex) | Freq(hz) | | --------- | -------- | -------- | -------- | | C,,,,, | C,,,,, | 0 | 00 | 8.175798915643707Hz | | Cis,,,,,/Des,,,,, | ^C,,,,,/_D,,,,, | 1 | 01 | 8.661957218027252Hz | | Gis,,,,,/Aes,,,,, | ^G,,,,,/_A,,,,, | 8 | 08 | 12.978271799373287Hz | | A,,,,, | A,,,,, | 9 | 09 | 13.75Hz | | Ais,,,,,/Bes,,,,, | ^A,,,,,/_B,,,,, | 10 | 0a | 14.567617547440307Hz | | C,,,, | C,,,, | 12 | 0c | 16.351597831287414Hz | | Cis,,,,/Des,,,, | ^C,,,,/_D,,,, | 13 | 0d | 17.323914436054505Hz | | Gis,,,,/Aes,,,, | ^G,,,,/_A,,,, | 20 | 14 | 25.956543598746574Hz | | A,,,, | A,,,, | 21 | 15 | 27.5Hz | | Ais,,,,/Bes,,,, | ^A,,,,/_B,,,, | 22 | 16 | 29.13523509488062Hz | | C,,, | C,,, | 24 | 18 | 32.70319566257483Hz | | Cis,,,/Des,,, | ^C,,,/_D,,, | 25 | 19 | 34.64782887210901Hz | | Gis,,,/Aes,,, | ^G,,,/_A,,, | 32 | 20 | 51.91308719749314Hz | | A,,, | A,,, | 33 | 21 | 55.0Hz | | Ais,,,/Bes,,, | ^A,,,/_B,,, | 34 | 22 | 58.27047018976124Hz | | C,, | C,, | 36 | 24 | 65.40639132514966Hz | | Cis,,/Des,, | ^C,,/_D,, | 37 | 25 | 69.29565774421802Hz | | Gis,,/Aes,, | ^G,,/_A,, | 44 | 2c | 103.82617439498628Hz | | A,, | A,, | 45 | 2d | 110.0Hz | | Ais,,/Bes,, | ^A,,/_B,, | 46 | 2e | 116.54094037952248Hz | | C, | C, | 48 | 30 | 130.8127826502993Hz | | Cis,/Des, | ^C,/_D, | 49 | 31 | 138.59131548843604Hz | | Gis,/Aes, | ^G,/_A, | 56 | 38 | 207.65234878997256Hz | | A, | A, | 57 | 39 | 220.0Hz | | Ais,/Bes, | ^A,/_B, | 58 | 3a | 233.08188075904496Hz | | C | C | 60 | 3c | 261.6255653005986Hz | | Cis/Des | ^C/_D | 61 | 3d | 277.1826309768721Hz | | Gis/Aes | ^G/_A | 68 | 44 | 415.3046975799451Hz | | A | A | 69 | 45 | 440.0Hz | | Ais/Bes | ^A/_B | 70 | 46 | 466.1637615180899Hz | | c | c | 72 | 48 | 523.2511306011972Hz | | cis/des | ^c/_d | 73 | 49 | 554.3652619537442Hz | | gis/aes | ^g/_a | 80 | 50 | 830.6093951598903Hz | | a | a | 81 | 51 | 880.0Hz | | ais/bes | ^a/_b | 82 | 52 | 932.3275230361799Hz | | c' | c' | 84 | 54 | 1046.5022612023945Hz | | cis'/des' | ^c'/_d' | 85 | 55 | 1108.7305239074883Hz | | gis'/aes' | ^g'/_a' | 92 | 5c | 1661.2187903197805Hz | | a' | a' | 93 | 5d | 1760.0Hz | | ais'/bes' | ^a'/_b' | 94 | 5e | 1864.6550460723597Hz | | c'' | c'' | 96 | 60 | 2093.004522404789Hz | | cis''/des'' | ^c''/_d'' | 97 | 61 | 2217.4610478149766Hz | | gis''/aes'' | ^g''/_a'' | 104 | 68 | 3322.437580639561Hz | | a'' | a'' | 105 | 69 | 3520.0Hz | | ais''/bes'' | ^a''/_b'' | 106 | 6a | 3729.3100921447194Hz | | c''' | c''' | 108 | 6c | 4186.009044809578Hz | | cis'''/des''' | ^c'''/_d''' | 109 | 6d | 4434.922095629953Hz | | gis'''/aes''' | ^g'''/_a''' | 116 | 74 | 6644.875161279122Hz | | a''' | a''' | 117 | 75 | 7040.0Hz | | ais'''/bes''' | ^a'''/_b''' | 118 | 76 | 7458.620184289437Hz | | c'''' | c'''' | 120 | 78 | 8372.018089619156Hz | | cis''''/des'''' | ^c''''/_d'''' | 121 | 79 | 8869.844191259906Hz |
Note table generator
This is a simple python script to generate the table above.
concert_a_frequency = 440 # A above middle C freq
middle_c_midi_pitch = 60
concert_a_midi_pitch = 69 # A above middle C pitch, 440Hz at concert pitch
def note_name_abc(x):
rel_to_middle_c = x - middle_c_midi_pitch
octave, pitch_class = divmod(rel_to_middle_c,12)
pitches = "C ^C D ^D E F ^F G ^G A ^A B".split(" ")
pitches_flat = "C _D D _E E F _G G _A A _B B".split(" ")
return note_name_core(pitch_class,octave,pitches,pitches_flat)
def note_name_lilypond(x):
rel_to_middle_c = x - middle_c_midi_pitch
octave, pitch_class = divmod(rel_to_middle_c,12)
pitches = "C Cis D Dis E F Fis G Gis A Ais B".split(" ")
pitches_flat = "C Des D Ees E F Ges G Aes A Bes B".split(" ")
return note_name_core(pitch_class,octave,pitches,pitches_flat)
def note_name_core(pitch_class,octave,pitches,pitches_flat):
letter = pitches[pitch_class]
letterf = pitches_flat[pitch_class]
if octave <= 0:
suffix = ","*(-octave)
elif octave >= 1:
letter = letter.lower()
letterf = letterf.lower()
suffix = "'"*(octave - 1)
if letter != letterf:
result = f"{letter}{suffix}/{letterf}{suffix}"
else:
result = f"{letter}{suffix}"
return result
def note_freq(x,concert_a=concert_a_frequency):
rel_to_concert_a = x - concert_a_midi_pitch
ratio = 2**(rel_to_concert_a/12)
return concert_a*ratio
only_ac = True # set to False to print all notes, True prints only A,C
print("""| Lilypond name | ABC name | Pitch(dec) | Pitch(hex) | Freq(hz) |
--------------------------------------""")
for x in range(128):
name = note_name_lilypond(x)
if "C" in name.upper() or "A" in name.upper() or not only_ac:
print(f"{note_name_lilypond(x)}|{note_name_abc(x)}|{x}|{x:02x}|{note_freq(x)}Hz")