File size: 1,633 Bytes
a931541
 
ff647b0
 
1de73a8
789718b
ff647b0
e49932c
 
 
 
 
 
 
 
3f41985
a973402
3f41985
a973402
f19aeec
e49932c
 
 
776a79b
e49932c
 
 
50efdde
e49932c
 
 
 
 
 
a1f6dfc
 
a9764fc
ff647b0
1de73a8
e49932c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c7cb9a5
 
 
 
ff647b0
c7cb9a5
a931541
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import gradio as gr

from musicautobot.utils.setup_musescore import play_wav
from music21.midi.translate import midiFileToStream
from pathlib import Path
from midi2audio import FluidSynth

from musicautobot.numpy_encode import *
from musicautobot.config import *
from musicautobot.music_transformer import *
from musicautobot.utils.midifile import *
from musicautobot.utils.file_processing import process_all

import pickle

import subprocess
import os

print(os.getcwd())

# Load the stored data. This is needed to generate the vocab.
data_dir = Path('data/')
data = load_data(data_dir, 'data.pkl')

# Default config options
config = default_config()
config['encode_position'] = True

# Load our fine-tuned model
learner = music_model_learner(
    data, 
    config=config.copy(),
    pretrained_path='model.pth'
)



def process_midi(midi_file):
    name = Path(midi_file.name)
    
    # create the model input object
    item = MusicItem.from_file(name, data.vocab);

    # full is the prediction appended to the input
    pred, full = learn.predict(item, n_words=100)
   
    # convert to stream and then MIDI file
    stream = full.to_stream()
    out = music21.midi.translate.streamToMidiFile(stream)
    
    # save MIDI file
    out.open('result.midi', 'wb')
    out.write()
    out.close()
    
    # use fluidsynth to convert MIDI to WAV so the user can hear the output
    sound_font = "/usr/share/sounds/sf2/FluidR3_GM.sf2"
    FluidSynth(sound_font).midi_to_audio('result.midi', 'result.wav')
    return 'result.wav'

iface = gr.Interface(
    fn=process_midi, 
    inputs="file", 
    outputs="audio"
)

iface.launch()