Example #1
0
	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)+"&register="+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)
Example #2
0
	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)
Example #3
0
	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") == []