Spaces:
Runtime error
Runtime error
import gradio as gr | |
import os | |
import allin1 | |
from pathlib import Path | |
HEADER = """ | |
<header> | |
<h1> | |
All-In-One Music Structure Analyzer 🔮 | |
</h1> | |
<p> | |
<a href="https://github.com/mir-aidj/all-in-one">[Python Package]</a> | |
<a href="https://arxiv.org/abs/2307.16425">[Paper]</a> | |
<a href="https://taejun.kim/music-dissector/">[Visual Demo]</a> | |
</p> | |
</header> | |
""" | |
DESCRIPTION = """ | |
This Space demonstrates [All-In-One Music Structure Analyzer](https://github.com/mir-aidj/all-in-one), | |
a tool that predicts: | |
- BPM | |
- Beats | |
- Downbeats | |
- Functional segment boundaries | |
- Functional segment labels | |
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) | |
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(css='style.css') as demo: | |
gr.HTML(HEADER) | |
gr.Markdown(DESCRIPTION) | |
input_audio_path = gr.Audio( | |
label='Input', | |
source='upload', | |
type='filepath', | |
format='mp3', | |
show_download_button=False, | |
) | |
button = gr.Button('Analyze', variant='primary') | |
output_bpm = gr.Textbox(label='BPM') | |
output_viz = gr.Plot(label='Visualization') | |
output_sonif = gr.Audio( | |
label='Sonification', | |
type='filepath', | |
format='mp3', | |
show_download_button=False, | |
) | |
gr.Examples( | |
examples=[ | |
'./assets/NewJeans - Super Shy.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() | |