Upload iseamusic.py
Browse files- iseamusic.py +66 -0
iseamusic.py
ADDED
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
import tensorflow as tf
|
3 |
+
from magenta.models.melody_rnn import melody_rnn_model
|
4 |
+
from magenta.models.melody_rnn import melody_rnn_sequence_generator
|
5 |
+
from magenta.music import constants
|
6 |
+
from magenta.music import midi_io
|
7 |
+
from magenta.protobuf import generator_pb2
|
8 |
+
from magenta.protobuf import music_pb2
|
9 |
+
|
10 |
+
import os
|
11 |
+
import tempfile
|
12 |
+
|
13 |
+
# Cargar modelo de Melody RNN
|
14 |
+
bundle = melody_rnn_sequence_generator.get_bundle_file('attention_rnn')
|
15 |
+
generator_map = melody_rnn_sequence_generator.get_generator_map()
|
16 |
+
generator = generator_map['attention_rnn'](checkpoint=None, bundle=bundle)
|
17 |
+
|
18 |
+
# Establecer las configuraciones del generador
|
19 |
+
generator.initialize()
|
20 |
+
|
21 |
+
def generate_music(style, num_steps=128, primer_melody=[60]):
|
22 |
+
# Crear secuencia a partir de la melodía inicial
|
23 |
+
primer_sequence = music_pb2.NoteSequence()
|
24 |
+
for note in primer_melody:
|
25 |
+
note = primer_sequence.notes.add()
|
26 |
+
note.pitch = note
|
27 |
+
note.start_time = 0
|
28 |
+
note.end_time = 1
|
29 |
+
note.velocity = 80
|
30 |
+
|
31 |
+
primer_sequence.total_time = 1
|
32 |
+
|
33 |
+
# Definir las configuraciones del generador
|
34 |
+
generator_options = generator_pb2.GeneratorOptions()
|
35 |
+
generator_options.generate_sections.add(
|
36 |
+
start_time=primer_sequence.total_time,
|
37 |
+
end_time=primer_sequence.total_time + num_steps / constants.DEFAULT_STEPS_PER_QUARTER)
|
38 |
+
|
39 |
+
# Generar la secuencia
|
40 |
+
sequence = generator.generate(primer_sequence, generator_options)
|
41 |
+
|
42 |
+
# Guardar la secuencia en un archivo temporal MIDI
|
43 |
+
midi_file = os.path.join(tempfile.gettempdir(), 'output.mid')
|
44 |
+
midi_io.sequence_proto_to_midi_file(sequence, midi_file)
|
45 |
+
|
46 |
+
return midi_file
|
47 |
+
|
48 |
+
# Definir la interfaz de Gradio
|
49 |
+
with gr.Blocks() as demo:
|
50 |
+
gr.Markdown("## Generador de Música con IA")
|
51 |
+
|
52 |
+
with gr.Row():
|
53 |
+
style = gr.Dropdown(label="Estilo de Música", choices=["Classical", "Jazz", "Pop"], value="Classical")
|
54 |
+
num_steps = gr.Slider(label="Número de Pasos", minimum=64, maximum=512, step=64, value=128)
|
55 |
+
run_button = gr.Button("Generar Música")
|
56 |
+
|
57 |
+
result = gr.Audio(label="Música Generada")
|
58 |
+
|
59 |
+
def generate_and_play(style, num_steps):
|
60 |
+
midi_file = generate_music(style, num_steps)
|
61 |
+
return midi_file
|
62 |
+
|
63 |
+
run_button.click(fn=generate_and_play, inputs=[style, num_steps], outputs=result)
|
64 |
+
|
65 |
+
if __name__ == "__main__":
|
66 |
+
demo.launch()
|