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/
|
||||
input/
|
||||
temp/
|
||||
*.pck
|
||||
*.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
|
||||
import os
|
||||
import traceback
|
||||
from bnk import bnk2wem
|
||||
|
||||
|
||||
reader = None
|
||||
@@ -212,4 +213,17 @@ def extract_sector(section_size, is_sounds, is_externals, ext, endianness, lang_
|
||||
continue
|
||||
|
||||
# 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