import math, wave, struct SR=48000 # Proporcoes medidas nas referencias: fundamental, oitava, 3o, 4o HARM=(1.00, 0.85, 0.10, 0.02) TAU=0.19 # decaimento a 1/e medido ATTACK=0.004 def note(f, dur): n=int(SR*dur); o=[] for i in range(n): t=i/SR s=sum(a*math.sin(2*math.pi*f*(k+1)*t) for k,a in enumerate(HARM)) o.append(s*min(1.0,t/ATTACK)*math.exp(-t/TAU)) return o def mix(layers,total): b=[0.0]*total for off,s in layers: for i,v in enumerate(s): if off+i0.97: g*=0.97/pk with wave.open(name,'w') as w: w.setnchannels(1); w.setsampwidth(2); w.setframerate(SR) w.writeframes(b''.join(struct.pack('