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:
29
app.py
29
app.py
@@ -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
35
gui.ui
@@ -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">
|
||||
|
||||
15
wwise.py
15
wwise.py
@@ -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 ?
|
||||
|
||||
Reference in New Issue
Block a user