Started following some tutorial on att85 usi. Downloaded example code from make avr book.
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
|
||||
## File to generate equal-tempered scale for use with DDS
|
||||
|
||||
|
||||
import math # because music is math
|
||||
|
||||
scale = ['C', 'Cx', 'D', 'Dx', 'E', 'F', 'Fx', 'G', 'Gx', 'A', 'Ax', 'B']
|
||||
|
||||
def octave(baseLength):
|
||||
pitches = [baseLength * math.exp(x*math.log(2)/12) for x in range(0, 12)]
|
||||
pitches = [int(round(x)) for x in pitches]
|
||||
return( zip(scale, pitches) )
|
||||
|
||||
|
||||
def writeScaleHeader(basePitch, octaves, filename="scale.h"):
|
||||
outfile = open(filename, "w")
|
||||
outfile.write('''/*
|
||||
|
||||
Scales for use with DDS synthesis.
|
||||
|
||||
Aimed roughly at having A2 be at 440Hz,
|
||||
when the chip is clocked at 8MHz and
|
||||
using 8-bit resolution on the PWM.
|
||||
|
||||
Tune it by tweaking basePitch.
|
||||
|
||||
*/
|
||||
|
||||
''')
|
||||
for i in range(0, octaves):
|
||||
for note, pitch in octave(basePitch * 2**i):
|
||||
if pitch < 30000:
|
||||
noteString = note + str(i)
|
||||
print("#define {:<5}{:>6}").format(noteString, pitch)
|
||||
outfile.write("#define {:<5}{:>6}\n".format(noteString, pitch))
|
||||
outfile.close()
|
||||
|
||||
######################################################################
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
writeScaleHeader(basePitch=130, octaves=5)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user