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.")