From 5ac874ef8e813ce60a97831de6865ece73cd6da0 Mon Sep 17 00:00:00 2001 From: Cainan Date: Mon, 24 Jun 2024 20:04:46 +0100 Subject: [PATCH] Changes --- TaikoSongConversionTool/gui.py | 19 ++++++++++++++----- TjaBatchConvert/batch_convert.py | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 44 insertions(+), 7 deletions(-) diff --git a/TaikoSongConversionTool/gui.py b/TaikoSongConversionTool/gui.py index 485c18e..3be697c 100644 --- a/TaikoSongConversionTool/gui.py +++ b/TaikoSongConversionTool/gui.py @@ -593,6 +593,7 @@ def export_data(): if custom_songs: for item_id in selected_items: + song_id = tree.item(item_id)["values"][2] custom_fumen_folder_path = os.path.join(custom_data_dir, "fumen", str(song_id)) if os.path.exists(custom_fumen_folder_path): @@ -797,8 +798,20 @@ def export_data(): # Find the wordlist items corresponding to song variations word_keys = [f"song_{song_id}", f"song_sub_{song_id}", f"song_detail_{song_id}"] + + def find_word_info(key, word_lists): + for word_list in word_lists: + word_info = next((item for item in word_list["items"] if item["key"] == key), None) + if word_info: + return word_info + return None + + word_lists = [word_list] + if custom_songs: + word_lists.append(custom_word_list) + for key in word_keys: - word_info = next((item for item in word_list["items"] if item["key"] == key), None) + word_info = find_word_info(key, word_lists) if word_info: selected_wordlist.append(word_info) @@ -834,8 +847,6 @@ def export_data(): if os.path.exists(f"song_{song_id}.mp3.at9"): os.remove(f"song_{song_id}.mp3.at9") print(f"Deleted song_{song_id}.mp3.at9") - else: - print(f"Error: File song_{song_id}.mp3.at9 not found.") # Check if preview_pos or custom_preview_pos is not None and run conversion if preview_pos is not None or (custom_songs and custom_preview_pos is not None): @@ -899,8 +910,6 @@ def export_data(): if os.path.exists(f"song_{song_id}.mp3.idsp"): os.remove(f"song_{song_id}.mp3.idsp") print(f"Deleted song_{song_id}.mp3.idsp") - else: - print(f"Error: File song_{song_id}.mp3.idsp not found.") # Check if preview_pos or custom_preview_pos is not None and run conversion if preview_pos is not None or (custom_songs and custom_preview_pos is not None): diff --git a/TjaBatchConvert/batch_convert.py b/TjaBatchConvert/batch_convert.py index e8353f0..140d7ec 100644 --- a/TjaBatchConvert/batch_convert.py +++ b/TjaBatchConvert/batch_convert.py @@ -4,6 +4,7 @@ import shutil from pydub import AudioSegment import subprocess import concurrent.futures +from concurrent.futures import ThreadPoolExecutor import argparse import logging from threading import Lock @@ -238,10 +239,20 @@ def move_and_rename_bin_files(tja_path, output_dir, unique_id): output_path = os.path.join(output_dir, f"fumen/cs{unique_id:04d}") os.makedirs(output_path, exist_ok=True) - for difficulty in ["_e", "_n", "_h", "_x", "_m"]: + difficulties = ["_e", "_n", "_h", "_x", "_m"] + any_bin_file_moved = False + + for difficulty in difficulties: bin_file = f"{os.path.splitext(tja_path)[0]}{difficulty}.bin" if os.path.exists(bin_file): shutil.move(bin_file, os.path.join(output_path, f"cs{unique_id:04d}{difficulty}.bin")) + any_bin_file_moved = True + + if not any_bin_file_moved: + # Move the generic .bin file as cs{unique_id:04d}_m.bin + generic_bin_file = f"{os.path.splitext(tja_path)[0]}.bin" + if os.path.exists(generic_bin_file): + shutil.move(generic_bin_file, os.path.join(output_path, f"cs{unique_id:04d}_m.bin")) def process_song_charts(dir_path, file, output_folder, unique_id): tja_path = os.path.join(dir_path, file) @@ -253,15 +264,32 @@ def process_song_metadata(dir_path, file, genre_no, unique_id, output_folder): info = parse_tja(tja_path) create_json_files(info, genre_no, unique_id, output_folder) +#def process_song_audio(dir_path, file, unique_id, output_folder): +# tja_path = os.path.join(dir_path, file) +# info = parse_tja(tja_path) +# convert_audio(os.path.join(dir_path, info['WAVE']), os.path.join(output_folder, f"sound/song_cs{unique_id:04d}.mp3")) + def process_song_audio(dir_path, file, unique_id, output_folder): tja_path = os.path.join(dir_path, file) info = parse_tja(tja_path) convert_audio(os.path.join(dir_path, info['WAVE']), os.path.join(output_folder, f"sound/song_cs{unique_id:04d}.mp3")) +def process_songs_multithreaded(dir_path, files, output_folder): + with ThreadPoolExecutor() as executor: + futures = [] + for unique_id, file in enumerate(files): + futures.append(executor.submit(process_song_audio, dir_path, file, unique_id, output_folder)) + + # Optionally, wait for all futures to complete + for future in futures: + future.result() + + + def process_song(dir_path, file, genre_no, unique_id, output_folder): try: - process_song_charts(dir_path, file, output_folder, unique_id) process_song_audio(dir_path, file, unique_id, output_folder) + process_song_charts(dir_path, file, output_folder, unique_id) process_song_metadata(dir_path, file, genre_no, unique_id, output_folder) #logging.info(f"Processed {file} successfully.") except Exception as e: