Spaces:
Sleeping
Sleeping
"""Ultrastar txt parser""" | |
from modules.console_colors import ULTRASINGER_HEAD | |
from modules.Ultrastar.ultrastar_converter import ( | |
get_end_time_from_ultrastar, | |
get_start_time_from_ultrastar, | |
) | |
from modules.Ultrastar.ultrastar_txt import UltrastarTxtValue, UltrastarTxtTag, UltrastarTxtNoteTypeTag, FILE_ENCODING | |
def parse_ultrastar_txt(input_file: str) -> UltrastarTxtValue: | |
"""Parse ultrastar txt file to UltrastarTxt class""" | |
print(f"{ULTRASINGER_HEAD} Parse ultrastar txt -> {input_file}") | |
with open(input_file, "r", encoding=FILE_ENCODING) as file: | |
txt = file.readlines() | |
ultrastar_class = UltrastarTxtValue() | |
count = 0 | |
# Strips the newline character | |
for line in txt: | |
count += 1 | |
if line.startswith("#"): | |
if line.startswith(f"#{UltrastarTxtTag.ARTIST}"): | |
ultrastar_class.artist = line.split(":")[1].replace("\n", "") | |
elif line.startswith(f"#{UltrastarTxtTag.TITLE}"): | |
ultrastar_class.title = line.split(":")[1].replace("\n", "") | |
elif line.startswith(f"#{UltrastarTxtTag.MP3}"): | |
ultrastar_class.mp3 = line.split(":")[1].replace("\n", "") | |
elif line.startswith(f"#{UltrastarTxtTag.AUDIO}"): | |
ultrastar_class.audio = line.split(":")[1].replace("\n", "") | |
elif line.startswith(f"#{UltrastarTxtTag.VIDEO}"): | |
ultrastar_class.video = line.split(":")[1].replace("\n", "") | |
elif line.startswith(f"#{UltrastarTxtTag.GAP}"): | |
ultrastar_class.gap = line.split(":")[1].replace("\n", "") | |
elif line.startswith(f"#{UltrastarTxtTag.BPM}"): | |
ultrastar_class.bpm = line.split(":")[1].replace("\n", "") | |
elif line.startswith(( | |
f"{UltrastarTxtNoteTypeTag.FREESTYLE} ", | |
f"{UltrastarTxtNoteTypeTag.NORMAL} ", | |
f"{UltrastarTxtNoteTypeTag.GOLDEN} ", | |
f"{UltrastarTxtNoteTypeTag.RAP} ", | |
f"{UltrastarTxtNoteTypeTag.RAP_GOLDEN} ")): | |
parts = line.split() | |
# [0] F : * R G | |
# [1] start beat | |
# [2] duration | |
# [3] pitch | |
# [4] word | |
ultrastar_class.noteType.append(parts[0]) | |
ultrastar_class.startBeat.append(parts[1]) | |
ultrastar_class.durations.append(parts[2]) | |
ultrastar_class.pitches.append(parts[3]) | |
ultrastar_class.words.append(parts[4] if len(parts) > 4 else "") | |
# do always as last | |
pos = len(ultrastar_class.startBeat) - 1 | |
ultrastar_class.startTimes.append( | |
get_start_time_from_ultrastar(ultrastar_class, pos) | |
) | |
ultrastar_class.endTimes.append( | |
get_end_time_from_ultrastar(ultrastar_class, pos) | |
) | |
# todo: Progress? | |
return ultrastar_class | |