jerald
new fastai
50cd1cc
from musicautobot.numpy_encode import *
from musicautobot.utils.file_processing import process_all, process_file
from musicautobot.config import *
from musicautobot.music_transformer import *
from musicautobot.utils.setup_musescore import setup_musescore
setup_musescore()
import gradio as gr
from midi2audio import FluidSynth
import tempfile
import os
# Bootloading model
data_path = Path('./')
data = MusicDataBunch.empty(data_path)
vocab = data.vocab
pretrained_path='./music_transformer.pth'
learn = music_model_learner(data, pretrained_path=pretrained_path, config=default_config())
def predict(seed_midi, n_words=400, temperature1=1.1, temperature2=0.4, min_bars=12, top_k=24, top_p=0.7):
# Load input MIDI file as MusicItem
cutoff_beat = 10
item = MusicItem.from_file(seed_midi.name, data.vocab)
seed_item = item.trim_to_beat(cutoff_beat)
# Generate prediction
pred, full = learn.predict(seed_item, n_words=n_words, temperatures=(temperature1, temperature2), min_bars=min_bars, top_k=top_k, top_p=top_p)
# Convert input MIDI to audio
with tempfile.NamedTemporaryFile(delete=False, suffix='.wav') as seed_audio_temp:
FluidSynth("sound_font.sf2").midi_to_audio(seed_midi.name, seed_audio_temp.name)
# Save generated MIDI as temporary file
with tempfile.NamedTemporaryFile(delete=False, suffix='.midi') as pred_midi_temp:
pred.stream.write('midi', fp=pred_midi_temp.name)
# Convert generated MIDI to audio
with tempfile.NamedTemporaryFile(delete=False, suffix='.wav') as pred_audio_temp:
FluidSynth("sound_font.sf2").midi_to_audio(pred_midi_temp.name, pred_audio_temp.name)
# Cleanup temporary MIDI file
os.remove(pred_midi_temp.name)
return seed_audio_temp.name, pred_audio_temp.name
iface = gr.Interface(fn=predict,
inputs=[
gr.inputs.File(label="Seed MIDI"),
gr.inputs.Slider(50, 1000, step=10, default=400, label="Number of Words"),
gr.inputs.Slider(0.0, 2.0, step=0.1, default=1.1, label="Temperature 1"),
gr.inputs.Slider(0.0, 2.0, step=0.1, default=0.4, label="Temperature 2"),
gr.inputs.Slider(1, 32, step=1, default=12, label="Min Bars"),
gr.inputs.Slider(1, 50, step=1, default=24, label="Top K"),
gr.inputs.Slider(0.0, 1.0, step=0.1, default=0.7, label="Top P")
],
outputs=[
gr.outputs.Audio(type='filepath', label="Seed Audio"),
gr.outputs.Audio(type='filepath', label="Generated Audio")
],)
iface.launch()