Spaces:
Sleeping
Sleeping
import gradio as gr | |
import requests | |
# from IPython.display import Audio | |
import tempfile | |
import os | |
def generate_music(prompt, duration=10): | |
API_URL = "https://api-inference.huggingface.co/models/facebook/musicgen-small" | |
headers = {"Authorization": f"Bearer {os.getenv('HF_API_KEY')}"} | |
payload = { | |
"inputs": prompt | |
} | |
try: | |
response = requests.post(API_URL, headers=headers, json=payload, timeout=300) | |
if response.status_code != 200: | |
return None, f"Error: API returned status code {response.status_code}" | |
# Save the audio bytes to a temporary file | |
with tempfile.NamedTemporaryFile(delete=False, suffix='.wav') as tmp_file: | |
tmp_file.write(response.content) | |
tmp_file_path = tmp_file.name | |
return tmp_file_path, "Music generated successfully!" | |
except Exception as e: | |
return None, f"Error: {str(e)}" | |
# Create the Gradio interface | |
def gradio_interface(prompt, duration=10): | |
audio_path, message = generate_music(prompt, duration) | |
if audio_path: | |
return audio_path, message | |
else: | |
raise gr.Error(message) | |
# Create the Gradio app | |
with gr.Blocks() as demo: | |
gr.Markdown(""" | |
# MusicGen Audio Generator | |
Generate music from text descriptions using Meta's MusicGen model. | |
""") | |
with gr.Row(): | |
with gr.Column(): | |
prompt_input = gr.Textbox( | |
label="Enter your music description", | |
placeholder="e.g., liquid drum and bass, atmospheric synths, airy sounds", | |
lines=3 | |
) | |
duration_slider = gr.Slider( | |
minimum=5, | |
maximum=30, | |
value=10, | |
step=5, | |
label="Duration (seconds)" | |
) | |
generate_button = gr.Button("Generate Music") | |
with gr.Column(): | |
audio_output = gr.Audio(label="Generated Music") | |
message_output = gr.Textbox(label="Status") | |
generate_button.click( | |
fn=gradio_interface, | |
inputs=[prompt_input, duration_slider], | |
outputs=[audio_output, message_output] | |
) | |
# Launch the app | |
if __name__ == "__main__": | |
demo.launch() | |