-
Notifications
You must be signed in to change notification settings - Fork 447
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[MuseCoco] REMI to MIDI Translation #170
Comments
Same issue. Did you manage to find a solution? |
I got remi files(0.txt and 1.txt) Then how to get midi file to remi files?? |
I have the same problem that it only generates remi files. The solution is to fix bugs in change after that, you can run the scripts below to generate midi files import os
from midiprocessor import MidiDecoder, MidiEncoder
date = "0117"
midi_root = f"./generation/{date}/linear_mask-1billion-attribute2music/infer_test/topk15-t1.0-ngram0"
midi_decoder = MidiDecoder("REMIGEN2")
print(midi_decoder)
midi_list = []
error_midi_list = []
for folder_name in os.listdir(midi_root):
folder_dir = os.path.join(midi_root, folder_name)
# not folder, Using_pred_labels.txt etc
if os.path.isfile(folder_dir):
continue
# remi_name: 0.txt, 1.txt...
remi_dir = os.path.join(folder_dir, 'remi')
midi_dir = os.path.join(folder_dir, 'midi')
for remi_name in os.listdir(remi_dir):
with open(os.path.join(remi_dir, remi_name), 'r') as f:
hypo_str = f.read()
# since the seq looks like this: prefix <seq> remi
# we have to get the remi tokens by discard the prefix tokens and <seq>
# orginal:
# remi_token = hypo_str.split(" ")[sep_pos[id_] + 1:]
remi_token = hypo_str.split(" <sep> ")[1].split(" ")
os.makedirs(midi_dir, exist_ok=True)
midi_save_path = os.path.join(midi_dir, remi_name.replace('.txt', '.mid'))
midi_list.append(midi_save_path)
try:
midi_obj = midi_decoder.decode_from_token_str_list(remi_token)
midi_obj.dump(midi_save_path)
except:
error_midi_list.append(midi_save_path)
print(len(midi_list))
print(len(error_midi_list)) I also got the assertion error as @cpadilha did. 39/560 midi files have that problem. |
@feiyuehchen Thank you so much. This works well |
@feiyuehchen Sir, I wonder one more thing. What should I do to use the text I want as an input? |
@Subin-Kim46 you could print prefix_input = hypo_str.split(" <sep> ")[0].split(" ") |
@feiyuehchen Thank you so much |
Was anyone capable of fulfilling the music generation step? I mean, generating the MIDI files? It seems broken.
muzic/musecoco/2-attribute2music_model/midiprocessor/enc_remigen2_utils.py:252, in generate_midi_obj_from_remigen_token_list(token_list, vocab_manager, ignore_velocity, ticks_per_beat, ts, tempo, inst_id, velocity)
247 if ignore_velocity:
248 raise ValueError(
249 "Invalid token for velocity (%s) while setting ignore_velocity=True" % ('%s-%s' % item)
250 )
--> 252 assert last_item_type == const.DURATION_ABBR
253 cur_velocity = vocab_manager.convert_id_to_vel(item_value)
255 start_pos = cur_global_pos
AssertionError:
The text was updated successfully, but these errors were encountered: