ec98 commited on
Commit
1b40d3e
1 Parent(s): 69d43b7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +93 -39
app.py CHANGED
@@ -129,35 +129,66 @@ def mse_with_positive_pressure(y_true: tf.Tensor, y_pred: tf.Tensor):
129
  def calcular_duracion_midi(archivo_midi):
130
  midi = pretty_midi.PrettyMIDI(archivo_midi)
131
  return midi.get_end_time()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132
 
133
  def main():
134
  seed = 42
135
  tf.random.set_seed(seed)
136
  np.random.seed(seed)
137
 
138
- st.title('GENERADOR DE MELODIAS CON RNN')
139
-
140
-
141
  # Rutas de archivos
142
  #sample_file = 'Preludes 2 Through Major keys 39.mid'
 
 
143
  out_file = 'output.mid'
144
  uploaded_file = st.file_uploader("Sube un archivo MIDI")
 
145
 
146
  model=''
147
  pesos=''
148
-
149
  with st.container(height = None, border = True):
150
  option = st.selectbox(
151
- "Elige con que modelo entrenar",
152
- ("Maestro", "Lakh"))
 
153
 
154
  option_musica = st.selectbox(
155
- "Elige instrumento a generar las melodias",
156
- ("Piano", "Chromatic Percussion", "Organ", "Guitar", "Bass", "Strings", "Ensemble", "Brass",
157
- "Reed", "Pipe", "Synth Lead", "Synth Pad", "Synth Effects", "Ethnic", "Percussive", "Sound Effects"))
 
158
 
159
  num_predictions = st.number_input("Ingrese el número de notas:", min_value=100, max_value=150, value=120, step=1)
160
-
 
161
  if uploaded_file and option is not None:
162
 
163
  if option=="Maestro":
@@ -167,22 +198,23 @@ def main():
167
  model="mi_modelo03_music.h5"
168
  pesos="mi_pesos03_music.h5"
169
 
170
- st.subheader("Archivo cargado:")
171
- st.write(uploaded_file.name)
172
-
173
- # Guardar el archivo en una ubicación temporal
174
- with open(uploaded_file.name, 'wb') as f:
175
- f.write(uploaded_file.getbuffer())
176
 
177
- sample_file=uploaded_file.name
178
-
179
- # Duracion del MIDI
180
- duracion = calcular_duracion_midi(sample_file)
181
- minutos, segundos = divmod(duracion, 60)
182
-
183
- st.write(f"La duración del archivo MIDI subido es: {int(minutos)}:{int(segundos):02d}")
 
 
 
 
184
 
185
- st.subheader("Modelo elegido:")
186
 
187
  with st.container(height = None, border = True):
188
  st.write(option, f" de tipo instrumental ", option_musica)
@@ -200,35 +232,35 @@ def main():
200
  if option_musica is not None:
201
  if option_musica=="Piano":
202
  instrument_name="Acoustic Grand Piano"
203
- elif option_musica=="Chromatic Percussion":
204
  instrument_name="Celesta"
205
- elif option_musica=="Organ":
206
  instrument_name="Hammond Organ"
207
- elif option_musica=="Guitar":
208
  instrument_name="Acoustic Guitar (nylon)"
209
- elif option_musica=="Bass":
210
  instrument_name="Acoustic Bass"
211
- elif option_musica=="Strings":
212
  instrument_name="Violin"
213
- elif option_musica=="Ensemble":
214
  instrument_name="String Ensemble 1"
215
- elif option_musica=="Brass":
216
  instrument_name="Trumpet"
217
- elif option_musica=="Reed":
218
  instrument_name="Soprano Sax"
219
- elif option_musica=="Pipe":
220
  instrument_name="Piccolo"
221
- elif option_musica=="Synth Lead":
222
  instrument_name="Lead 2 (sawtooth)"
223
- elif option_musica=="Synth Pad":
224
  instrument_name="Pad 2 (warm)"
225
- elif option_musica=="Synth Effects":
226
  instrument_name="FX 2 (soundtrack)"
227
- elif option_musica=="Ethnic":
228
  instrument_name="Banjo"
229
- elif option_musica=="Percussive":
230
  instrument_name="Melodic Tom"
231
- elif option_musica=="Sound Effects":
232
  instrument_name="Guitar Fret Noise"
233
  else:
234
  instrument_name=pretty_midi.program_to_instrument_name(pm.instruments[0].program)
@@ -264,6 +296,20 @@ def main():
264
 
265
  archivo_midi = open(out_file, 'rb').read()
266
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
267
  with st.container(height = None, border = True):
268
  st.download_button(
269
  label="Descargar MIDI",
@@ -271,6 +317,14 @@ def main():
271
  file_name=out_file, # Nombre del archivo que se descargará
272
  mime='audio/midi'
273
  )
 
 
 
 
 
 
 
 
274
 
275
  # Duracion del MIDI resultante
276
  duracion_f = calcular_duracion_midi(out_file)
 
129
  def calcular_duracion_midi(archivo_midi):
130
  midi = pretty_midi.PrettyMIDI(archivo_midi)
131
  return midi.get_end_time()
132
+
133
+ def obtain_statistics(midi_file: str) -> pd.DataFrame:
134
+ # Convertir archivo MIDI a DataFrame de notas
135
+ notes_df = midi_to_notes(midi_file)
136
+
137
+ # Calcular estadísticas
138
+ mean_pitch = np.mean(notes_df['pitch'])
139
+ std_pitch = np.std(notes_df['pitch'])
140
+ median_pitch = np.median(notes_df['pitch'])
141
+
142
+ mean_step = np.mean(notes_df['step'])
143
+ std_step = np.std(notes_df['step'])
144
+ median_step = np.median(notes_df['step'])
145
+
146
+ mean_duration = np.mean(notes_df['duration'])
147
+ std_duration = np.std(notes_df['duration'])
148
+ median_duration = np.median(notes_df['duration'])
149
+
150
+ # Crear DataFrame con estadísticas
151
+ statistics_data = {
152
+ 'Estadísticas': ['Media', 'Desviación Estandar', 'Mediana'],
153
+ 'Tono': [mean_pitch, std_pitch, median_pitch],
154
+ 'Paso': [mean_step, std_step, median_step],
155
+ 'Duración': [mean_duration, std_duration, median_duration]
156
+ }
157
+ statistics_df = pd.DataFrame(statistics_data)
158
+
159
+ return statistics_df
160
 
161
  def main():
162
  seed = 42
163
  tf.random.set_seed(seed)
164
  np.random.seed(seed)
165
 
 
 
 
166
  # Rutas de archivos
167
  #sample_file = 'Preludes 2 Through Major keys 39.mid'
168
+ st.title('GENERADOR DE MELODIAS CON RNN')
169
+
170
  out_file = 'output.mid'
171
  uploaded_file = st.file_uploader("Sube un archivo MIDI")
172
+
173
 
174
  model=''
175
  pesos=''
176
+
177
  with st.container(height = None, border = True):
178
  option = st.selectbox(
179
+ "Elige con qué modelo entrenar",
180
+ ("Maestro", "Lakh")
181
+ )
182
 
183
  option_musica = st.selectbox(
184
+ "Elige instrumento para generar las melodías",
185
+ ("Piano", "Percusión cromática", "Organo", "Guitarra", "Bajo", "Instrumentos de cuerda", "Conjunto", "Laton",
186
+ "Junco", "Pipa", "Instrumento sintetizador", "Pad sintetizador", "Efecto sintetizador", "Etnico", "Percusion", "Efectos de sonido")
187
+ )
188
 
189
  num_predictions = st.number_input("Ingrese el número de notas:", min_value=100, max_value=150, value=120, step=1)
190
+
191
+
192
  if uploaded_file and option is not None:
193
 
194
  if option=="Maestro":
 
198
  model="mi_modelo03_music.h5"
199
  pesos="mi_pesos03_music.h5"
200
 
201
+ st.subheader("Archivo cargado")
202
+ with st.container(height = None, border = True):
203
+ st.write(uploaded_file.name)
 
 
 
204
 
205
+ # Guardar el archivo en una ubicación temporal
206
+ with open(uploaded_file.name, 'wb') as f:
207
+ f.write(uploaded_file.getbuffer())
208
+
209
+ sample_file=uploaded_file.name
210
+
211
+ # Duracion del MIDI
212
+ duracion = calcular_duracion_midi(sample_file)
213
+ minutos, segundos = divmod(duracion, 60)
214
+
215
+ st.write(f"La duración del archivo MIDI subido es: {int(minutos)}:{int(segundos):02d}")
216
 
217
+ st.subheader("Modelo elegido")
218
 
219
  with st.container(height = None, border = True):
220
  st.write(option, f" de tipo instrumental ", option_musica)
 
232
  if option_musica is not None:
233
  if option_musica=="Piano":
234
  instrument_name="Acoustic Grand Piano"
235
+ elif option_musica=="Percusión cromática":
236
  instrument_name="Celesta"
237
+ elif option_musica=="Organo":
238
  instrument_name="Hammond Organ"
239
+ elif option_musica=="Guitarra":
240
  instrument_name="Acoustic Guitar (nylon)"
241
+ elif option_musica=="Bajo":
242
  instrument_name="Acoustic Bass"
243
+ elif option_musica=="Instrumentos de cuerda":
244
  instrument_name="Violin"
245
+ elif option_musica=="Conjunto":
246
  instrument_name="String Ensemble 1"
247
+ elif option_musica=="Laton":
248
  instrument_name="Trumpet"
249
+ elif option_musica=="Junco":
250
  instrument_name="Soprano Sax"
251
+ elif option_musica=="Pipa":
252
  instrument_name="Piccolo"
253
+ elif option_musica=="Instrumento sintetizador":
254
  instrument_name="Lead 2 (sawtooth)"
255
+ elif option_musica=="Pad sintetizador":
256
  instrument_name="Pad 2 (warm)"
257
+ elif option_musica=="Efecto sintetizador":
258
  instrument_name="FX 2 (soundtrack)"
259
+ elif option_musica=="Etnico":
260
  instrument_name="Banjo"
261
+ elif option_musica=="Percusion":
262
  instrument_name="Melodic Tom"
263
+ elif option_musica=="Efectos de sonido":
264
  instrument_name="Guitar Fret Noise"
265
  else:
266
  instrument_name=pretty_midi.program_to_instrument_name(pm.instruments[0].program)
 
296
 
297
  archivo_midi = open(out_file, 'rb').read()
298
 
299
+ csv_file = obtain_statistics(out_file)
300
+
301
+ # Guardar el archivo temporalmente
302
+ out_file = 'temp.mid'
303
+ with open(out_file, 'wb') as f:
304
+ f.write(uploaded_file.getbuffer())
305
+
306
+ # Obtener estadísticas
307
+ statistics_df = obtain_statistics(out_file)
308
+
309
+ # Mostrar estadísticas en Streamlit
310
+ st.write("### Estadísticas generadas:")
311
+ st.dataframe(statistics_df)
312
+
313
  with st.container(height = None, border = True):
314
  st.download_button(
315
  label="Descargar MIDI",
 
317
  file_name=out_file, # Nombre del archivo que se descargará
318
  mime='audio/midi'
319
  )
320
+
321
+ # st.download_button(
322
+ # label="Descargar CSV",
323
+ # data=statistics_df.to_csv(index=False).encode('utf-8'),
324
+ # file_name='statistics.csv',
325
+ # mime='text/csv'
326
+ # )
327
+
328
 
329
  # Duracion del MIDI resultante
330
  duracion_f = calcular_duracion_midi(out_file)