As we go up the musical scale the note frequency increases;
#define A4 440 // These are the frequencies of the notes in herts
#define AS4 466
#define B4 494
#define C5 523
#define CS5 554
#define D5 587
I am generating the tones mechanically, I tell a step motor to step, delay, step, delay etc etc very quickly.
The longer the delay between steps, the lower the note. Is there some smart maths I could use to inverse the frequencies so as I climb up the scale the numbers come out lower and lower?
This way I could use the frequencies to help calculate the correct delay to generate a note.
So what you’re saying is you want the numbers to represent the time between steps rather than a frequency?
440 Hz means 440 cycles/second. What you want is the number of seconds/cycle (i.e. time between steps). That’s just
1 / <frequency>. That means all you have to do is define your values as1/440,1/466, etc. (or, if you want the values to be milliseconds,1000/440,1000/466etc.)If that is too fast (or doesn’t match the actual notes), you can multiply each value by a scale factor and the relationships between the audible tones should remain the same.
For example, lets say that you empirically discover that for your machine to make an “A4” tone, the delay between steps is 10 milliseconds. To figure out the scale factor, solve for x:
So define
scale = 4400, and define each of your notes asscale / 440,scale / 466etc.