Spaces:
Runtime error
Runtime error
import json, re | |
import gradio as gr | |
import numpy as np | |
import chardet | |
from taiko import ( | |
preprocess, | |
generate_taiko_wav, | |
COURSE | |
) | |
def txt_loads(data_str:str): | |
data = [] | |
current_course = None | |
chart = [] | |
for line in data_str.split('\n'): | |
if line.startswith("course:"): | |
if current_course is not None: | |
data.append({"course": current_course, "chart": chart}) | |
chart = [] | |
current_course = int(re.search(r'\d+', line).group()) | |
elif line: | |
line = line.strip("[]") | |
nums = line.split(",") | |
chart.append([int(nums[0]), float(nums[1])]) | |
if current_course is not None: | |
data.append({"course": current_course, "chart": chart}) | |
output_data = {"data": data} | |
return output_data | |
def handle(chart_path:str, music_path:str): | |
with open(chart_path, "rb") as file: | |
raw_data = file.read(4096) | |
result = chardet.detect(raw_data) | |
encoding = result["encoding"] | |
if chart_path.endswith(".json"): | |
data = json.loads(open(chart_path, "r", encoding=encoding).read()) | |
elif chart_path.endswith(".txt"): | |
data = txt_loads(open(chart_path, "r", encoding=encoding).read()) | |
if len(data["data"]) < 0 and len(data["data"]) > 5: | |
raise("Issue occur: chart data") | |
for d in data["data"]: | |
chart = preprocess(d["chart"]) | |
audio = generate_taiko_wav(chart, music_path) | |
COURSE[d["course"]]["audio"] = audio | |
c = 2 | |
if music_path is None: c = 1 | |
return \ | |
(COURSE[0]["audio"].frame_rate * c, np.array(COURSE[0]["audio"].get_array_of_samples())), \ | |
(COURSE[1]["audio"].frame_rate * c, np.array(COURSE[1]["audio"].get_array_of_samples())), \ | |
(COURSE[2]["audio"].frame_rate * c, np.array(COURSE[2]["audio"].get_array_of_samples())), \ | |
(COURSE[3]["audio"].frame_rate * c, np.array(COURSE[3]["audio"].get_array_of_samples())), \ | |
(COURSE[4]["audio"].frame_rate * c, np.array(COURSE[4]["audio"].get_array_of_samples())) | |
if __name__ == "__main__": | |
inputs = [ | |
gr.File(label="太鼓達人譜面/Taiko Chart Data (json or txt)", file_types=[".json", ".txt"]), | |
gr.File(label="譜面音樂/Chart Music (ogg) (Optional)", file_types=[".ogg"]) | |
] | |
outputs = [gr.Audio(label=course["label"], format="mp3") for course in COURSE] | |
demo = gr.Interface(fn=handle, inputs=inputs, outputs=outputs, title="程設二作業HW0105 / Taiko Music Generator") | |
demo.launch() | |