diff --git a/app.py b/app.py index d7b0afe..2618540 100644 --- a/app.py +++ b/app.py @@ -119,7 +119,7 @@ class AnimeWwise(QMainWindow): def progressBarSlot(self, progress): if progress[0] == "total": self.totalProgress.setValue(progress[1]) - elif progress[0] == "task": + elif progress[0] == "file": self.fileProgress.setValue(progress[1]) @pyqtSlot(dict) @@ -144,6 +144,7 @@ class AnimeWwise(QMainWindow): self.tabs.setTabEnabled(2, True) self.tabs.setCurrentIndex(2) print("Finished extracting everything !") + os.startfile(self.folders["output"]) # page 1 - config def loadFiles(self): @@ -239,7 +240,7 @@ class AnimeWwise(QMainWindow): # yet another block of threading bs self.backgroundThread = QThread() - self.backgroundWorker = BackgroundWorker("extract", self.extract, {"input": self.folders["input"], "files": checked_items, "format": "wem", "output": self.folders["output"]}) + self.backgroundWorker = BackgroundWorker("extract", self.extract, {"input": self.folders["input"], "files": checked_items, "format": self.outputFormat.currentText()[:3], "output": self.folders["output"]}) self.backgroundWorker.moveToThread(self.backgroundThread) self.backgroundThread.started.connect(self.backgroundWorker.run) self.backgroundWorker.finished.connect(self.handleFinished) diff --git a/extract.py b/extract.py index 6228c1e..4ffdabc 100644 --- a/extract.py +++ b/extract.py @@ -368,27 +368,82 @@ class WwiseExtract: ### extracting files ### - def extract_files(self, _input, files, output, format, progress): + def extract_files(self, _input, files, output, _format, progress): + temp_dir = tempfile.TemporaryDirectory() + + # wem + if _format == "wem": + output_folder = output + else: + output_folder = os.path.join(temp_dir.name, "wem") + + self.extract_wem(_input, files, output_folder, progress) + + if _format == "wem": + temp_dir.cleanup() + return + + # wav + new_input = output_folder + files = [os.path.join("/".join(file["path"]), file["name"]) for file in files] + + if _format == "wav": + output_folder = output + else: + output_folder = os.path.join(temp_dir.name, "wav") + + self.extract_wav(new_input, files, output_folder, progress) + + if _format == "wav": + temp_dir.cleanup() + return + + new_input = output_folder + # TODO: add mp3 and ogg + + def extract_wem(self, _input, files, output, progress): + print(": Extracting audio as wem") all_sources = list(set([e["source"] for e in files])) - + for source in all_sources: self.allocator.load_file(os.path.join(_input, source)) pos = 0 for file in files: pos += 1 - progress(["total", pos * 100 // len(files)]) + progress(["file", pos * 100 // len(files)]) data = self.allocator.read_at(file["source"], file["offset"], file["size"]) + filepath = os.path.join("/".join(file["path"]), file["name"]) fullpath = os.path.join(output, filepath) os.makedirs(os.path.dirname(fullpath), exist_ok=True) + with open(fullpath, "wb") as f: f.write(data) f.close() self.allocator.free_mem() - os.startfile(output) + + def extract_wav(self, _input, files, output, progress): + print(": Converting audio to wav") + pos = 0 + for file in files: + pos += 1 + progress(["file", pos * 100 // len(files)]) + + filename = f'{os.path.basename(file).split(".")[0]}.wav' + filepath = os.path.join(output, os.path.dirname(file), filename) + os.makedirs(os.path.dirname(filepath), exist_ok=True) + + args = [ + path("tools/vgmstream/vgmstream-cli.exe"), + "-o", + filepath, + os.path.join(_input, file) + ] + + call(args) ### other ###