print("Couldn't find guitar BGM") tmpfile.tmpcleanup() exit(1) tmpfile.add_temp_file(drum_bgm_out) tmpfile.add_temp_file(guitar_bgm_out) music_id = int(os.path.basename(drum_bgm)[3:7]) song_info = mdb.get_song_info_from_csv("gitadora_music.csv", music_id) if song_info is None: song_info = mdb.get_song_info_from_mdb("mdb_xg.xml", music_id) if args.mix_phase: wavbintool.parse_bin(base_bgm, base_bgm_out) wavbintool.parse_bin(drum_bgm, drum_bgm_out) wavbintool.parse_bin(guitar_bgm, guitar_bgm_out) if args.mix_phase: base_audio = pydub.AudioSegment.from_file(base_bgm_out).invert_phase() drum_audio = pydub.AudioSegment.from_file(drum_bgm_out) guitar_audio = pydub.AudioSegment.from_file(guitar_bgm_out) if args.mix_phase: drum_phased = drum_audio.overlay(base_audio) guitar_phased = guitar_audio.overlay(base_audio) drum_phased += args.mix_drum_volume
# Convert to WAV output_filename = filename.replace(".bin", ".wav") output_filename = os.path.join( sound_folder, os.path.basename(filename).replace(".bin", ".wav")) print("Converting %s..." % output_filename) if not args.single_threaded: bgm_thread = threading.Thread(target=wavbintool.parse_bin, args=(filename, output_filename)) bgm_thread.start() running_threads.append(bgm_thread) else: wavbintool.parse_bin(filename, output_filename) else: filenames_bgm = None def handle_set(file_set): if 'seq' not in file_set or not file_set['seq']: return # Extract va3 files if 'sound' in file_set and not args.no_sounds: print("Parsing %s..." % file_set['sound']) vas3tool.read_vas3(file_set['sound'], sound_folder, force_game=("drum" if file_set['sound'][-5] == 'd' else "guitar"))
if not instrument_bgm: results = fnmatch.filter(filenames_bgm_basename, instrument_bgm_pattern) if len(results) > 0: instrument_bgm = results[0] if base_bgm and instrument_bgm: break base_bgm = os.path.join(args.input, base_bgm) instrument_bgm = os.path.join(args.input, instrument_bgm) if base_bgm.endswith(".bin"): base_bgm_out = base_bgm.replace(".bin", ".wav") wavbintool.parse_bin(base_bgm, base_bgm_out) tmpfile.add_temp_file(base_bgm_out) base_bgm = base_bgm_out if instrument_bgm.endswith(".bin"): instrument_bgm_out = instrument_bgm.replace(".bin", ".wav") wavbintool.parse_bin(instrument_bgm, instrument_bgm_out) tmpfile.add_temp_file(instrument_bgm_out) instrument_bgm = instrument_bgm_out music_id = int(os.path.basename(base_bgm)[3:7]) song_info = mdb.get_song_info_from_csv("gitadora_music.csv", music_id) if song_info is None: song_info = mdb.get_song_info_from_mdb("mdb_ex.xml", music_id)
def get_isolated_bgm(input, instrument): if os.path.isfile(input): filenames_bgm, ifs_path = ifs.extract(input) tmpfile.add_temp_folder(ifs_path) input = ifs_path else: filenames_bgm = glob.glob(input + "/bgm*.bin") + glob.glob(input + "/bgm*.wav") ifs_path = input # Find matching BGMs for each isolation type isolation_bgms_bin = { "drum": [("bgm*___k.bin", "bgm*d__k.bin"), ("bgm*___k_xg.bin", "bgm*d__k_xg.bin")], "guitar": [("bgm*__bk.bin", "bgm*_gbk.bin"), ("bgm*__bk_xg.bin", "bgm*_gbk_xg.bin")], "bass": [("bgm*___k.bin", "bgm*__bk.bin"), ("bgm*___k_xg.bin", "bgm*__bk_xg.bin")], } isolation_bgms_wav = { "drum": [("bgm*___k.wav", "bgm*d__k.wav"), ("bgm*___k_xg.wav", "bgm*d__k_xg.wav")], "guitar": [("bgm*__bk.wav", "bgm*_gbk.wav"), ("bgm*__bk_xg.wav", "bgm*_gbk_xg.wav")], "bass": [("bgm*___k.wav", "bgm*__bk.wav"), ("bgm*___k_xg.wav", "bgm*__bk_xg.wav")], } filenames_bgm_basename = [os.path.basename(x) for x in filenames_bgm] base_bgm = None instrument_bgm = None for isolated_bgms in [isolation_bgms_bin, isolation_bgms_wav]: isolated_bgm_set = isolated_bgms[instrument] for (base_bgm_pattern, instrument_bgm_pattern) in isolated_bgm_set: if not base_bgm: results = fnmatch.filter(filenames_bgm_basename, base_bgm_pattern) if len(results) > 0: base_bgm = results[0] if not instrument_bgm: results = fnmatch.filter(filenames_bgm_basename, instrument_bgm_pattern) if len(results) > 0: instrument_bgm = results[0] if base_bgm and instrument_bgm: break if base_bgm and instrument_bgm: break base_bgm = os.path.join(input, base_bgm) instrument_bgm = os.path.join(input, instrument_bgm) if base_bgm.endswith(".bin"): base_bgm_out = base_bgm.replace(".bin", ".wav") wavbintool.parse_bin(base_bgm, base_bgm_out) tmpfile.add_temp_file(base_bgm_out) base_bgm = base_bgm_out if instrument_bgm.endswith(".bin"): instrument_bgm_out = instrument_bgm.replace(".bin", ".wav") wavbintool.parse_bin(instrument_bgm, instrument_bgm_out) tmpfile.add_temp_file(instrument_bgm_out) instrument_bgm = instrument_bgm_out base_audio = pydub.AudioSegment.from_file(base_bgm).invert_phase() instrument_audio = pydub.AudioSegment.from_file(instrument_bgm) instrument_phased = instrument_audio.overlay(base_audio) return instrument_phased, base_bgm