Spaces:
Runtime error
Runtime error
import gradio as gr | |
import os | |
import re | |
import subprocess | |
import time | |
from symusic import Score, Synthesizer, BuiltInSF3, dump_wav | |
import torchaudio | |
import torch | |
import music21 | |
def convert_midi_to_svg(midi_file_path, output_svg_path): | |
# Load MIDI file | |
midi_stream = music21.converter.parse(midi_file_path) | |
# Convert MIDI to MusicXML | |
musicxml_string = midi_stream.write('musicxml') | |
# Load MusicXML string | |
score = music21.converter.parseData(musicxml_string) | |
# Convert MusicXML to SVG | |
svg_string = score.write('musicxml.png', fmt='musicxml', subformats=['svg']) | |
# Write SVG to file | |
with open(output_svg_path, 'wb') as f: | |
f.write(svg_string) | |
return output_svg_path | |
def parse_abc_notation(text="", conversation_id='1'): | |
os.makedirs(f"tmp/{conversation_id}", exist_ok=True) | |
ts = time.time() | |
abc_pattern = r'(X:\d+\n(?:[^\n]*\n)+)' | |
abc_notation = re.findall(abc_pattern, text+'\n') | |
print(f'extract abc block: {abc_notation}') | |
if abc_notation: | |
# Convert ABC to midi | |
s = Score.from_abc(abc_notation[0]) | |
wav_file = f'tmp/{conversation_id}/{ts}.mp3' | |
audio = Synthesizer().render(s, stereo=True) | |
torchaudio.save(wav_file, torch.FloatTensor(audio), 44100) | |
# Convert abc notation to SVG | |
tmp_midi = f'tmp/{conversation_id}/{ts}.mid' | |
midi_file = s.dump_midi(tmp_midi) | |
svg_file = f'tmp/{conversation_id}/{ts}.svg' | |
convert_midi_to_svg(tmp_midi, svg_file) | |
return svg_file, wav_file | |
else: | |
return None, None | |
if __name__ == "__main__": | |
gradio_app = gr.Interface( | |
parse_abc_notation, | |
inputs=["text"], | |
outputs=[gr.Image(label="Processed Image"), gr.Audio(label="Result")], | |
title="Hot Dog? Or Not?", | |
) | |
gradio_app.launch() |