""" 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