Spaces:
Running
Running
File size: 3,194 Bytes
3888ab7 2278710 3888ab7 06d58f4 3888ab7 cbc2b68 4b3e8cb cbc2b68 4b3e8cb db7f99f 4b3e8cb eba33c8 06d58f4 38457ff 06d58f4 41327e9 3888ab7 1801257 06d58f4 3888ab7 eec4853 3888ab7 eec4853 1aa6fb6 eec4853 3888ab7 e469266 3888ab7 6dd35be 3888ab7 6dd35be 3888ab7 1aa6fb6 3888ab7 cbc2b68 56ab42f c04453c 3888ab7 4b3e8cb 06d58f4 c04453c cbc2b68 4b3e8cb d85cb0d 7dd6e93 |
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 94 95 96 |
import argparse
import glob
import os.path
import gradio as gr
import pickle
import tqdm
import json
import MIDI
from midi_synthesizer import synthesis
import matplotlib.pyplot as plt
in_space = os.getenv("SYSTEM") == "spaces"
def run(midi, progress=gr.Progress()):
mid_seq = MIDI.midi2score(midi)
for m in progress.tqdm(meta_data):
mid_seq = m[1][17:-1]
mid_seq_ticks = m[1][16][1]
mdata = m[1][:16]
break
x = []
y = []
c = []
colors = ['red', 'yellow', 'green', 'cyan',
'blue', 'pink', 'orange', 'purple',
'gray', 'white', 'gold', 'silver',
'lightgreen', 'indigo', 'maroon', 'turquoise']
for s in [m for m in mid_seq if m[0] == 'note']:
x.append(s[1])
y.append(s[4])
c.append(colors[s[3]])
plt.close()
plt.figure(figsize=(14,5))
ax=plt.axes(title='MIDI Search Plot')
ax.set_facecolor('black')
plt.scatter(x,y, c=c)
plt.xlabel("Time")
plt.ylabel("Pitch")
with open(f"output.mid", 'wb') as f:
f.write(MIDI.score2midi([mid_seq_ticks, mid_seq]))
audio = synthesis(MIDI.score2opus([mid_seq_ticks, mid_seq]), soundfont_path)
yield mdata, "output.mid", (44100, audio), plt
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--share", action="store_true", default=False, help="share gradio app")
parser.add_argument("--port", type=int, default=7860, help="gradio server port")
parser.add_argument("--max-gen", type=int, default=1024, help="max")
opt = parser.parse_args()
soundfont_path = "SGM-v2.01-YamahaGrand-Guit-Bass-v2.7.sf2"
meta_data_path = "meta-data/LAMD_META_10000.pickle"
print('Loading meta-data...')
with open(meta_data_path, 'rb') as f:
meta_data = pickle.load(f)
print('Done!')
app = gr.Blocks()
with app:
gr.Markdown("<h1 style='text-align: center; margin-bottom: 1rem'>MIDI Match</h1>")
gr.Markdown("![Visitors](https://api.visitorbadge.io/api/visitors?path=asigalov61.MIDI-Match&style=flat)\n\n"
"MIDI Match\n\n"
"Demo for [MIDI Match](https://github.com/asigalov61)\n\n"
"[Open In Colab]"
"(https://colab.research.google.com/github/asigalov61/MIDI-Match/blob/main/demo.ipynb)"
" for faster running and longer generation"
)
input_midi = gr.File(label="input midi", file_types=[".midi", ".mid"], type="binary")
search_btn = gr.Button("search", variant="primary")
output_audio = gr.Audio(label="output audio", format="mp3", elem_id="midi_audio")
output_midi = gr.File(label="output midi", file_types=[".mid"])
output_midi_seq = gr.Textbox(label="output midi metadata")
output_plot = gr.Plot(label="output midi plot")
run_event = search_btn.click(run, [input_midi],
[output_midi_seq, output_midi, output_audio, output_plot])
app.queue(1).launch(server_port=opt.port, share=opt.share, inbrowser=True) |