BilalSardar's picture
Update app.py
a341184
import sys
import os
from pathlib import Path
import json
import secrets
import copy
import gradio as gr
import TMIDI
import urllib
from fuzzywuzzy import fuzz
from fuzzywuzzy import process
from itertools import islice, accumulate
from pprint import pprint
import tqdm.auto
from tqdm import auto
from midi2audio import FluidSynth
from IPython.display import display, Javascript, HTML, Audio
# only for plotting pianoroll
import pretty_midi
import librosa.display
import matplotlib.pyplot as plt
import mido
from midi2audio import FluidSynth
#midtoaud=gr.Interface.load(name="spaces/kboaten/MIDI-Audio-Extension")
print('Loading the Karaoke model. Please wait...')
data = TMIDI.Tegridy_Any_Pickle_File_Loader('Karaoke-English-Full')
print('Done!')
print('Prepping data...')
kar_ev_f = data[2]
kar = []
karaoke = []
for k in auto.tqdm(kar_ev_f):
k.sort(reverse=False, key=lambda x: x[1])
for kk in k:
if kk[0] == 'note' or kk[0] == 'text_event':
kar.append(kk)
kar_words = []
for o in auto.tqdm(kar):
if o[0] != 'note':
kar_words.append(str(o[2]).lower())
print('Done! Enjoy! :)')
def TextToMusic(lyrics,notes,rand):
text = list(lyrics.split("."))
randomize_words_matching = rand
song = []
words_lst = ''
print('=' * 100)
print('Deep-Muse Text to Music Generator')
print('Starting up...')
print('=' * 100)
for t in auto.tqdm(text):
txt = t.lower().split(' ')
kar_words_split = list(TMIDI.Tegridy_List_Slicer(kar_words, len(txt)))
ratings = []
for k in kar_words_split:
ratings.append(fuzz.ratio(txt, k))
if randomize_words_matching:
try:
ind = ratings.index(secrets.choice([max(ratings)-5, max(ratings)-4, max(ratings)-3, max(ratings)-2, max(ratings)-1, max(ratings)]))
except:
ind = ratings.index(max(ratings))
else:
ind = ratings.index(max(ratings))
words_list = kar_words_split[ind]
pos = ind * len(txt)
print(words_list)
words_lst += ' '.join(words_list) + chr(10)
c = 0
for i in range(len(kar)):
if kar[i][0] != 'note':
if c == pos:
idx = i
break
if kar[i][0] != 'note':
c += 1
c = 0
for i in range(idx, len(kar)):
if kar[i][0] != 'note':
if c == len(txt):
break
if kar[i][0] == 'note':
song.append(kar[i])
if kar[i][0] != 'note':
c += 1
song.append(kar[i])
so = [y for y in song if len(y) > 3]
if so != []: sigs = TMIDI.Tegridy_MIDI_Signature(so, so)
print('=' * 100)
print(sigs[0])
print('=' * 100)
song1 = []
p = song[0]
p[1] = 0
time = 0
song.sort(reverse=False, key=lambda x: x[1])
for i in range(len(song)-1):
ss = copy.deepcopy(song[i])
if song[i][1] != p[1]:
if abs(song[i][1] - p[1]) > 1000:
time += 300
else:
time += abs(song[i][1] - p[1])
ss[1] = time
song1.append(ss)
p = copy.deepcopy(song[i])
else:
ss[1] = time
song1.append(ss)
p = copy.deepcopy(song[i])
pprint(words_lst, compact=True)
print('=' * 100)
TMIDI.Tegridy_SONG_to_MIDI_Converter(song1, output_file_name='deep-muse-Output-MIDI')
fname = 'deep-muse-Output-MIDI'
fn = os.path.basename(fname + '.mid')
fn1 = fn.split('.')[0]
print('Playing and plotting composition...')
pm = pretty_midi.PrettyMIDI(fname + '.mid')
# Retrieve piano roll of the MIDI file
piano_roll = pm.get_piano_roll()
plt.figure(figsize=(14, 5))
librosa.display.specshow(piano_roll, x_axis='time', y_axis='cqt_note', fmin=1, hop_length=160, sr=16000, cmap=plt.cm.hot)
plt.title('Composition: ' + fn1)
plt.savefig('my_plot.png')
print('Synthesizing the last output MIDI. Please stand-by... ')
# url=midtoaud("deep-muse-Output-MIDI.mid",int(notes),fn_index=0)
# save_as = "file.wav"
# data1 = urllib.request.urlopen(url)
# f = open(save_as,'wb')
# f.write(data1.read())
# f.close()
mid = mido.MidiFile("deep-muse-Output-MIDI.mid")
fs = FluidSynth()
fs.midi_to_audio("deep-muse-Output-MIDI.mid", 'file.wav')
return 'file.wav','my_plot.png'
demo = gr.Interface(
fn=TextToMusic,
inputs=[gr.inputs.Textbox(label='Enter Prompt'),gr.inputs.Number(label='Enter Number of Notes'),gr.inputs.Checkbox(label="randomize_words_matching")],
outputs=["audio","image"],
examples=[["I love you very very much.I can not live without you.You always present on my mind.I often think about you.I am all out of love I am so lost without you.",100,True]],
title="Lyrics Text To Music",
)
demo.launch(debug=True)