1 #include "mozzi_midi.h" 25 if(midival) f = 8.1757989156 * pow(2.0, midival/12.0);
97 static const uint32_t __attribute__((section(
".progmem.data"))) midiToFreq[128] =
99 0, 567670, 601425, 637188, 675077, 715219, 757748, 802806, 850544, 901120,
100 954703, 1011473, 1071618, 1135340, 1202851, 1274376, 1350154, 1430438, 1515497,
101 1605613, 1701088, 1802240, 1909406, 2022946, 2143236, 2270680, 2405702, 2548752,
102 2700309, 2860877, 3030994, 3211226, 3402176, 3604479, 3818813, 4045892, 4286472,
103 4541359, 4811404, 5097504, 5400618, 5721756, 6061988, 6422452, 6804352, 7208959,
104 7637627, 8091785, 8572945, 9082719, 9622808, 10195009, 10801235, 11443507,
105 12123974, 12844905, 13608704, 14417917, 15275252, 16183563, 17145888, 18165438,
106 19245616, 20390018, 21602470, 22887014, 24247948, 25689810, 27217408, 28835834,
107 30550514, 32367136, 34291776, 36330876, 38491212, 40780036, 43204940, 45774028,
108 48495912, 51379620, 54434816, 57671668, 61101028, 64734272, 68583552, 72661752,
109 76982424, 81560072, 86409880, 91548056, 96991792, 102759240, 108869632,
110 115343336, 122202056, 129468544, 137167104, 145323504, 153964848, 163120144,
111 172819760, 183096224, 193983648, 205518336, 217739200, 230686576, 244403840,
112 258937008, 274334112, 290647008, 307929696, 326240288, 345639520, 366192448,
113 387967040, 411036672, 435478400, 461373152, 488807680, 517874016, 548668224,
114 581294016, 615859392, 652480576, 691279040, 732384896, 775934592, 822073344
134 uint8_t index = midival_fractional >> 16;
135 uint16_t fraction = (uint16_t) midival_fractional;
136 Q16n16 freq1 = (
Q16n16) pgm_read_dword(midiToFreq + index);
137 Q16n16 freq2 = (
Q16n16) pgm_read_dword((midiToFreq + 1) + index);
138 Q16n16 difference = freq2 - freq1;
139 if (difference>=65536)
141 diff_fraction = ((difference>>8) * fraction) >> 8;
145 diff_fraction = (difference * fraction) >> 16;
147 return (
Q16n16) (freq1+ diff_fraction);
156 return (
int) (pgm_read_dword(midiToFreq + midi_note) >> 16);
166 return (
int) (pgm_read_dword(midiToFreq + midi_note) >> 16);
Q16n16 Q16n16_mtof(Q16n16 midival_fractional)
Converts midi note number to frequency with speed and accuracy.
float mtof(float midival)
Converts midi note number to frequency.
uint32_t Q16n16
unsigned fractional number using 16 integer bits and 16 fractional bits, represents 0 to 65535...