Spaces:
Runtime error
Runtime error
| import spaces | |
| import gradio as gr | |
| import os | |
| from pathlib import Path | |
| import ast | |
| from model import Jamify | |
| import json | |
| # Initialize the Jamify model once | |
| print("Initializing Jamify model...") | |
| jamify_model = Jamify() | |
| print("Jamify model ready.") | |
| def parse(file): | |
| parsed_data = [] | |
| with open(file, 'r') as f: | |
| content = f.read() | |
| for line in f: | |
| line = line.strip() | |
| if not line: | |
| continue | |
| start,end,word = line.split(' ') | |
| data_point = { | |
| "word": word, | |
| "start": float(start), | |
| "end": float(end) | |
| } | |
| parsed_data.append(data_point) | |
| with open('temp.json','w') as f: | |
| json.dump(parsed_data,f) | |
| return content | |
| def generate_song(reference_audio, lyrics_file, style_prompt, duration): | |
| # We need to save the uploaded files to temporary paths to pass to the model | |
| reference_audio = reference_audio if reference_audio else None | |
| # The model expects paths, so we write the prompt to a temp file if needed | |
| # (This part of the model could be improved to accept the string directly) | |
| #print(type(lyrics_file)) | |
| #parse(lyrics_file) | |
| #parse(lyrics_file) | |
| output_path = jamify_model.predict( | |
| reference_audio_path=reference_audio, | |
| lyrics_json_path='temp.json', | |
| style_prompt=style_prompt, | |
| duration_sec=duration | |
| ) | |
| return output_path | |
| # Gradio interface | |
| def process_text_file(file_obj): | |
| """ | |
| Reads the content of an uploaded text file. | |
| """ | |
| if file_obj is not None: | |
| with open(file_obj.name, 'r') as f: | |
| content = f.read() | |
| return content | |
| return "No file uploaded." | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# Jamify: Music Generation from Lyrics and Style") | |
| gr.Markdown("Provide your lyrics, a style reference (either an audio file or a text prompt), and a desired duration to generate a song.") | |
| with gr.Row(): | |
| with gr.Column(): | |
| gr.Markdown("### Inputs") | |
| #lyrics_file = gr.JSON(label="Lyrics File (.json)") | |
| #file = gr.File(label="Upload JSON File", file_types=[".json"]) | |
| file_input = gr.File(file_types=["text"], file_count="single", label="Upload your text file here") | |
| output_text = gr.Textbox(label="File Content", lines=10) | |
| file_input.upload(parse, inputs=file_input, outputs=output_text) | |
| duration_slider = gr.Slider(minimum=5, maximum=180, value=30, step=1, label="Duration (seconds)") | |
| with gr.Tab("Style from Audio"): | |
| reference_audio = gr.File(label="Reference Audio (.mp3, .wav)", type="filepath") | |
| with gr.Tab("Style from Text"): | |
| style_prompt = gr.Textbox(label="Style Prompt", lines=3, placeholder="e.g., A high-energy electronic dance track with a strong bassline and euphoric synths.") | |
| generate_button = gr.Button("Generate Song", variant="primary") | |
| with gr.Column(): | |
| gr.Markdown("### Output") | |
| output_audio = gr.Audio(label="Generated Song") | |
| generate_button.click( | |
| fn=generate_song, | |
| inputs=[reference_audio, output_text, style_prompt, duration_slider], | |
| outputs=output_audio, | |
| api_name="generate_song" | |
| ) | |
| demo.queue().launch() | |
| #demo.launch(server_name="0.0.0.0", server_port=7860) |