arduino-audio-tools
Loading...
Searching...
No Matches
MusicalNotes.h
Go to the documentation of this file.
1
5#pragma once
6
7#define N_C0 16.35f
8#define N_CS0 17.32f
9#define N_D0 18.35f
10#define N_DS0 19.45f
11#define N_E0 20.60f
12#define N_F0 21.83f
13#define N_FS0 23.12f
14#define N_G0 24.50f
15#define N_GS0 25.96f
16#define N_A0 27.50f
17#define N_AS0 29.14f
18#define N_B0 30.87f
19#define N_C1 32.70f
20#define N_CS1 34.65f
21#define N_D1 36.71f
22#define N_DS1 38.89f
23#define N_E1 41.20f
24#define N_F1 43.65f
25#define N_FS1 46.25f
26#define N_G1 49.00f
27#define N_GS1 51.91f
28#define N_A1 55.00f
29#define N_AS1 58.27f
30#define N_B1 61.74f
31#define N_C2 65.41f
32#define N_CS2 69.30f
33#define N_D2 73.42f
34#define N_DS2 77.78f
35#define N_E2 82.41f
36#define N_F2 87.31f
37#define N_FS2 92.50f
38#define N_G2 98.00f
39#define N_GS2 103.83f
40#define N_A2 110.00f
41#define N_AS2 116.54f
42#define N_B2 123.47f
43#define N_C3 130.81f
44#define N_CS3 138.59f
45#define N_D3 146.83f
46#define N_DS3 155.56f
47#define N_E3 164.81f
48#define N_F3 174.61f
49#define N_FS3 185.00f
50#define N_G3 196.00f
51#define N_GS3 207.65f
52#define N_A3 220.00f
53#define N_AS3 233.08f
54#define N_B3 246.94f
55#define N_C4 261.63f
56#define N_CS4 277.18f
57#define N_D4 293.66f
58#define N_DS4 311.13f
59#define N_E4 329.63f
60#define N_F4 349.23f
61#define N_FS4 369.99f
62#define N_G4 392.00f
63#define N_GS4 415.30f
64#define N_A4 440.00f
65#define N_AS4 466.16f
66#define N_B4 493.88f
67#define N_C5 523.25f
68#define N_CS5 554.37f
69#define N_D5 587.33f
70#define N_DS5 622.25f
71#define N_E5 659.25f
72#define N_F5 698.46f
73#define N_FS5 739.99f
74#define N_G5 783.99f
75#define N_GS5 830.61f
76#define N_A5 880.00f
77#define N_AS5 932.33f
78#define N_B5 987.77f
79#define N_C6 1046.5f
80#define N_CS6 1108.73f
81#define N_D6 1174.66f
82#define N_DS6 1244.51f
83#define N_E6 1318.51f
84#define N_F6 1396.91f
85#define N_FS6 1479.89f
86#define N_G6 1567.89f
87#define N_GS6 1661.22f
88#define N_A6 1760.00f
89#define N_AS6 1864.66f
90#define N_B6 1975.53f
91#define N_C7 2093.00f
92#define N_CS7 2217.46f
93#define N_D7 2349.32f
94#define N_DS7 2489.02f
95#define N_E7 2637.02f
96#define N_F7 2793.83f
97#define N_FS7 2959.96f
98#define N_G7 3135.96f
99#define N_GS7 3322.44f
100#define N_A7 3520.00f
101#define N_AS7 3729.31f
102#define N_B7 3951.07f
103#define N_C8 4186.01f
104#define N_CS8 4434.92f
105#define N_D8 4698.63f
106#define N_DS8 4978.03f
107#define N_E8 5274.04f
108#define N_F8 5587.65f
109#define N_FS8 5919.91f
110#define N_G8 6271.93f
111#define N_GS8 6644.88f
112#define N_A8 7040.00f
113#define N_AS8 7458.62f
114#define N_B8 7902.13f
115
116namespace audio_tools {
117
126public:
128 enum MusicalNotesEnum {C, CS, D, DS, E, F, FS, G, GS, A, AS, B};
129
132 if (note>11) return 0;
133 if (octave>8) return 0;
134 return notes[octave][note];
135 }
136
138 float frequency(uint16_t idx) const {
140 uint8_t octave = idx / 12;
141 return frequency(mainNote, octave);
142 }
143
144 int frequencyCount() const {
145 return 108;
146 }
147
150 if (mainNoteIdx>6) return 0;
151 static int mainNotes[] = {0,2,4,5,7,9,11};
153 return frequency(note, octave);
154 }
155
157 float mainFrequency(uint64_t idx) const {
158 uint8_t mainNote = idx % 7;
159 uint8_t level = idx /7;
160 return mainFrequency(mainNote, level);
161 }
162
164 bool isAudible(float frequency) const {
165 return frequency >= 20 && frequency<=20000;
166 }
167
169 const char* note(float frequency, float &diff) const {
170 float* all_notes = (float*) notes;
171 const int note_count = 12*9;
172
173 // find closest note
174 float min_diff = frequency;
175 int min_pos = 0;
176 for (int j=0; j<note_count; j++){
177 int tmp = abs(frequency - all_notes[j]);
178 if (tmp<min_diff){
179 min_diff = tmp;
180 min_pos = j;
181 }
182 }
183
186 return notes_str[min_pos];
187 }
188
190 const char* note(float frequency) const {
191 float diff;
192 return note(frequency, diff);
193 }
194
196 const char* noteAt(int idx) {
197 return notes_str[idx];
198 }
199
201 float midiNoteToFrequency(int x) const {
202 float a = 440.0f; //frequency of A (coomon value is 440Hz)
203 return (a / 32.0f) * powf(2.0f, ((x - 9) / 12.0f));
204 }
205
207 int frequencyToMidiNote(float freq) const {
208 return logf(freq/440.0f)/logf(2) * 12.0f + 69.0f;
209 }
210
212 return 220.0f * powf( 2.0f, (noteNumber - 57.0f) / 12.0f );
213 }
214
215protected:
216
228
229 const char *notes_str[9*12]= {
230 "C0","CS0","D0","DS0","E0","F0","FS0","G0","GS0","A0","AS0","B0",
231 "C1","CS1","D1","DS1","E1","F1","FS1","G1","GS1","A1","AS1","B1",
232 "C2","CS2","D2","DS2","E2","F2","FS2","G2","GS2","A2","AS2","B2",
233 "C3","CS3","D3","DS3","E3","F3","FS3","G3","GS3","A3","AS3","B3",
234 "C4","CS4","D4","DS4","E4","F4","FS4","G4","GS4","A4","AS4","B4",
235 "C5","CS5","D5","DS5","E5","F5","FS5","G5","GS5","A5","AS5","B5",
236 "C6","CS6","D6","DS6","E6","F6","FS6","G6","GS6","A6","AS6","B6",
237 "C7","CS7","D7","DS7","E7","F7","FS7","G7","GS7","A7","AS7","B7",
238 "C8","CS8","D8","DS8","E8","F8","FS8","G8","GS8","A8","AS8","B8"
239 };
240
241
242};
243
244}
245
#define N_G0
Definition MusicalNotes.h:14
#define N_B6
Definition MusicalNotes.h:90
#define N_DS2
Definition MusicalNotes.h:34
#define N_DS4
Definition MusicalNotes.h:58
#define N_GS3
Definition MusicalNotes.h:51
#define N_C4
Definition MusicalNotes.h:55
#define N_B4
Definition MusicalNotes.h:66
#define N_E7
Definition MusicalNotes.h:95
#define N_GS0
Definition MusicalNotes.h:15
#define N_AS6
Definition MusicalNotes.h:89
#define N_F5
Definition MusicalNotes.h:72
#define N_GS5
Definition MusicalNotes.h:75
#define N_D2
Definition MusicalNotes.h:33
#define N_AS7
Definition MusicalNotes.h:101
#define N_A2
Definition MusicalNotes.h:40
#define N_A4
Definition MusicalNotes.h:64
#define N_A7
Definition MusicalNotes.h:100
#define N_E1
Definition MusicalNotes.h:23
#define N_E8
Definition MusicalNotes.h:107
#define N_B2
Definition MusicalNotes.h:42
#define N_AS0
Definition MusicalNotes.h:17
#define N_FS6
Definition MusicalNotes.h:85
#define N_D7
Definition MusicalNotes.h:93
#define N_B3
Definition MusicalNotes.h:54
#define N_FS5
Definition MusicalNotes.h:73
#define N_G1
Definition MusicalNotes.h:26
#define N_G3
Definition MusicalNotes.h:50
#define N_FS3
Definition MusicalNotes.h:49
#define N_GS4
Definition MusicalNotes.h:63
#define N_D5
Definition MusicalNotes.h:69
#define N_E4
Definition MusicalNotes.h:59
#define N_F4
Definition MusicalNotes.h:60
#define N_D1
Definition MusicalNotes.h:21
#define N_F7
Definition MusicalNotes.h:96
#define N_GS2
Definition MusicalNotes.h:39
#define N_CS7
Definition MusicalNotes.h:92
#define N_AS1
Definition MusicalNotes.h:29
#define N_AS5
Definition MusicalNotes.h:77
#define N_AS2
Definition MusicalNotes.h:41
#define N_GS6
Definition MusicalNotes.h:87
#define N_A6
Definition MusicalNotes.h:88
#define N_B7
Definition MusicalNotes.h:102
#define N_F8
Definition MusicalNotes.h:108
#define N_AS8
Definition MusicalNotes.h:113
#define N_DS1
Definition MusicalNotes.h:22
#define N_A1
Definition MusicalNotes.h:28
#define N_GS8
Definition MusicalNotes.h:111
#define N_D8
Definition MusicalNotes.h:105
#define N_CS4
Definition MusicalNotes.h:56
#define N_G2
Definition MusicalNotes.h:38
#define N_AS3
Definition MusicalNotes.h:53
#define N_DS6
Definition MusicalNotes.h:82
#define N_A3
Definition MusicalNotes.h:52
#define N_G7
Definition MusicalNotes.h:98
#define N_DS0
Definition MusicalNotes.h:10
#define N_E2
Definition MusicalNotes.h:35
#define N_E6
Definition MusicalNotes.h:83
#define N_CS0
Definition MusicalNotes.h:8
#define N_FS4
Definition MusicalNotes.h:61
#define N_B8
Definition MusicalNotes.h:114
#define N_G6
Definition MusicalNotes.h:86
#define N_F0
Definition MusicalNotes.h:12
#define N_G8
Definition MusicalNotes.h:110
#define N_CS6
Definition MusicalNotes.h:80
#define N_F2
Definition MusicalNotes.h:36
#define N_C7
Definition MusicalNotes.h:91
#define N_E0
Definition MusicalNotes.h:11
#define N_D6
Definition MusicalNotes.h:81
#define N_AS4
Definition MusicalNotes.h:65
#define N_CS3
Definition MusicalNotes.h:44
#define N_C5
Definition MusicalNotes.h:67
#define N_C0
Definition MusicalNotes.h:7
#define N_B0
Definition MusicalNotes.h:18
#define N_CS1
Definition MusicalNotes.h:20
#define N_C8
Definition MusicalNotes.h:103
#define N_DS5
Definition MusicalNotes.h:70
#define N_CS8
Definition MusicalNotes.h:104
#define N_FS8
Definition MusicalNotes.h:109
#define N_FS1
Definition MusicalNotes.h:25
#define N_GS7
Definition MusicalNotes.h:99
#define N_FS0
Definition MusicalNotes.h:13
#define N_G5
Definition MusicalNotes.h:74
#define N_DS3
Definition MusicalNotes.h:46
#define N_GS1
Definition MusicalNotes.h:27
#define N_A0
Definition MusicalNotes.h:16
#define N_D0
Definition MusicalNotes.h:9
#define N_CS5
Definition MusicalNotes.h:68
#define N_DS8
Definition MusicalNotes.h:106
#define N_CS2
Definition MusicalNotes.h:32
#define N_B5
Definition MusicalNotes.h:78
#define N_F3
Definition MusicalNotes.h:48
#define N_C6
Definition MusicalNotes.h:79
#define N_F6
Definition MusicalNotes.h:84
#define N_A8
Definition MusicalNotes.h:112
#define N_E5
Definition MusicalNotes.h:71
#define N_A5
Definition MusicalNotes.h:76
#define N_FS2
Definition MusicalNotes.h:37
#define N_G4
Definition MusicalNotes.h:62
#define N_E3
Definition MusicalNotes.h:47
#define N_F1
Definition MusicalNotes.h:24
#define N_D4
Definition MusicalNotes.h:57
#define N_DS7
Definition MusicalNotes.h:94
#define N_D3
Definition MusicalNotes.h:45
#define N_C1
Definition MusicalNotes.h:19
#define N_C3
Definition MusicalNotes.h:43
#define N_B1
Definition MusicalNotes.h:30
#define N_C2
Definition MusicalNotes.h:31
#define N_FS7
Definition MusicalNotes.h:97
Determination of the frequency of a music note.
Definition MusicalNotes.h:125
float frequency(MusicalNotesEnum note, uint8_t octave) const
Determines the frequency of the indicate note and octave (0-8)
Definition MusicalNotes.h:131
int frequencyCount() const
Definition MusicalNotes.h:144
float midiNoteToFrequency(int x) const
Determine frequency of MIDI note.
Definition MusicalNotes.h:201
float notes[9][12]
Definition MusicalNotes.h:217
const char * noteAt(int idx)
Provides the note name for an index position.
Definition MusicalNotes.h:196
bool isAudible(float frequency) const
Returns true if the frequency is audible (in the range of 20 Hz to 20 kHz)
Definition MusicalNotes.h:164
const char * note(float frequency) const
Determines the closes note for a frequency.
Definition MusicalNotes.h:190
int frequencyToMidiNote(float freq) const
Provide MIDI note for frequency.
Definition MusicalNotes.h:207
float stkNoteToFrequency(int noteNumber) const
Definition MusicalNotes.h:211
float mainFrequency(uint8_t mainNoteIdx, uint8_t octave) const
Determines the frequency of the indicate main note index (0-6) and octave (0-8)
Definition MusicalNotes.h:149
const char * notes_str[9 *12]
Definition MusicalNotes.h:229
const char * note(float frequency, float &diff) const
Determines the closes note for a frequency. We also return the frequency difference.
Definition MusicalNotes.h:169
float frequency(uint16_t idx) const
Determines the frequency of the indicate note index from 0 to 107.
Definition MusicalNotes.h:138
float mainFrequency(uint64_t idx) const
Determines the frequency of the indicate main note index from 0 to 62.
Definition MusicalNotes.h:157
MusicalNotesEnum
Notes.
Definition MusicalNotes.h:128
@ AS
Definition MusicalNotes.h:128
@ G
Definition MusicalNotes.h:128
@ B
Definition MusicalNotes.h:128
@ A
Definition MusicalNotes.h:128
@ FS
Definition MusicalNotes.h:128
@ C
Definition MusicalNotes.h:128
@ D
Definition MusicalNotes.h:128
@ CS
Definition MusicalNotes.h:128
@ GS
Definition MusicalNotes.h:128
@ E
Definition MusicalNotes.h:128
@ DS
Definition MusicalNotes.h:128
@ F
Definition MusicalNotes.h:128
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioCodecsBase.h:10
size_t writeData(Print *p_out, T *data, int samples, int maxSamples=512)
Definition AudioTypes.h:512