42 lines
972 B
Python
42 lines
972 B
Python
"""
|
|
Niveau 4
|
|
Jouer des accords
|
|
|
|
Ne pas introduire le facteur d'amplitude avant d'avoir entendu le résultat sans lui
|
|
"""
|
|
|
|
import synthlib, math, sys
|
|
|
|
music = synthlib.midi()
|
|
|
|
active = {}
|
|
wait = 0
|
|
tt = 0
|
|
t = 0
|
|
loop = True
|
|
|
|
sound_encoder = synthlib.SoundEncoder()
|
|
while loop:
|
|
if wait == 0:
|
|
while True:
|
|
event = music[tt]
|
|
tt += 1
|
|
if event.type == synthlib.Note:
|
|
if event.velocity == 0:
|
|
if event.number in active:
|
|
active.pop(event.number)
|
|
sys.stderr.write("pop "+str(event.number)+"\n")
|
|
else:
|
|
active[event.number] = event.velocity
|
|
sys.stderr.write(str(event.velocity)+" "+str(event.number)+" ("+str(len(active))+")\n")
|
|
elif event.type == synthlib.Wait:
|
|
wait = int(event.value*8000)
|
|
break
|
|
elif event.type == synthlib.End:
|
|
loop = False
|
|
break
|
|
else:
|
|
wait -= 1
|
|
|
|
sound_encoder.write_sample(sum([active[number]*math.sin(t/16000*440*2**(number/12)*2*math.pi) for number in active])/max(1,len(active)))
|
|
t += 1
|