Commit 96958ed5 authored by Jan Luc Tavares's avatar Jan Luc Tavares
Browse files

realizadas alterações na legibilidade do codigo e funcionalidade de --ajuda

parent efca7958
# trecho para funcionar no spyder (comentar)
#import os
# Para meu computador:
#os.chdir('/home/jan/doGit/SMI/')
import sys
if len(sys.argv) < 2:
import os
home = os.path.expanduser("~")
os.chdir(str(home + "/doGit/SMI/"))
import numpy as np
import lib.gerenciaArquivos as ga
inicia_do_minimo = True
consolidados = True
# 1. Configuracao de entrada e saida:
########################################################
########### Obtendo os dados da estacao ################
########################################################
# Detalhes do input e output
nome_dados = 'SaoPaulo'
input_data = './data/{}.dat'.format(nome_dados)
local_resultados = "./Sonificacoes_e_graficos/"
sel_Start = [2017,9, 5,00,00,00]
# Padrões:
inicia_do_minimo = True
consolidados = False
nota = "G4"
estacao = 'PortoAlegre'
sample_duration = 2. # seconds
sample_rate = 48000 # Hz
# Ano, mes, dia, hora, minuto, segundo
sel_End = [2017,9, 5,23,59,59]
sel_Start = [2017,5, 5,00,00,00] # Inicio do periodo de interesse
sel_End = [2017,5, 5,23,59,59] # Fim do periodo de interesse
####################################################
###### Aceitando input do usuário no terminal ######
####################################################
if "--ajuda" in sys.argv:
print("Boas-vindas ao protótipo dos Instrumentos Musicais Sinestésicos.\n################################################################\n")
print("Os comandos disponíveis são:\n")
print("--duracao _segundos_\n-d _segundos_\n Informa o tempo em _segundos_ do audio resultante.\n\n")
print("--nota _indice-acustico_\n-n _indice-acustico_\n Informa, de A4 a G4, o _índice-acústico_ para determinar a frequência.\n\n")
print("-e _estacao_ \n Informa o nome do arquivo que contém os dados que deseja-se audificar.\n\n")
print("--ano \n-a \n Para utilizar a media anual de um dia (não precisa ser seguido por nenhum parametro).\n\n")
print("--sem-min-env \n Para fazer com que o áudio gerado não inicie do mínimo do envelope (não precisa especificar nenhum parâmetro).\n\n")
print("\n\nCaso algum dos parametros nao seja definido, o padrão será escolhido.")
sys.exit(0)
if "--sem-min-env" in sys.argv:
inicia_do_minimo = False
if ("--ano" in sys.argv) or ("-a" in sys.argv):
consolidados = True
if ("--nota" in sys.argv):
nota = sys.argv[sys.argv.index("--nota") + 1]
elif "-n" in sys.argv:
nota = sys.argv[sys.argv.index("-n") + 1]
if ("-e" in sys.argv):
estacao = sys.argv[sys.argv.index("-e") + 1]
if "--duracao" in sys.argv:
sample_duration = float(sys.argv[sys.argv.index("--duracao") + 1])
if "-d" in sys.argv:
sample_duration = float(sys.argv[sys.argv.index("-d") + 1])
input_data = './data/{}.dat'.format(estacao)
local_resultados = "./Sonificacoes_e_graficos/"
data, temp = ga.obtem_inmet(input_data, "temp_inst")
data, temp = ga.recortaDatas(data, temp, sel_Start, sel_End)
if consolidados:
nome_dados = nome_dados + "_ano"
temp = ga.abre1d("./data/media_{}.dat".format(nome_dados))
data = np.arange(24)
# Ou seja, o inicio sera (2013,3,18,00,00,00)
# final = (2013,3,18,23,59,59)
#data, temp, u_ar, u_solo, pressao, lum = obtemDados(input_data, sel_Start, sel_End)
#Mostra informações do periodo selecionado:
out_filename = "{}-{}_{}_{}-{}-{}s".format(estacao,sel_Start[0],sel_Start[1], sel_Start[2], nota, sample_duration)
########################################################
####### Propriedades do audio de saida #################
......@@ -54,24 +79,32 @@ key = { 'C4': 261.63,
'B4': 493.88
}
freq = key["G4"]
freq = key[nota]
# Output details
sample_duration = 5. # seconds
sample_rate = 48000 # Hz
out_filename = "audif_prot1_{}_{}_{}-{}Hz-{}s".format(nome_dados,sel_Start[1], sel_Start[2], freq, sample_duration)
########################################################
########### Obtendo os dados da estacao ################
########################################################
data, temp = ga.obtem_inmet(input_data, "temp_inst")
data, temp = ga.recortaDatas(data, temp, sel_Start, sel_End)
if consolidados:
estacao = estacao + "_ano"
temp = ga.abre1d("./data/media_{}.dat".format(estacao))
data = np.arange(24)
out_filename = "{}-{}-{}s".format(estacao, nota, sample_duration)
# 2. Normalização e harmonização
# Normalização e harmonização
##################################################################
#### Operando nos dados para que eles fiquem do tamanho certo ####
##################################################################
# Normalizacao dos dados deve ser feita somente depois do harmonizador linear
snd_data = temp
pontos_dia = sample_rate / freq #Quantidade de pontos que um dia deve ter para que possua a frequencia desejada com a samplerate definida.
......@@ -84,12 +117,7 @@ def normaliza(dados):
normalizado = normalizado - min(normalizado) - 1
return normalizado
# Interpolacao dos dados para o numero de pontos desejado.
# Queremos que snd_data seja do tamanho de pontos_dia.
# Interpolacao dos dados para o numero de pontos desejado. Pois queremos que snd_data seja do tamanho de pontos_dia.
fator_de_interpolacao = 1.0*len(snd_data)/pontos_dia # Determina se a quantidade de pontos no periodo deve aumentar ou diminuir.
......@@ -113,11 +141,10 @@ snd_data = snd_data - lin_harmonizer
snd_data = normaliza(snd_data)
##################################################################
#### Concatenando a estrutura fina para ##########################
#### que ela tenha a duracao desejada ##########################
##################################################################
################################################################
############## Concatenando a estrutura fina para ##############
############## que ela tenha a duracao desejada ##############
################################################################
estrutura_fina = []
......@@ -149,7 +176,7 @@ onda_final = envelope*estrutura_fina
import soundfile as sf
sf.write('{}{}.wav'.format(local_resultados,out_filename), onda_final, sample_rate)
sf.write('{}e-fina_{}.wav'.format(local_resultados,out_filename), estrutura_fina, sample_rate)
sf.write('{}{}-Efina.wav'.format(local_resultados,out_filename), estrutura_fina, sample_rate)
########################################################
......@@ -158,14 +185,13 @@ sf.write('{}e-fina_{}.wav'.format(local_resultados,out_filename), estrutura_fina
from bokeh.plotting import figure, output_file, show
from bokeh.layouts import column
output_file("{}forma_da_onda.html".format(local_resultados))
output_file("{}{}graficos.html".format(local_resultados, out_filename))
p = figure(title="forma da onda e harmonizador linear", x_axis_label='ponto', y_axis_label="temperatura")
p.line(np.arange(0,len(antes_do_lin_harm),1),antes_do_lin_harm, legend = "forma da onda", line_width=2, line_color = 'purple')
p.line(np.arange(0,len(lin_harmonizer),1),lin_harmonizer, legend = "Harmonizador linear", line_width=2, line_color = 'green')
q = figure(title="forma da onda harmonizada e normalizada", x_axis_label='ponto', y_axis_label="valor correspondente")
q.line(np.arange(0,len(snd_data),1),snd_data, legend = "forma da onda com numero de pontos esperado", line_width=2, line_color = 'blue')
......
......@@ -16,7 +16,13 @@ import numpy as np
########## Dados de entrada e saida ############
################################################
nome_dados = 'PortoAlegre'
try:
nome_dados = sys.argv[1]
print(sys.argv[1], " selecionado")
except:
nome_dados = 'SaoPaulo'
input_data = '../data/{}.dat'.format(nome_dados)
output_data = "../data/media_{}_ano.dat".format(nome_dados)
......
21.39793103448276
21.05793103448276
20.72551724137931
20.415517241379312
20.14724137931034
19.921551724137935
19.66706896551723
19.433448275862055
19.318620689655187
19.245172413793085
19.671034482758635
20.74206896551725
22.198965517241387
23.25793103448276
24.047241379310346
24.57206896551726
24.863448275862048
24.928103448275877
24.64896551724138
24.15189655172414
23.456551724137913
22.699655172413802
22.146206896551718
21.745517241379297
19.77844827586206
19.423275862068962
19.066379310344846
18.760344827586227
18.47571839080461
18.2382183908046
17.9882183908046
17.747126436781606
17.626724137931024
17.553448275862074
18.124137931034486
19.164655172413802
20.623275862068972
22.044540229885076
23.14224137931032
23.984482758620707
24.782471264367814
25.12298850574713
25.05890804597704
24.585632183908043
23.58793103448277
22.1419540229885
20.97758620689654
20.2764367816092
19.580519538224163
19.267941478232064
18.95729179289564
18.65766139130576
18.391915287236547
18.132505271321605
17.89596026918074
17.68431529369946
17.529144147419284
17.52080495706195
18.022658604170196
19.038837320148957
20.259699231720028
21.622158939434346
22.786164901480802
23.766148824959807
24.38662861620741
24.702976176050026
24.434756994094506
23.70786012618859
22.606307610899723
21.32431432426098
20.46104755903475
19.888414402623937
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment