Spaces:
Running
Running
| import streamlit as st | |
| import torch | |
| from unidecode import unidecode | |
| from musc.model import PretrainedModel | |
| from unidecode import unidecode | |
| import os | |
| import sys | |
| import torch | |
| import json | |
| #from yt_dlp import YoutubeDL | |
| sys.path.append('MUSC_violin') | |
| from MUSC_violin import musc | |
| # Function to transcribe the WAV file and generate the MIDI file | |
| def transcribe_and_generate_midi(wav_file_path, model, batch_size=32, postprocessing='spotify'): | |
| midi, _, title = model.transcribe_wav(wav_file_path, batch_size=batch_size, postprocessing=postprocessing) | |
| # Write the MIDI file | |
| midi_file_name = unidecode(title) + '.mid' | |
| midi.write(midi_file_name) | |
| return midi_file_name, title | |
| # Set up the Pretrained Model | |
| device = 'cuda' if torch.cuda.is_available() else 'cpu' | |
| model = PretrainedModel(instrument='violin').to(device) | |
| # Streamlit UI | |
| st.title("Violin to MIDI Converter") | |
| uploaded_file = st.file_uploader("Upload your WAV file", type=["wav"]) | |
| if uploaded_file is not None: | |
| st.write("File Uploaded Successfully!") | |
| st.audio(uploaded_file, format='audio/wav') | |
| if st.button("Convert to MIDI"): | |
| try: | |
| midi_file_name, title = transcribe_and_generate_midi(uploaded_file, model) | |
| st.success(f"MIDI file generated successfully: {midi_file_name}") | |
| st.audio(midi_file_name, format='audio/midi', label='Download MIDI') | |
| except Exception as e: | |
| st.error(f"Error: {str(e)}") | |
| else: | |
| st.info("Please upload a WAV file to convert to MIDI.") | |