mirror of
https://github.com/Escartem/AnimeWwise.git
synced 2026-06-04 23:40:25 +08:00
we can now load bnk files
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,4 +1,5 @@
|
|||||||
output/
|
output/
|
||||||
|
input/
|
||||||
temp/
|
temp/
|
||||||
*.pck
|
*.pck
|
||||||
*.hdiff
|
*.hdiff
|
||||||
|
|||||||
47
bnk.py
Normal file
47
bnk.py
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
# bnk reader because they exist in the game
|
||||||
|
import io
|
||||||
|
from filereader import FileReader
|
||||||
|
|
||||||
|
def bnk2wem(data):
|
||||||
|
# gets raws data from object
|
||||||
|
reader = FileReader(io.BytesIO(data), "little")
|
||||||
|
|
||||||
|
bkhd_signature = reader.ReadBytes(4)
|
||||||
|
|
||||||
|
if bkhd_signature != b"\x42\x4B\x48\x44":
|
||||||
|
raise Exception("not a valid bnk")
|
||||||
|
|
||||||
|
bkhd_size = reader.ReadUInt32()
|
||||||
|
reader.ReadBytes(bkhd_size)
|
||||||
|
|
||||||
|
if reader.GetBufferPos() == reader.GetStreamLength():
|
||||||
|
return [] # empty bnk
|
||||||
|
|
||||||
|
didx_signature = reader.ReadBytes(4)
|
||||||
|
|
||||||
|
if didx_signature != b"\x44\x49\x44\x58":
|
||||||
|
return [] # invalid index signature (hirc block instead ?)
|
||||||
|
|
||||||
|
didx_size = reader.ReadUInt32()
|
||||||
|
n_wems = didx_size // 12
|
||||||
|
wems = []
|
||||||
|
|
||||||
|
for i in range(n_wems):
|
||||||
|
wem_id = reader.ReadUInt32()
|
||||||
|
wem_offset = reader.ReadUInt32()
|
||||||
|
wem_size = reader.ReadUInt32()
|
||||||
|
wem = [wem_id, wem_offset, wem_size]
|
||||||
|
wems.append([wem_id, wem_offset, wem_size])
|
||||||
|
|
||||||
|
data_signature = reader.ReadBytes(4)
|
||||||
|
|
||||||
|
if data_signature != b"\x44\x41\x54\x41":
|
||||||
|
return [] # invalid data signature (missing sector ?)
|
||||||
|
|
||||||
|
data_size = reader.ReadUInt32()
|
||||||
|
data_offset = reader.GetBufferPos()
|
||||||
|
|
||||||
|
for wem in wems:
|
||||||
|
wem[1] += data_offset
|
||||||
|
|
||||||
|
return wems
|
||||||
16
wavescan.py
16
wavescan.py
@@ -1,6 +1,7 @@
|
|||||||
# Custom rewrite of the Wwise AKPK packages extractor, original by Nicknine and bnnm
|
# Custom rewrite of the Wwise AKPK packages extractor, original by Nicknine and bnnm
|
||||||
import os
|
import os
|
||||||
import traceback
|
import traceback
|
||||||
|
from bnk import bnk2wem
|
||||||
|
|
||||||
|
|
||||||
reader = None
|
reader = None
|
||||||
@@ -212,4 +213,17 @@ def extract_sector(section_size, is_sounds, is_externals, ext, endianness, lang_
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
# file infos
|
# file infos
|
||||||
wwise_data.append([os.path.basename(name), offset, size, filename])
|
if ext == "bnk":
|
||||||
|
# get data from bnk
|
||||||
|
print(offset)
|
||||||
|
pos = reader.GetBufferPos()
|
||||||
|
reader.SetBufferPos(offset)
|
||||||
|
bnk_data = reader.ReadBytes(size)
|
||||||
|
reader.SetBufferPos(pos)
|
||||||
|
|
||||||
|
wems = bnk2wem(bnk_data)
|
||||||
|
|
||||||
|
for wem in wems:
|
||||||
|
wwise_data.append([f"{os.path.basename(name).split('.')[0]}_{wem[0]}.wem", offset+wem[1], wem[2], filename])
|
||||||
|
else:
|
||||||
|
wwise_data.append([os.path.basename(name), offset, size, filename])
|
||||||
|
|||||||
Reference in New Issue
Block a user