def sintetizador(data, reg, effects):
    # Se registo não tiver 9 algarismos, lança exceção.
    # Se algum algarismo não estiver entre 0 e 8, lança exceção
    if len(str(reg))!=9:
        raise Exception
    for i in str(reg):
        if int(i)<0 or int(i)>8:
            raise Exception

    enddata = []
    rate = 44100.0    #frequência de amostragem
    amplitude = 32767 #valor maximo definido pelo numero max de bits por sample
    mult = [1/2, 2/3, 1, 2, 3, 4, 5, 6, 8]

    for j in data:      #A Formula desta funcao encontra-se no relatorio sob o Capitulo Sintetizador
        frame = []
        info = {}
        duration = j[0]
        freq = j[1]
        i=1
        while i < rate*duration:
            frame.append(amplitude*(int(str(reg)[0])/8.0)*math.sin(2.0*math.pi*(freq*mult[0])*i/rate)+
                         amplitude*(int(str(reg)[1])/8.0)*math.sin(2.0*math.pi*(freq*mult[1])*i/rate)+
                         amplitude*(int(str(reg)[2])/8.0)*math.sin(2.0*math.pi*(freq*mult[2])*i/rate)+
                         amplitude*(int(str(reg)[3])/8.0)*math.sin(2.0*math.pi*(freq*mult[3])*i/rate)+
                         amplitude*(int(str(reg)[4])/8.0)*math.sin(2.0*math.pi*(freq*mult[4])*i/rate)+
                         amplitude*(int(str(reg)[5])/8.0)*math.sin(2.0*math.pi*(freq*mult[5])*i/rate)+
                         amplitude*(int(str(reg)[6])/8.0)*math.sin(2.0*math.pi*(freq*mult[6])*i/rate)+
                         amplitude*(int(str(reg)[7])/8.0)*math.sin(2.0*math.pi*(freq*mult[7])*i/rate)+
                         amplitude*(int(str(reg)[8])/8.0)*math.sin(2.0*math.pi*(freq*mult[8])*i/rate))
            i+=1
        frame = normalize(frame)
        info['freq'] = j[1]
        info['samples'] = frame
        enddata.append(info)

    return create_wav_file(enddata, effects)
#para guardar em json a musica, para quando for preciso criar uma nova interpretação
outfile = open('musica.json', 'w')
json.dump(pairs, outfile)
outfile.close()

#interpretador de pautas ====> sintetizador 

#para abrir o ficheiro json da musica (neste caso, a que se acabou de guardar), para criar uma interpretação
infile = open('musica.json', 'r')
content = infile.read()
pairs = json.loads(content)

sounds = generate_sounds(pairs, '888888888')

#sintetizador ====> processador de efeitos
create_wav_file('test1.wav', sounds, 'none')


##############################################
#     de um modo mais rápido poderia ser:    #
##############################################
    
pairs = generate_pairs(pauta2)
sounds = generate_sounds(pairs, '888888888')
create_wav_file('test2.wav', sounds, 'none')

##############################################
#            ou ainda (à pro):               #
##############################################

create_wav_file('test3.wav', generate_sounds(generate_pairs(pauta3), '888888888'), 'echo')