File size: 2,386 Bytes
a931541
 
ff647b0
 
1de73a8
789718b
ff647b0
84a8d96
2dcf4b6
e49932c
 
84a8d96
e49932c
 
 
3f41985
a973402
3f41985
a973402
f19aeec
e49932c
d02a40d
84a8d96
e49932c
776a79b
c90d42e
 
d02a40d
c90d42e
 
 
 
e49932c
 
 
50efdde
c90d42e
d02a40d
e49932c
 
 
c90d42e
 
e49932c
a1f6dfc
d02a40d
 
a1f6dfc
a9764fc
1f0a89c
7a02029
 
 
 
e49932c
 
a099098
e49932c
 
1f0a89c
 
 
 
 
 
e49932c
 
 
 
 
 
 
 
 
 
 
 
 
 
c7cb9a5
 
 
7a02029
 
 
1f0a89c
 
7a02029
a099098
7a02029
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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 default_config
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.
print('Loading data to build vocabulary.')
data_dir = Path('.')
data = load_data(data_dir, 'data.pkl')

from huggingface_hub import hf_hub_download

print('Downloading model.')
model_cache_path = hf_hub_download(repo_id="psistolar/musicautobot-fine1", filename="model.pth")



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


print("Building model.")
# Load our fine-tuned model
learner = music_model_learner(
    data, 
    config=config.copy(), 
    pretrained_path=model_cache_path
)

print("Ready to use.")



def process_midi(MIDI_File, Text_to_Sonify, Randomness, Amount_of_Music_to_Add):
    if MIDI_File is not None:
        name = Path(MIDI_File.name)
    else:
        name = Path('C Major Scale.midi')
    
    # create the model input object
    item = MusicItem.from_file(name, data.vocab)

    # full is the prediction appended to the input
    temp = Randomness / 100
    pred, full = learner.predict(
        item, 
        n_words=Amount_of_Music_to_Add,
        temperatures=(temp, temp)
    )
   
    # 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=[
        gr.inputs.File(optional=True),
        "text", 
        gr.inputs.Slider(0, 250, default=100, step=50),
        gr.inputs.Radio([100, 200, 500], type="value", default=100)
        ], 
    outputs="audio",
    # examples=['C major scale.midi']
)

iface.launch()