Spaces:
Sleeping
Sleeping
| import os | |
| import gradio as gr | |
| from gradio_components.prediction import predict | |
| 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 = gr.Audio("listen to the generated music", type="filepath") | |
| submit.click( | |
| fn=predict, | |
| inputs=[model_path, prompt, melody, duration, topk, topp, temperature, | |
| sample_rate], | |
| outputs=output | |
| ) | |
| 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], | |
| # cache_examples=True, | |
| ) | |
| demo.queue().launch() | |
| if __name__ == "__main__": | |
| UI() | |