|
import os |
|
import json |
|
import gradio as gr |
|
|
|
from utils import ( |
|
generate_song, |
|
remove_last_instrument, |
|
regenerate_last_instrument, |
|
change_last_instrument, |
|
change_tempo, |
|
) |
|
|
|
|
|
os.environ["PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION"] = "python" |
|
|
|
|
|
|
|
|
|
genres = ["ROCK", "POP", "OTHER", "R&B/SOUL", "JAZZ", "ELECTRONIC", "RANDOM"] |
|
|
|
|
|
with open('artist_names.json', 'r') as f: |
|
artist_names = json.load(f) |
|
|
|
|
|
|
|
with open('instruments.json', 'r') as f: |
|
instruments = json.load(f) |
|
|
|
|
|
demo = gr.Blocks() |
|
|
|
|
|
def run(): |
|
with demo: |
|
gr.DuplicateButton(value="Duplicate Space for private use") |
|
with gr.Row(): |
|
with gr.Column(): |
|
temp = gr.Slider( |
|
minimum=0, maximum=1, step=0.05, value=0.85, label="Temperature" |
|
) |
|
genre = gr.Dropdown( |
|
choices=genres, value="POP", label="Select the genre" |
|
) |
|
artist = gr.Dropdown( |
|
choices=artist_names, value=artist_names[0], label="Select the artist style" |
|
) |
|
instrument = gr.Dropdown( |
|
choices=instruments, value=instruments[0], label="Select the instrument to be generated" |
|
) |
|
with gr.Row(): |
|
btn_from_scratch = gr.Button("🧹 Start from scratch") |
|
btn_continue = gr.Button("➡️ Generate New Track") |
|
btn_remove_last = gr.Button("↩️ Remove last instrument") |
|
btn_regenerate_last = gr.Button("🔄 Regenerate last instrument") |
|
btn_change_last = gr.Button("🔄 Swap last instrument") |
|
with gr.Column(): |
|
with gr.Group(): |
|
audio_output = gr.Video(show_share_button=True) |
|
midi_file = gr.File() |
|
with gr.Row(): |
|
qpm = gr.Slider( |
|
minimum=60, maximum=140, step=10, value=120, label="Tempo" |
|
) |
|
btn_qpm = gr.Button("Change Tempo") |
|
with gr.Row(): |
|
with gr.Column(): |
|
plot_output = gr.Plot() |
|
with gr.Column(): |
|
instruments_output = gr.Markdown("# List of generated instruments") |
|
with gr.Row(): |
|
text_sequence = gr.Text() |
|
empty_sequence = gr.Text(visible=False) |
|
with gr.Row(): |
|
num_tokens = gr.Text(visible=False) |
|
btn_from_scratch.click( |
|
fn=generate_song, |
|
inputs=[genre, artist, instrument, temp, empty_sequence, qpm], |
|
outputs=[ |
|
audio_output, |
|
midi_file, |
|
plot_output, |
|
instruments_output, |
|
text_sequence, |
|
num_tokens, |
|
], |
|
) |
|
btn_continue.click( |
|
fn=generate_song, |
|
inputs=[genre, artist, instrument, temp, text_sequence, qpm], |
|
outputs=[ |
|
audio_output, |
|
midi_file, |
|
plot_output, |
|
instruments_output, |
|
text_sequence, |
|
num_tokens, |
|
], |
|
) |
|
btn_remove_last.click( |
|
fn=remove_last_instrument, |
|
inputs=[text_sequence, qpm], |
|
outputs=[ |
|
audio_output, |
|
midi_file, |
|
plot_output, |
|
instruments_output, |
|
text_sequence, |
|
num_tokens, |
|
], |
|
) |
|
btn_regenerate_last.click( |
|
fn=regenerate_last_instrument, |
|
inputs=[text_sequence, qpm], |
|
outputs=[ |
|
audio_output, |
|
midi_file, |
|
plot_output, |
|
instruments_output, |
|
text_sequence, |
|
num_tokens, |
|
], |
|
) |
|
btn_change_last.click( |
|
fn=change_last_instrument, |
|
inputs=[text_sequence, instrument, temp, qpm], |
|
outputs=[ |
|
audio_output, |
|
midi_file, |
|
plot_output, |
|
instruments_output, |
|
text_sequence, |
|
num_tokens, |
|
], |
|
) |
|
btn_qpm.click( |
|
fn=change_tempo, |
|
inputs=[text_sequence, qpm], |
|
outputs=[ |
|
audio_output, |
|
midi_file, |
|
plot_output, |
|
instruments_output, |
|
text_sequence, |
|
num_tokens, |
|
], |
|
) |
|
|
|
demo.launch(server_name="0.0.0.0", server_port=7860) |
|
|
|
|
|
if __name__ == "__main__": |
|
run() |
|
|