1
0
mirror of https://github.com/Escartem/AnimeWwise.git synced 2026-06-05 16:00:27 +08:00

fix bugs and update extract tab

This commit is contained in:
Escartem
2024-11-04 10:15:54 +01:00
parent da8ee97264
commit 6c483b4bc2
3 changed files with 40 additions and 39 deletions

29
app.py
View File

@@ -138,6 +138,9 @@ class AnimeWwise(QMainWindow):
self.actionReset.triggered.connect(lambda: self.resetApp())
self.actionExit.triggered.connect(lambda: self.close())
self.actionExpand_all.triggered.connect(lambda: self.treeWidget.expandAll())
self.actionCollapse_all.triggered.connect(lambda: self.treeWidget.collapseAll())
self.actionExtract_Selected.triggered.connect(lambda: self.extractItems(False))
self.actionExtract_All.triggered.connect(lambda: self.extractItems(True))
@@ -196,6 +199,7 @@ class AnimeWwise(QMainWindow):
if data["action"] == "load":
self.fileStructure = data["content"]
self.updateTreeWidget(self.fileStructure)
self.loadFilesButton.setEnabled(True)
self.setExtractionState(True)
self.tabs.setCurrentIndex(1)
print("Done !")
@@ -224,6 +228,7 @@ class AnimeWwise(QMainWindow):
_map = None
self.resetTreeWidget()
self.loadFilesButton.setEnabled(False)
# why is all this required for threading damnit
self.backgroundThread = QThread()
@@ -262,6 +267,7 @@ class AnimeWwise(QMainWindow):
def resetTreeWidget(self):
self.treeWidget.clear()
self.fileStructure = {"folders": {}, "files": []}
self.audioInfoLabel.setText("Click on an audio file to get more infos !")
self.setExtractionState(False)
def updateTreeWidget(self, structure):
@@ -285,7 +291,21 @@ class AnimeWwise(QMainWindow):
self.treeWidget.itemClicked.connect(self.updateAudioPreview)
def updateAudioPreview(self, item, column):
print(item.text(0))
file_data = self.searchFiles(self.fileStructure, item.text(0))
if file_data == {"folders": {}, "files": []}:
self.audioInfoLabel.setText("Click on an audio file to get more infos !")
return
# flatten path
while file_data["files"] == []:
file_data = list(file_data["folders"].values())[0]
meta = file_data["files"][0][1]["metadata"]
# show meta
text = f'Infos for {item.text(0)} => Channels : {meta["channels"]} | Sample rate : {meta["sampleRate"]} Hz | Bitrate : {meta["avgBitrate"]} kbps | Codec : {meta["codecDisplay"]} | Layout type : {meta["layoutType"]}'
self.audioInfoLabel.setText(text)
def addItems(self, parent, element):
for folder_name in sorted(element.get("folders", {}).keys()):
@@ -301,7 +321,7 @@ class AnimeWwise(QMainWindow):
for file in sorted(element.get("files", [])):
file_meta = file[1]
file_item = QTreeWidgetItem([file[0], f'{round(file_meta["metadata"]["duration"], 2)} seconds', file_meta["source"], str(file_meta["size"]), str(hex(file_meta["offset"]))])
file_item = QTreeWidgetItem([file[0], f'{round(file_meta["metadata"]["duration"], 1)} seconds', file_meta["source"], str(file_meta["size"]), str(hex(file_meta["offset"]))])
file_item.setFlags(file_item.flags() | Qt.ItemIsUserCheckable)
file_item.setCheckState(0, Qt.Unchecked)
if parent is None:
@@ -313,10 +333,6 @@ class AnimeWwise(QMainWindow):
def extractItems(self, _all):
self.setFolder(folder="output")
if self.folders["output"] == "":
QMessageBox.warning(None, "Warning", "Missing output folder !", QMessageBox.Ok)
return
checked_items = []
# todo: use file structure instead of tree view
@@ -366,6 +382,7 @@ class AnimeWwise(QMainWindow):
self.resetTreeWidget()
self.extract.reset()
self.setExtractionState(False)
self.tabs.setCurrentIndex(0)
print("Reset !")
def _appendText(self, text):

35
gui.ui
View File

@@ -241,9 +241,9 @@
<widget class="QWidget" name="horizontalLayoutWidget">
<property name="geometry">
<rect>
<x>0</x>
<x>10</x>
<y>580</y>
<width>1081</width>
<width>1061</width>
<height>31</height>
</rect>
</property>
@@ -251,34 +251,7 @@
<item>
<widget class="QLabel" name="audioInfoLabel">
<property name="text">
<string>sample_long_name.wem | Duration : 00:00 | Stereo (48000Hz)</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="audioPlayPadding">
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="playAudioBtn">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Play</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="stopAudioBtn">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Stop</string>
<string>Click on an audio file to get more infos !</string>
</property>
</widget>
</item>
@@ -366,7 +339,7 @@
<x>0</x>
<y>0</y>
<width>1100</width>
<height>26</height>
<height>21</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">

View File

@@ -60,6 +60,7 @@ def parse_wwise(reader):
"channelLayout": None,
"channelType": None,
"codec": None,
"codecDisplay": None,
"layoutType": None,
"interleaveBlockSize": None,
"numSamples": None,
@@ -109,10 +110,21 @@ def parse_wwise(reader):
codec = codecs[metadata["format"]]
if codec not in ["PTADPCM", "VORBIS"]: # Platinum "PtADPCM" custom ADPCM for Wwise
raise Exception(f"unhandled codec -> {codec}")
print(f"unhandled codec -> {codec}")
metadata["codec"] = codec
# codec name
codecs_names = {
"PTADPCM": "Platinum 4-bit ADPCM",
"VORBIS": "Custom Vorbis"
}
if codec in codecs_names:
metadata["codecDisplay"] = codecs_names[codec]
else:
metadata["codecDisplay"] = codec
# parse more infos
if metadata["codec"] == "PTADPCM":
metadata["layoutType"] = "interleave"
@@ -124,4 +136,3 @@ def parse_wwise(reader):
return metadata
# TODO: parse VORBIS
# TODO: rewrite codec ?