1
0
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:
Escartem
2024-07-26 23:53:33 +02:00
parent 85e7430f10
commit a063b74835
3 changed files with 63 additions and 1 deletions

1
.gitignore vendored
View File

@@ -1,4 +1,5 @@
output/ output/
input/
temp/ temp/
*.pck *.pck
*.hdiff *.hdiff

47
bnk.py Normal file
View 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

View File

@@ -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])