asigalov61's picture
Update app.py
cc4a711 verified
raw
history blame
5.4 kB
#================================================================
# https://huggingface.co/spaces/asigalov61/MIDI-Identification
#================================================================
import os
import hashlib
import time
import datetime
from pytz import timezone
import copy
from collections import Counter
import random
import statistics
import gradio as gr
import TMIDIX
#==========================================================================================================
def ID_MIDI(input_midi,
render_type,
soundfont_bank,
render_sample_rate,
custom_render_patch,
render_align,
render_transpose_value,
render_transpose_to_C4,
render_output_as_solo_piano,
render_remove_drums
):
print('*' * 70)
print('Req start time: {:%Y-%m-%d %H:%M:%S}'.format(datetime.datetime.now(PDT)))
start_time = time.time()
print('=' * 70)
print('Loading MIDI...')
fn = os.path.basename(input_midi)
fn1 = fn.split('.')[0]
fdata = open(input_midi, 'rb').read()
input_midi_md5hash = hashlib.md5(fdata).hexdigest()
print('=' * 70)
print('Requested settings:')
print('=' * 70)
print('Input MIDI file name:', fn)
print('Input MIDI md5 hash', input_midi_md5hash)
print('-' * 70)
print('Render type:', render_type)
print('Soudnfont bank', soundfont_bank)
print('Audio render sample rate', render_sample_rate)
print('Custom MIDI render patch', custom_render_patch)
print('Align to bars:', render_align)
print('Transpose value:', render_transpose_value)
print('Transpose to C4', render_transpose_to_C4)
print('Output as Solo Piano', render_output_as_solo_piano)
print('Remove drums:', render_remove_drums)
print('=' * 70)
print('Processing MIDI...Please wait...')
#=======================================================
# START PROCESSING
raw_score = TMIDIX.midi2single_track_ms_score(fdata)
escore = TMIDIX.advanced_score_processor(raw_score, return_enhanced_score_notes=True)[0]
escore = TMIDIX.augment_enhanced_score_notes(escore, timings_divider=1)
first_note_index = [e[0] for e in raw_score[1]].index('note')
cscore = TMIDIX.chordify_score([1000, escore])
meta_data = raw_score[1][:first_note_index] + [escore[0]] + [escore[-1]] + [raw_score[1][-1]]
print('Done!')
print('=' * 70)
print('Input MIDI metadata:', meta_data[:5])
print('=' * 70)
print('Processing...Please wait...')
print('-' * 70)
new_md5_hash = hashlib.md5(open(new_fn,'rb').read()).hexdigest()
print('Done!')
print('=' * 70)
#========================================================
output_midi_md5 = str(new_md5_hash)
output_midi_title = str(fn1)
output_midi_summary = str(meta_data)
output_midi = str(new_fn)
output_audio = (srate, audio)
output_plot = None
print('Output MIDI file name:', output_midi)
print('Output MIDI title:', output_midi_title)
print('Output MIDI hash:', output_midi_md5)
print('Output MIDI summary:', output_midi_summary[:5])
print('=' * 70)
#========================================================
print('Req end time: {:%Y-%m-%d %H:%M:%S}'.format(datetime.datetime.now(PDT)))
print('-' * 70)
print('Req execution time:', (time.time() - start_time), 'sec')
print('*' * 70)
#========================================================
return output_midi_md5, output_midi_title, output_midi_summary, output_midi, output_audio, output_plot
#==========================================================================================================
if __name__ == "__main__":
PDT = timezone('US/Pacific')
print('=' * 70)
print('App start time: {:%Y-%m-%d %H:%M:%S}'.format(datetime.datetime.now(PDT)))
print('=' * 70)
app = gr.Blocks()
with app:
gr.Markdown("<h1 style='text-align: center; margin-bottom: 1rem'>MIDI Identification</h1>")
gr.Markdown("<h1 style='text-align: center; margin-bottom: 1rem'>Identify any MIDI</h1>")
gr.Markdown("This is a demo for tegridy-tools\n\n"
"Please see [tegridy-tools](https://github.com/asigalov61/tegridy-tools) GitHub repo for more information\n\n"
)
gr.Markdown("## Upload your MIDI")
input_midi = gr.File(label="Input MIDI", file_types=[".midi", ".mid", ".kar"], type="filepath")
submit = gr.Button("Render MIDI", variant="primary")
gr.Markdown("## MIDI identification results")
output_midi_md5 = gr.Textbox(label="Output MIDI md5 hash")
output_midi_title = gr.Textbox(label="Output MIDI title")
output_midi_summary = gr.Textbox(label="Output MIDI summary")
run_event = submit.click(ID_MIDI, [input_midi,
],
[output_midi_md5,
output_midi_title,
output_midi_summary,
])
app.queue().launch()