37 lines
No EOL
635 B
Python
37 lines
No EOL
635 B
Python
NOTES_OF_OCTAVE = {
|
|
0: ['C', 'B#'],
|
|
1: ['C#', 'Db'],
|
|
2: ['D'],
|
|
3: ['D#', 'Eb'],
|
|
4: ['E', 'Fb'],
|
|
5: ['F', 'E#'],
|
|
6: ['F#', 'Gb'],
|
|
7: ['G'],
|
|
8: ['G#', 'Ab'],
|
|
9: ['A'],
|
|
10: ['A#', 'Bb'],
|
|
11: ['B', 'Cb']
|
|
}
|
|
|
|
def note_to_freq(note):
|
|
|
|
note_no = note_to_note_no(note)
|
|
return note_no_to_freq(note_no)
|
|
|
|
def note_to_note_no(note):
|
|
|
|
octave = int(note[-1])
|
|
note = note[:-1]
|
|
|
|
note_no_oct = 1
|
|
for note_no_oct, notelst in NOTES_OF_OCTAVE.items():
|
|
|
|
if note in notelst:
|
|
break
|
|
|
|
corr_note_no_oct = note_no_oct - 8
|
|
return corr_note_no_oct + (octave*12)
|
|
|
|
def note_no_to_freq(note_no):
|
|
|
|
return 2**((note_no-49) / 12.0) * 440 |