Creating Scales

295 views
Skip to first unread message

Goatboy

unread,
Apr 26, 2009, 3:50:09 PM4/26/09
to Auduino
Peter! I've managed to create extra sets of scales within the code
that I'm then able to access with a button now but I was wondering how
you created the system of numbers that represent the chromatic scale!
Is this from a formula?
and is there a chart somewhere on the web to facilitate putting scales
together more easily from this system?

Thanks, Goatboy

Peter Knight

unread,
Apr 26, 2009, 4:37:23 PM4/26/09
to Auduino
You can save yourself some time by copying numbers from the midiTable
- which has MIDI pitches for all notes 0 - 127. Note 60 is middle C,
then it moves in semitones.

Mapping from frequency:
value = frequency(Hz) * 65536 / 31250

Mapping from MIDI note:
value = (65536 / 31250) * 440 * 2^((note-69)/12)

Those constants are:
65536: The counter for phase angle is 16 bits wide, so 65536 is one
full waveform cycle.
31250: Sample rate of the output in Hz.
440: Frequency of A above middle C. Most instruments standardise on
this being exactly 440Hz: "A440" tuning.
69: MIDI note of A above middle C.
12: Semitones in an octave
2: An octave note is a doubling of frequency.

Some worked examples:
A above middle C is 440Hz. Table entry is 440 * 65536 / 31500 =
922.75, so use the nearest whole number, "923".
Middle C is 261.63Hz. Table entry is: 261.625 * 65536 / 31250 =
548.67, so use "549".

You are limited to the values 1 (0.48Hz) to 32767 (15624.52Hz) -
although I doubt you want to be going up that high anyway! Past 32768,
pitch starts going down again.

Hope that helps!


Peter

Peter Knight

unread,
Apr 26, 2009, 4:38:48 PM4/26/09
to Auduino
Errata:

A above middle C is 440Hz. Table entry is 440 * 65536 / 31250 =
922.75, so use the nearest whole number, "923".

Goatboy

unread,
Apr 26, 2009, 4:41:33 PM4/26/09
to Auduino
Thanks very much for that Peter!!!
Reply all
Reply to author
Forward
0 new messages