def createSong(self, name, notes, register, effect_echo, effect_tremolo, effect_perc, effect_chorus, effect_dist, effect_textttenv): name1 = name.encode('utf-8') notes1 = notes.encode('utf-8') con = sqlite3.connect('music.db') cur = con.cursor() pauta = interp(notes) if len(pauta) == 0: returnjson = '{"message": "The music '+ name + ' is not in the right format."}' else: #inserção na tabela musics o nome e a pauta introduzida pelo utilizador cur.execute('''INSERT INTO musics (name, stave) VALUES (?,?)''',(name1, notes1)) con.commit() cur.execute('''SELECT music_id FROM musics WHERE name LIKE ?''',(name1,)) musicid = cur.fetchall()[0][0] # Cria interpretação da música url = "http://"+cherrypy.server.socket_host+":8080/createInterpretation?musicid="+str(musicid)+"®ister="+str(register)+"&effect_echo="+effect_echo+"&effect_tremolo="+effect_tremolo+"&effect_perc="+effect_perc+"&effect_chorus="+effect_chorus+"&effect_dist="+effect_dist+"&effect_textttenv="+effect_textttenv+"" data = urllib2.urlopen(url).read() #criação de uma string com sintaxe que permite a codificação em JSON returnjson = '{"message": "The music '+ name + ' was sucessfully added."}' #codificação da variavel no formato JSON returnmessage = json.loads(returnjson) #definição do tipo de cabeçalho para a comunicaçao HTTP cherrypy.response.headers["Content-Type"] = "application/json" #devolução no formato JSON para comunicação com o Javascript return json.dumps(returnmessage)
def getWaveFile(self, interpretationid): con = sqlite3.connect('music.db') cur = con.cursor() #pesquisa pela pautae dados de uma música associada a uma interpretação especifica cur.execute('''SELECT stave, register, effect_echo, effect_tremolo, effect_perc, effect_chorus, effect_dist, effect_textttenv FROM musics, interpretations WHERE musics.music_id = interpretations.music_id and interp_id LIKE ?''', (interpretationid,)) # Guarda resultados da base de dados em variáveis getdb = cur.fetchall() stave = "" register = 0 effect_echo = "" effect_tremolo = "" effect_perc = "" effect_chorus = "" effect_dist = "" effect_textttenv = "" for i in getdb: stave = i[0] register = i[1] effect_echo = i[2] effect_tremolo = i[3] effect_perc = i[4] effect_chorus = i[5] effect_dist = i[6] effect_textttenv = i[7] # Adiciona os efeitos a uma lista para enviar para processador de efeitos effects = [] if not(effect_echo == "None"): effects.append("echo") if not(effect_tremolo == "None"): effects.append("tremolo") if not(effect_chorus == "None"): effects.append("chorus") if not(effect_dist == "None"): effects.append("dist") if not(effect_perc == "None"): effects.append("perc") if not(effect_textttenv == "None"): effects.append("textttenv") #chamado o interpretador de pautas notes = interp(stave) # Cria música sintetizador(notes, register, effects) # Retorna valor que indica que a música criada returnjson = '{"message":"'+'musics/song.wav'+'"}' #codificação da variavel no formato JSON returnmessage = json.loads(returnjson) #definição do tipo de cabeçalho para a comunicaçao HTTP cherrypy.response.headers["Content-Type"] = "application/json" #devolução no formato JSON para comunicação com o Javascript return json.dumps(returnmessage)
def getWaveForm(self, musicid): con = sqlite3.connect('music.db') cur = con.cursor() #pesquisa pela pauta de uma música associada a uma interpretação especifica cur.execute('''SELECT stave FROM musics WHERE music_id LIKE ?''', (musicid,)) #pauta guardada na variável notes stave=cur.fetchall()[0][0] #chamado o interpretador de stave notes = interp(stave) createForm(notes) #pauta da música depois de interpretada returnjson = '{"message":"'+'notes.png'+'"}' #codificação da variavel no formato JSON returnmessage = json.loads(returnjson) #definição do tipo de cabeçalho para a comunicaçao HTTP cherrypy.response.headers["Content-Type"] = "application/json" #devolução no formato JSON para comunicação com o Javascript return json.dumps(returnmessage)
def test_valido(): print "Testa comportamento com pautas válidas" assert interp("The Simpsons:d=4,o=5,b=160:c.6,e6,f#6,8a6,g.6,e6,c6,8a,8f#,8f#,8f#,2g,8p,8p,8f#,8f#,8f#,8g,a#.,8c6,8c6,8c6,c6") == [(0.5625, 262.0), (0.375, 330.0), (0.375, 370.0), (0.1875, 440.0), (0.5625, 392.0), (0.375, 330.0), (0.375, 262.0), (0.1875, 220.0), (0.1875, 185.0), (0.1875, 185.0), (0.1875, 185.0), (0.75, 196.0), (0.1875, 0.0), (0.1875, 0.0), (0.1875, 185.0), (0.1875, 185.0), (0.1875, 185.0), (0.1875, 196.0), (0.5625, 233.0), (0.1875, 262.0), (0.1875, 262.0), (0.1875, 262.0), (0.375, 262.0)] assert interp("IWantItThatWay:d=16,o=5,b=25:32p,32g,8a#.,d6,g.,f.,32g,8a#.,d6,g.,c.6,32g,8a#.,d6,g.,8f.,g.,a#.,d6,c6,32a#,a#") == [(0.3, 0.0), (0.3, 196.0), (1.7999999999999998, 233.0), (0.6, 294.0), (0.8999999999999999, 196.0), (0.8999999999999999, 175.0), (0.3, 196.0), (1.7999999999999998, 233.0), (0.6, 294.0), (0.8999999999999999, 196.0), (0.8999999999999999, 262.0), (0.3, 196.0), (1.7999999999999998, 233.0), (0.6, 294.0), (0.8999999999999999, 196.0), (1.7999999999999998, 175.0), (0.8999999999999999, 196.0), (0.8999999999999999, 233.0), (0.6, 294.0), (0.6, 262.0), (0.3, 233.0), (0.6, 233.0)] assert interp("DGenerationX:d=4,o=6,b=160:8e5,8p,8e5,d,8e,8e,8e,8e,8e5,8e5,8e5,8d,p,16p,8e5,8p,8e5,8b5,8b5,8c,8c,b5,e5,8e,8d,e.,b.5,c,f5,8g5,8f5,e5,8e,8d,e,8p,c.,b5,2g5,16f5,e5,8e,8d,e.,b.5,c,f5,8g5,8f5,e5") == [(0.1875, 165.0), (0.1875, 0.0), (0.1875, 165.0), (0.375, 294.0), (0.1875, 330.0), (0.1875, 330.0), (0.1875, 330.0), (0.1875, 330.0), (0.1875, 165.0), (0.1875, 165.0), (0.1875, 165.0), (0.1875, 294.0), (0.375, 0.0), (0.09375, 0.0), (0.1875, 165.0), (0.1875, 0.0), (0.1875, 165.0), (0.1875, 247.0), (0.1875, 247.0), (0.1875, 262.0), (0.1875, 262.0), (0.375, 247.0), (0.375, 165.0), (0.1875, 330.0), (0.1875, 294.0), (0.5625, 330.0), (0.5625, 247.0), (0.375, 262.0), (0.375, 175.0), (0.1875, 196.0), (0.1875, 175.0), (0.375, 165.0), (0.1875, 330.0), (0.1875, 294.0), (0.375, 330.0), (0.1875, 0.0), (0.5625, 262.0), (0.375, 247.0), (0.75, 196.0), (0.09375, 175.0), (0.375, 165.0), (0.1875, 330.0), (0.1875, 294.0), (0.5625, 330.0), (0.5625, 247.0), (0.375, 262.0), (0.375, 175.0), (0.1875, 196.0), (0.1875, 175.0), (0.375, 165.0)]
def test_invalido(): print "Testa comportamento com pautas inválidas" assert interp("The Simpsons:e6,f#6,8a6,g.6") == [] assert interp("The Simpsons:d=4,o=5,b=160:c.6,e6,f#6,86") == [] assert interp("The Simpsons:d=4,o=9,b=160:c.6,e6,f#6,86") == []