Added support to extract banks on each sequence

This commit is contained in:
KiritoDv
2023-09-16 03:10:56 -06:00
parent fc7bf4c6ec
commit 98b6d59832
7 changed files with 124 additions and 50 deletions
+35 -36
View File
@@ -1086,45 +1086,44 @@
"sound/sequences/sh/20_cutscene_ending.m64": [1887,{"sh":[7981824]}],
"sound/sequences/sh/21_menu_file_select.m64": [786,{"sh":[7983712]}],
"sound/sequences/sh/22_cutscene_lakitu.m64": [317,{"sh":[7984512]}],
"sound/sequences/us/00_sound_player.m64": [13452,{"us":[8063360]}],
"sound/sequences/us/01_cutscene_collect_star.m64": [619,{"us":[8076816]}],
"sound/sequences/us/02_menu_title_screen.m64": [8254,{"us":[8077440]}],
"sound/sequences/us/03_level_grass.m64": [5122,{"us":[8085696]}],
"sound/sequences/us/04_level_inside_castle.m64": [2494,{"us":[8090832]}],
"sound/sequences/us/05_level_water.m64": [4780,{"us":[8093328]}],
"sound/sequences/us/06_level_hot.m64": [2451,{"us":[8098112]}],
"sound/sequences/us/07_level_boss_koopa.m64": [3418,{"us":[8100576]}],
"sound/sequences/us/08_level_snow.m64": [8143,{"us":[8104000]}],
"sound/sequences/us/09_level_slide.m64": [7432,{"us":[8112144]}],
"sound/sequences/us/0A_level_spooky.m64": [5674,{"us":[8119584]}],
"sound/sequences/us/0B_event_piranha_plant.m64": [1395,{"us":[8125264]}],
"sound/sequences/us/0C_level_underground.m64": [4887,{"us":[8126672]}],
"sound/sequences/us/0D_menu_star_select.m64": [134,{"us":[8131568]}],
"sound/sequences/us/0E_event_powerup.m64": [3129,{"us":[8131712]}],
"sound/sequences/us/0F_event_metal_cap.m64": [2770,{"us":[8134848]}],
"sound/sequences/us/10_event_koopa_message.m64": [552,{"us":[8137632]}],
"sound/sequences/us/11_level_koopa_road.m64": [4741,{"us":[8138192]}],
"sound/sequences/us/12_event_high_score.m64": [271,{"us":[8142944]}],
"sound/sequences/us/13_event_merry_go_round.m64": [1657,{"us":[8143216]}],
"sound/sequences/us/14_event_race.m64": [197,{"us":[8144880]}],
"sound/sequences/us/15_cutscene_star_spawn.m64": [644,{"us":[8145088]}],
"sound/sequences/us/16_event_boss.m64": [3435,{"us":[8145744]}],
"sound/sequences/us/17_cutscene_collect_key.m64": [671,{"us":[8149184]}],
"sound/sequences/us/18_event_endless_stairs.m64": [1777,{"us":[8149856]}],
"sound/sequences/us/19_level_boss_koopa_final.m64": [3515,{"us":[8151648]}],
"sound/sequences/us/1A_cutscene_credits.m64": [14313,{"us":[8155168]}],
"sound/sequences/us/1B_event_solve_puzzle.m64": [216,{"us":[8169488]}],
"sound/sequences/us/1C_event_toad_message.m64": [208,{"us":[8169712]}],
"sound/sequences/us/1D_event_peach_message.m64": [432,{"us":[8169920]}],
"sound/sequences/us/1E_cutscene_intro.m64": [1764,{"us":[8170352]}],
"sound/sequences/us/1F_cutscene_victory.m64": [2058,{"us":[8172128]}],
"sound/sequences/us/20_cutscene_ending.m64": [1882,{"us":[8174192]}],
"sound/sequences/us/21_menu_file_select.m64": [781,{"us":[8176080]}],
"sound/sequences/us/22_cutscene_lakitu.m64": [313,{"us":[8176864]}],
"sound/sequences/us/00_sound_player.m64": [13452,{"us":[8063360], "banks": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}],
"sound/sequences/us/01_cutscene_collect_star.m64": [619,{"us":[8076816], "banks": [34]}],
"sound/sequences/us/02_menu_title_screen.m64": [8254,{"us":[8077440], "banks": [17]}],
"sound/sequences/us/03_level_grass.m64": [5122,{"us":[8085696], "banks": [34]}],
"sound/sequences/us/04_level_inside_castle.m64": [2494,{"us":[8090832], "banks": [14]}],
"sound/sequences/us/05_level_water.m64": [4780,{"us":[8093328], "banks": [19]}],
"sound/sequences/us/06_level_hot.m64": [2451,{"us":[8098112], "banks": [15]}],
"sound/sequences/us/07_level_boss_koopa.m64": [3418,{"us":[8100576], "banks": [18]}],
"sound/sequences/us/08_level_snow.m64": [8143,{"us":[8104000], "banks": [11]}],
"sound/sequences/us/09_level_slide.m64": [7432,{"us":[8112144], "banks": [13]}],
"sound/sequences/us/0A_level_spooky.m64": [5674,{"us":[8119584], "banks": [33, 16]}],
"sound/sequences/us/0B_event_piranha_plant.m64": [1395,{"us":[8125264], "banks": [20]}],
"sound/sequences/us/0C_level_underground.m64": [4887,{"us":[8126672], "banks": [21]}],
"sound/sequences/us/0D_menu_star_select.m64": [134,{"us":[8131568], "banks": [22]}],
"sound/sequences/us/0E_event_powerup.m64": [3129,{"us":[8131712], "banks": [23]}],
"sound/sequences/us/0F_event_metal_cap.m64": [2770,{"us":[8134848], "banks": [24]}],
"sound/sequences/us/10_event_koopa_message.m64": [552,{"us":[8137632], "banks": [18]}],
"sound/sequences/us/11_level_koopa_road.m64": [4741,{"us":[8138192], "banks": [25]}],
"sound/sequences/us/12_event_high_score.m64": [271,{"us":[8142944], "banks": [31]}],
"sound/sequences/us/13_event_merry_go_round.m64": [1657,{"us":[8143216], "banks": [33]}],
"sound/sequences/us/14_event_race.m64": [197,{"us":[8144880], "banks": [26]}],
"sound/sequences/us/15_cutscene_star_spawn.m64": [644,{"us":[8145088], "banks": [14]}],
"sound/sequences/us/16_event_boss.m64": [3435,{"us":[8145744], "banks": [27]}],
"sound/sequences/us/17_cutscene_collect_key.m64": [671,{"us":[8149184], "banks": [26]}],
"sound/sequences/us/18_event_endless_stairs.m64": [1777,{"us":[8149856], "banks": [28]}],
"sound/sequences/us/19_level_boss_koopa_final.m64": [3515,{"us":[8151648], "banks": [29]}],
"sound/sequences/us/1A_cutscene_credits.m64": [14313,{"us":[8155168], "banks": [37]}],
"sound/sequences/us/1B_event_solve_puzzle.m64": [216,{"us":[8169488], "banks": [20]}],
"sound/sequences/us/1C_event_toad_message.m64": [208,{"us":[8169712], "banks": [32]}],
"sound/sequences/us/1D_event_peach_message.m64": [432,{"us":[8169920], "banks": [30]}],
"sound/sequences/us/1E_cutscene_intro.m64": [1764,{"us":[8170352], "banks": [27]}],
"sound/sequences/us/1F_cutscene_victory.m64": [2058,{"us":[8172128], "banks": [26]}],
"sound/sequences/us/20_cutscene_ending.m64": [1882,{"us":[8174192], "banks": [35]}],
"sound/sequences/us/21_menu_file_select.m64": [781,{"us":[8176080], "banks": [36]}],
"sound/sequences/us/22_cutscene_lakitu.m64": [313,{"us":[8176864], "banks": [27]}],
"sound/bank_sets.bset": [159, { "us": [8177185] }],
"@sound_data": {
"us": {
"bank_sets": [8177184, 160],
"sound_ctl": [5748512, 97856],
"sound_tbl": [5846368, 2216704]
}
+37
View File
@@ -0,0 +1,37 @@
{
"00_sound_player": ["00", "01_terrain", "02_water", "03", "04", "05", "06", "07", "08_mario", "09", "0A_mario_peach"],
"01_cutscene_collect_star": ["22"],
"02_menu_title_screen": ["11"],
"03_level_grass": ["22"],
"04_level_inside_castle": ["0E"],
"05_level_water": ["13"],
"06_level_hot": ["0F"],
"07_level_boss_koopa": ["12"],
"08_level_snow": ["0B"],
"09_level_slide": ["0D"],
"0A_level_spooky": ["10", "21"],
"0B_event_piranha_plant": ["14_piranha_music_box"],
"0C_level_underground": ["15"],
"0D_menu_star_select": ["16_course_start"],
"0E_event_powerup": ["17"],
"0F_event_metal_cap": ["18"],
"10_event_koopa_message": ["12"],
"11_level_koopa_road": ["19"],
"12_event_high_score": ["1F"],
"13_event_merry_go_round": ["21"],
"14_event_race": ["1A"],
"15_cutscene_star_spawn": ["0E"],
"16_event_boss": ["1B"],
"17_cutscene_collect_key": ["1A"],
"18_event_endless_stairs": ["1C_endless_stairs"],
"19_level_boss_koopa_final": ["1D_bowser_organ"],
"1A_cutscene_credits": ["25"],
"1B_event_solve_puzzle": ["14_piranha_music_box"],
"1C_event_toad_message": ["20"],
"1D_event_peach_message": ["1E"],
"1E_cutscene_intro": ["1B"],
"1F_cutscene_victory": ["1A"],
"20_cutscene_ending": ["23"],
"21_menu_file_select": ["24"],
"22_cutscene_lakitu": ["1B"]
}
+1 -1
View File
@@ -23,8 +23,8 @@ static const std::unordered_map<std::string, RawFactory*> gFactories = {
{ ".aiff", new AudioFactory() },
{ ".bnk", new AudioFactory() },
{ ".bset", new AudioFactory() },
{ ".m64", new AudioFactory() },
{ ".bin", new BlobFactory(LUS::ResourceType::Blob) },
{ ".m64", new BlobFactory(LUS::ResourceType::Blob) },
{ ".sbox", new BlobFactory(LUS::ResourceType::Blob, true) },
};
+2 -2
View File
@@ -335,7 +335,6 @@ AdpcmLoop AudioManager::parse_loop(uint32_t addr, std::vector<uint8_t>& bankData
int32_t count = reader.ReadInt32();
uint32_t pad = reader.ReadUInt32();
std::cout << "Loop End: " << end << '\n';
if(count != 0){
state = std::vector<int16_t>();
for (size_t i = 0; i < 16; ++i) {
@@ -433,6 +432,7 @@ TBLFile AudioManager::parse_tbl(std::vector<uint8_t>& data, std::vector<Entry>&
void AudioManager::initialize(std::vector<uint8_t>& buffer) {
auto assets = nlohmann::json::parse(std::ifstream( "assets.json" ));
auto sound_data = assets["@sound_data"]["us"];
auto sound_tbl = sound_data["sound_tbl"];
auto sound_ctl = sound_data["sound_ctl"];
@@ -661,4 +661,4 @@ uint32_t AudioManager::get_index(AudioBankSample* entry) {
std::map<uint32_t, Bank> AudioManager::get_banks() {
return this->banks;
}
}
+24 -10
View File
@@ -33,10 +33,6 @@ bool AudioFactory::process(LUS::BinaryWriter* writer, nlohmann::json& data, std:
WRITE_HEADER(LUS::ResourceType::Bank, 0);
if(path.find("sound/banks/us/20_bank") != std::string::npos){
int bp = 0;
}
WRITE_U32(bank.insts.size());
for(auto &instrument : bank.insts){
WRITE_U8(instrument.valid);
@@ -119,7 +115,29 @@ bool AudioFactory::process(LUS::BinaryWriter* writer, nlohmann::json& data, std:
return true;
}
if(metadata.size() < 2 || !metadata[1].contains("us")){
if(path.find("sound/sequences") != std::string::npos){
if(!metadata[1].contains("us")){
return false;
}
WRITE_HEADER(LUS::ResourceType::Sequence, 0);
size_t size = metadata[0];
auto offsets = metadata[1]["us"];
std::vector<uint8_t> bank = metadata[1]["banks"];
WRITE_U32(bank.size());
WRITE_ARRAY(bank.data(), bank.size());
WRITE_U32(size);
WRITE_ARRAY(buffer.data() + (size_t)offsets[0], size);
return true;
}
if(path.find("sound/samples") == std::string::npos || metadata.size() < 2 || !metadata[1].contains("us")){
return false;
}
@@ -132,14 +150,10 @@ bool AudioFactory::process(LUS::BinaryWriter* writer, nlohmann::json& data, std:
write_aiff(aifcData, *writer);
*/
WRITE_HEADER(LUS::ResourceType::Audio, 0);
WRITE_HEADER(LUS::ResourceType::Sample, 0);
AudioBankSample entry = AudioManager::Instance->get_aifc(metadata[1]["us"][1]);
if(path.find("00_mario_waaaooow") != std::string::npos){
int bp = 0;
}
// Write AdpcmLoop
WRITE_U32(entry.loop.start);
WRITE_U32(entry.loop.end);
+2 -1
View File
@@ -20,6 +20,7 @@ enum class ResourceType {
Skybox = 0x534B5942, // SKYB
Anim = 0x414E494D, // ANIM
Bank = 0x42414E4B, // BANK
Audio = 0x41554643, // AIFC
Sample = 0x41554643, // AIFC
Sequence = 0x53455143, // SEQC
};
} // namespace LUS
+23
View File
@@ -0,0 +1,23 @@
const fs = require('fs');
const data = require('../sequences.json');
const header = [
'#pragma once',
'',
]
const bankset = []
async function main(){
// header.push('static const uint8_t gBankIdxMap[][16] = {');
let idx = 0;
for(const values of Object.values(data)){
const indices = values.map(v => `${parseInt(v.split('_')[0], 16)}`);
// header.push(` // Bank: ${Object.keys(data)[idx++]}`);
header.push(`[${indices.join(', ')}],`);
}
// header.push('};\n');
fs.writeFileSync('./bankset_table.h', header.join('\n'));
}
main();