Spaces:
Sleeping
Sleeping
import os | |
import gradio as gr | |
from gradio_components.prediction import predict, transcribe | |
theme = gr.themes.Glass( | |
primary_hue="fuchsia", | |
secondary_hue="indigo", | |
neutral_hue="slate", | |
font=[gr.themes.GoogleFont('Source Sans Pro'), 'ui-sans-serif', 'system-ui', | |
'sans-serif'], | |
).set( | |
body_background_fill_dark='*background_fill_primary', | |
embed_radius='*table_radius', | |
background_fill_primary='*neutral_50', | |
background_fill_primary_dark='*neutral_950', | |
background_fill_secondary_dark='*neutral_900', | |
border_color_accent='*neutral_600', | |
border_color_accent_subdued='*color_accent', | |
border_color_primary_dark='*neutral_700', | |
block_background_fill='*background_fill_primary', | |
block_background_fill_dark='*neutral_800', | |
block_border_width='1px', | |
block_label_background_fill='*background_fill_primary', | |
block_label_background_fill_dark='*background_fill_secondary', | |
block_label_text_color='*neutral_500', | |
block_label_text_size='*text_sm', | |
block_label_text_weight='400', | |
block_shadow='none', | |
block_shadow_dark='none', | |
block_title_text_color='*neutral_500', | |
block_title_text_weight='400', | |
panel_border_width='0', | |
panel_border_width_dark='0', | |
checkbox_background_color_dark='*neutral_800', | |
checkbox_border_width='*input_border_width', | |
checkbox_label_border_width='*input_border_width', | |
input_background_fill='*neutral_100', | |
input_background_fill_dark='*neutral_700', | |
input_border_color_focus_dark='*neutral_700', | |
input_border_width='0px', | |
input_border_width_dark='0px', | |
slider_color='#2563eb', | |
slider_color_dark='#2563eb', | |
table_even_background_fill_dark='*neutral_950', | |
table_odd_background_fill_dark='*neutral_900', | |
button_border_width='*input_border_width', | |
button_shadow_active='none', | |
button_primary_background_fill='*primary_200', | |
button_primary_background_fill_dark='*primary_700', | |
button_primary_background_fill_hover='*button_primary_background_fill', | |
button_primary_background_fill_hover_dark='*button_primary_background_fill', | |
button_secondary_background_fill='*neutral_200', | |
button_secondary_background_fill_dark='*neutral_600', | |
button_secondary_background_fill_hover='*button_secondary_background_fill', | |
button_secondary_background_fill_hover_dark='*button_secondary_background_fill', | |
button_cancel_background_fill='*button_secondary_background_fill', | |
button_cancel_background_fill_dark='*button_secondary_background_fill', | |
button_cancel_background_fill_hover='*button_cancel_background_fill', | |
button_cancel_background_fill_hover_dark='*button_cancel_background_fill' | |
) | |
_AUDIOCRAFT_MODELS = ["facebook/musicgen-melody", | |
"facebook/musicgen-medium", | |
"facebook/musicgen-small", | |
"facebook/musicgen-large", | |
"facebook/musicgen-melody-large"] | |
def generate_prompt(difficulty, style): | |
_DIFFICULTY_MAPPIN = { | |
"Easy": "beginner player", | |
"Medum": "player who has 2-3 years experience", | |
"Hard": "player who has more than 4 years experiences" | |
} | |
prompt = 'piano only music for a {} to pratice with the touch of {}'.format( | |
_DIFFICULTY_MAPPIN[difficulty], style | |
) | |
return prompt | |
def UI(): | |
with gr.Blocks() as demo: | |
with gr.Tab("Generate Music by melody"): | |
with gr.Row(): | |
with gr.Column(): | |
with gr.Row(): | |
model_path = gr.Dropdown( | |
choices=_AUDIOCRAFT_MODELS, | |
label="Select the model", | |
value="facebook/musicgen-melody-large" | |
) | |
with gr.Row(): | |
duration = gr.Slider( | |
minimum=10, | |
maximum=60, | |
value=10, | |
label="Duration", | |
interactive=True | |
) | |
with gr.Row(): | |
topk = gr.Number(label="Top-k", value=250, interactive=True) | |
topp = gr.Number(label="Top-p", value=0, interactive=True) | |
temperature = gr.Number( | |
label="Temperature", value=1.0, interactive=True | |
) | |
sample_rate = gr.Number( | |
label="output music sample rate", value=32000, | |
interactive=True | |
) | |
difficulty = gr.Radio( | |
["Easy", "Medium", "Hard"], label="Difficulty", | |
value="Easy", interactive=True | |
) | |
style = gr.Radio( | |
["Jazz", "Classical Music", "Hip Hop", "Others"], | |
value="Classical Music", label="music genre", | |
interactive=True | |
) | |
if style == "Others": | |
style = gr.Textbox(label="Type your music genre") | |
prompt = generate_prompt(difficulty.value, style.value) | |
customize = gr.Checkbox( | |
label="Customize the prompt", interactive=True | |
) | |
if customize: | |
prompt = gr.Textbox(label="Type your prompt") | |
with gr.Column(): | |
with gr.Row(): | |
melody = gr.Audio( | |
sources=["microphone", "upload"], | |
label="Record or upload your audio", | |
#interactive=True, | |
show_label=True, | |
) | |
with gr.Row(): | |
submit = gr.Button("Generate Music") | |
output_audio = gr.Audio("listen to the generated music", type="filepath") | |
with gr.Row(): | |
transcribe_button = gr.Button("Transcribe") | |
d = gr.DownloadButton("Download the file", visible=False) | |
transcribe_button.click(transcribe, inputs=[output_audio], outputs=d) | |
submit.click( | |
fn=predict, | |
inputs=[model_path, prompt, melody, duration, topk, topp, temperature, | |
sample_rate], | |
outputs=output_audio | |
) | |
gr.Examples( | |
examples=[ | |
[ | |
os.path.join( | |
os.path.dirname(__file__), | |
"./data/audio/twinkle_twinkle_little_stars_mozart_20sec.mp3" | |
), | |
"Easy", | |
32000, | |
20 | |
], | |
[ | |
os.path.join( | |
os.path.dirname(__file__), | |
"./data/audio/golden_hour_20sec.mp3" | |
), | |
"Easy", | |
32000, | |
20 | |
], | |
[ | |
os.path.join( | |
os.path.dirname(__file__), | |
"./data/audio/turkish_march_mozart_20sec.mp3" | |
), | |
"Easy", | |
32000, | |
20 | |
], | |
[ | |
os.path.join( | |
os.path.dirname(__file__), | |
"./data/audio/golden_hour_20sec.mp3" | |
), | |
"Hard", | |
32000, | |
20 | |
], | |
[ | |
os.path.join( | |
os.path.dirname(__file__), | |
"./data/audio/golden_hour_20sec.mp3" | |
), | |
"Hard", | |
32000, | |
40 | |
], | |
[ | |
os.path.join( | |
os.path.dirname(__file__), | |
"./data/audio/golden_hour_20sec.mp3" | |
), | |
"Hard", | |
16000, | |
20 | |
], | |
], | |
inputs=[melody, difficulty, sample_rate, duration], | |
label="Audio Examples", | |
outputs=[output_audio], | |
# cache_examples=True, | |
) | |
demo.queue().launch() | |
if __name__ == "__main__": | |
UI() | |