Showing the changes to python (1 of 1 file). Show all
Unified · Split
| @@ -1,11 +1,11 @@ | ||
| 1 | 1 | # -*- coding: utf-8 -*- |
| 2 | 2 | """ utilities to convert midi note number to and from note names """ |
| 3 | 3 | |
| 4 | −__all__ = ['note2midi', 'midi2note', 'freq2note', 'note2freq'] | |
| 5 | − | |
| 6 | 4 | import sys |
| 7 | 5 | from ._aubio import freqtomidi, miditofreq |
| 8 | 6 | |
| 7 | +__all__ = ['note2midi', 'midi2note', 'freq2note', 'note2freq'] | |
| 8 | + | |
| 9 | 9 | py3 = sys.version_info[0] == 3 |
| 10 | 10 | if py3: |
| 11 | 11 | str_instances = str |
| @@ -14,6 +14,7 @@ else: · 2 unmodified lines | ||
| 14 | 14 | str_instances = (str, unicode) |
| 15 | 15 | int_instances = (int, long) |
| 16 | 16 | |
| 17 | + | |
| 17 | 18 | def note2midi(note): |
| 18 | 19 | """Convert note name to midi note number. |
| 19 | 20 | |
| @@ -55,13 +56,14 @@ def note2midi(note): · 35 unmodified lines | ||
| 55 | 56 | -------- |
| 56 | 57 | midi2note, freqtomidi, miditofreq |
| 57 | 58 | """ |
| 58 | − _valid_notenames = {'C': 0, 'D': 2, 'E': 4, 'F': 5, 'G': 7, 'A': 9, 'B': 11} | |
| 59 | + _valid_notenames = {'C': 0, 'D': 2, 'E': 4, 'F': 5, 'G': 7, | |
| 60 | + 'A': 9, 'B': 11} | |
| 59 | 61 | _valid_modifiers = { |
| 60 | − u'𝄫': -2, # double flat | |
| 61 | − u'♭': -1, 'b': -1, '\u266d': -1, # simple flat | |
| 62 | − u'♮': 0, '\u266e': 0, None: 0, # natural | |
| 63 | − '#': +1, u'♯': +1, '\u266f': +1, # sharp | |
| 64 | − u'𝄪': +2, # double sharp | |
| 62 | + u'𝄫': -2, # double flat | |
| 63 | + u'♭': -1, 'b': -1, '\u266d': -1, # simple flat | |
| 64 | + u'♮': 0, '\u266e': 0, None: 0, # natural | |
| 65 | + '#': +1, u'♯': +1, '\u266f': +1, # sharp | |
| 66 | + u'𝄪': +2, # double sharp | |
| 65 | 67 | } |
| 66 | 68 | _valid_octaves = range(-1, 10) |
| 67 | 69 | if not isinstance(note, str_instances): |
| @@ -93,12 +95,13 @@ def note2midi(note): · 25 unmodified lines | ||
| 93 | 95 | if octave not in _valid_octaves: |
| 94 | 96 | raise ValueError("%s is not a valid octave" % octave) |
| 95 | 97 | |
| 96 | − midi = 12 + octave * 12 + _valid_notenames[notename] \ | |
| 97 | − + _valid_modifiers[modifier] | |
| 98 | + midi = (octave + 1) * 12 + _valid_notenames[notename] \ | |
| 99 | + + _valid_modifiers[modifier] | |
| 98 | 100 | if midi > 127: |
| 99 | 101 | raise ValueError("%s is outside of the range C-2 to G8" % note) |
| 100 | 102 | return midi |
| 101 | 103 | |
| 104 | + | |
| 102 | 105 | def midi2note(midi): |
| 103 | 106 | """Convert midi note number to note name. |
| 104 | 107 | |
| @@ -136,9 +139,10 @@ def midi2note(midi): · 31 unmodified lines | ||
| 136 | 139 | msg = "an integer between 0 and 127 is excepted, got {:d}" |
| 137 | 140 | raise ValueError(msg.format(midi)) |
| 138 | 141 | _valid_notenames = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', |
| 139 | − 'A', 'A#', 'B'] | |
| 142 | + 'A', 'A#', 'B'] | |
| 140 | 143 | return _valid_notenames[midi % 12] + str(int(midi / 12) - 1) |
| 141 | 144 | |
| 145 | + | |
| 142 | 146 | def freq2note(freq): |
| 143 | 147 | """Convert frequency in Hz to nearest note name. |
| 144 | 148 | |
| @@ -162,6 +166,7 @@ def freq2note(freq): · 17 unmodified lines | ||
| 162 | 166 | nearest_note = int(freqtomidi(freq) + .5) |
| 163 | 167 | return midi2note(nearest_note) |
| 164 | 168 | |
| 169 | + | |
| 165 | 170 | def note2freq(note): |
| 166 | 171 | """Convert note name to corresponding frequency, in Hz. |
| 167 | 172 | |