File size: 1,633 Bytes
7cbc42d
 
ff647b0
 
1de73a8
789718b
ff647b0
84a8d96
e49932c
 
 
84a8d96
e49932c
 
 
3f41985
a973402
3f41985
a973402
f19aeec
e49932c
84a8d96
e49932c
776a79b
e49932c
 
 
50efdde
e49932c
 
 
 
 
 
a1f6dfc
 
a9764fc
ff647b0
1de73a8
e49932c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c7cb9a5
 
 
 
ff647b0
c7cb9a5
7cbc42d
 
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 = 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()