import gradio as gr import os import allin1 from pathlib import Path HEADER = """

All-In-One Music Structure Analyzer 🔮

[Python Package] [Paper] [Visual Demo]

This Space demonstrates the music structure analyzer predicts:

It takes about 4:30 to analyze a 3-minute song. If you are in a hurry, you can try the examples at the bottom.

For more information, please visit the links above ✨🧸

""" CACHE_EXAMPLES = os.getenv('CACHE_EXAMPLES', '1') == '1' def analyze(path): path = Path(path) result = allin1.analyze( path, multiprocess=False, keep_byproducts=True, # TODO: remove this ) fig = allin1.visualize(result) fig.set_dpi(300) allin1.sonify(result, out_dir='./sonif') sonif_path = Path(f'./sonif/{path.stem}.sonif{path.suffix}').resolve().as_posix() return result.bpm, fig, sonif_path with gr.Blocks() as demo: gr.HTML(HEADER) input_audio_path = gr.Audio( label='Input', source='upload', type='filepath', format='mp3', show_download_button=False, ) button = gr.Button('Analyze', variant='primary') output_viz = gr.Plot(label='Visualization') with gr.Row(): output_bpm = gr.Textbox(label='BPM', scale=1) output_sonif = gr.Audio( label='Sonification', type='filepath', format='mp3', show_download_button=False, scale=9, ) gr.Examples( examples=[ './assets/NewJeans - Super Shy.mp3', './assets/Bruno Mars - 24k Magic.mp3' ], inputs=input_audio_path, outputs=[output_bpm, output_viz, output_sonif], fn=analyze, cache_examples=CACHE_EXAMPLES, ) button.click( fn=analyze, inputs=input_audio_path, outputs=[output_bpm, output_viz, output_sonif], api_name='analyze', ) if __name__ == '__main__': demo.launch()