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