SRC: Music Synthesizer written in 100% Python
Tyler Eaves
tyler at tylereaves.com
Sun Aug 27 19:33:04 EDT 2000
#Done By Tyler Eaves
#tyler at tylereaves.com
import wave,math
f=wave.open('C:\\windows\\desktop\\test.wav','w')
f.setnchannels(1)
f.setsampwidth(1)
f.setframerate(44100)
f.setcomptype('NONE','Not Compressed')
#This is where the note information is stored.
#Format [['Note',length]]
#Where note is a string containg one of the following notes:
#A,B-,B,C,D-,D,E-,E,F,G-,G
#- Means Flat For sharps just ue the flat of one note higher
#Where length is a number:
#1=Whole Note 2=Half Note 4=Quater Note etc
song=[['C5',4],['D5',4],['E5',4],['F5',4],['G5',4],['A6',4],['B6',4],['C6',4]]
def length(l):
return 88200*(1.0/l)
def waves(hz,l):
a=float(88200.0)/hz
b=l/(float(88200.0)/(hz))
return [a,int(b)]
def sixteenbit(x):
y1=""
x=x+1
x=x*128
x=int(x)
#y1=chr(x/256)
#x=x-((x/256)*256)
return chr(x)
def asin(x):
x=x*360
x=(float(x)/180)*3.145
return math.sin(x)
def render(p,w,l):
ow=""
a=0
for x in range(l[0])[:]:
a=x
ow=ow+sixteenbit((asin(float(x)/l[0])+asin(float(x)/(l[0]/2.0))+asin(float(x)/(l[0]/4.0)))/3.0)
print str(a)
f.writeframesraw((ow*l[1])+(sixteenbit(0)*1000))
def pitchhz(note):
if note=="A0":
return 13.75
if note=="A1":
return 27.5
if note=="A2":
return 55.0
if note=="A3":
return 110.0
if note=="A4":
return 220.0
if note=="A5":
return 440.0
if note=="A6":
return 880.0
if note=="A7":
return 1760.0
if note=="A8":
return 3520.0
if note=="A9":
return 7040.0
if note=="A10":
return 14080.0
if note=="B-0":
return 14.567625
if note=="B-1":
return 29.13525
if note=="B-2":
return 58.2705
if note=="B-3":
return 116.541
if note=="B-4":
return 233.082
if note=="B-5":
return 466.164
if note=="B-6":
return 932.328
if note=="B-7":
return 1864.656
if note=="B-8":
return 3729.312
if note=="B-9":
return 7458.624
if note=="B-10":
return 14917.248
if note=="B0":
return 15.43384375
if note=="B1":
return 30.8676875
if note=="B2":
return 61.735375
if note=="B3":
return 123.47075
if note=="B4":
return 246.9415
if note=="B5":
return 493.883
if note=="B6":
return 987.766
if note=="B7":
return 1975.532
if note=="B8":
return 3951.064
if note=="B9":
return 7902.128
if note=="B10":
return 15804.256
if note=="C0":
return 16.35159375
if note=="C1":
return 32.7031875
if note=="C2":
return 65.406375
if note=="C3":
return 130.81275
if note=="C4":
return 261.6255
if note=="C5":
return 523.251
if note=="C6":
return 1046.502
if note=="C7":
return 2093.004
if note=="C8":
return 4186.008
if note=="C9":
return 8372.016
if note=="C10":
return 16744.032
if note=="D-0":
return 17.32390625
if note=="D-1":
return 34.6478125
if note=="D-2":
return 69.295625
if note=="D-3":
return 138.59125
if note=="D-4":
return 277.1825
if note=="D-5":
return 554.365
if note=="D-6":
return 1108.73
if note=="D-7":
return 2217.46
if note=="D-8":
return 4434.92
if note=="D-9":
return 8869.84
if note=="D-10":
return 17739.68
if note=="D0":
return 18.3540625
if note=="D1":
return 36.708125
if note=="D2":
return 73.41625
if note=="D3":
return 146.8325
if note=="D4":
return 293.665
if note=="D5":
return 587.33
if note=="D6":
return 1174.66
if note=="D7":
return 2349.32
if note=="D8":
return 4698.64
if note=="D9":
return 9397.28
if note=="D10":
return 18794.56
if note=="E-0":
return 19.4454375
if note=="E-1":
return 38.890875
if note=="E-2":
return 77.78175
if note=="E-3":
return 155.5635
if note=="E-4":
return 311.127
if note=="E-5":
return 622.254
if note=="E-6":
return 1244.508
if note=="E-7":
return 2489.016
if note=="E-8":
return 4978.032
if note=="E-9":
return 9956.064
if note=="E-10":
return 19912.128
if note=="E0":
return 20.60171875
if note=="E1":
return 41.2034375
if note=="E2":
return 82.406875
if note=="E3":
return 164.81375
if note=="E4":
return 329.6275
if note=="E5":
return 659.255
if note=="E6":
return 1318.51
if note=="E7":
return 2637.02
if note=="E8":
return 5274.04
if note=="E9":
return 10548.08
if note=="E10":
return 21096.16
if note=="F0":
return 21.82675
if note=="F1":
return 43.6535
if note=="F2":
return 87.307
if note=="F3":
return 174.614
if note=="F4":
return 349.228
if note=="F5":
return 698.456
if note=="F6":
return 1396.912
if note=="F7":
return 2793.824
if note=="F8":
return 5587.648
if note=="F9":
return 11175.296
if note=="F10":
return 22350.592
if note=="G-0":
return 23.12465625
if note=="G-1":
return 46.2493125
if note=="G-2":
return 92.498625
if note=="G-3":
return 184.99725
if note=="G-4":
return 369.9945
if note=="G-5":
return 739.989
if note=="G-6":
return 1479.978
if note=="G-7":
return 2959.956
if note=="G-8":
return 5919.912
if note=="G-9":
return 11839.824
if note=="G-10":
return 23679.648
if note=="G0":
return 24.49971875
if note=="G1":
return 48.9994375
if note=="G2":
return 97.998875
if note=="G3":
return 195.99775
if note=="G4":
return 391.9955
if note=="G5":
return 783.991
if note=="G6":
return 1567.982
if note=="G7":
return 3135.964
if note=="G8":
return 6271.928
if note=="G9":
return 12543.856
if note=="G10":
return 25087.712
if note=="A-0":
return 25.95653125
if note=="A-1":
return 51.9130625
if note=="A-2":
return 103.826125
if note=="A-3":
return 207.65225
if note=="A-4":
return 415.3045
if note=="A-5":
return 830.609
if note=="A-6":
return 1661.218
if note=="A-7":
return 3322.436
if note=="A-8":
return 6644.872
if note=="A-9":
return 13289.744
if note=="A-10":
return 26579.488
for x in song[:]:
if x[0]!='R':
a=pitchhz(x[0])
b=length(x[1])
c=waves(a,b)
if x[0]=='R':
b=length(x[1])
b=b/2.0
f.writeframesraw(sixteenbit(0)*int(b))
print "Rendering Note...."
render(a,b,c)
f.writeframes('')
f.close()
-----End Source---------
---
Tyler Eaves
Visit Ultra Coaster Central!
The internet's largest repository
of Ultra Coaster Tracks!
http://www.tylereaves.com/uc/
-----= Posted via Newsfeeds.Com, Uncensored Usenet News =-----
http://www.newsfeeds.com - The #1 Newsgroup Service in the World!
-----== Over 80,000 Newsgroups - 16 Different Servers! =-----
More information about the Python-list
mailing list