IseaCraft commited on
Commit
3e5d20e
1 Parent(s): a4f7ed2

Upload iseamusic.py

Browse files
Files changed (1) hide show
  1. 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()