diff options
| author | KiritoDv <kiritodev01@gmail.com> | 2023-09-16 03:10:56 -0600 |
|---|---|---|
| committer | KiritoDv <kiritodev01@gmail.com> | 2023-09-16 03:10:56 -0600 |
| commit | 98b6d598324fdcb499a2cc4d37a7a6fcd19e8ead (patch) | |
| tree | e03627371fc7423c684631ed7eee68d697709e0f /src | |
| parent | fc7bf4c6ec1a637bb9eb240220533af856dc5a66 (diff) | |
Added support to extract banks on each sequence
Diffstat (limited to 'src')
| -rw-r--r-- | src/Companion.cpp | 2 | ||||
| -rw-r--r-- | src/audio/AudioManager.cpp | 4 | ||||
| -rw-r--r-- | src/factories/AudioFactory.cpp | 34 | ||||
| -rw-r--r-- | src/factories/ResourceType.h | 3 |
4 files changed, 29 insertions, 14 deletions
diff --git a/src/Companion.cpp b/src/Companion.cpp index 05a100c..df793be 100644 --- a/src/Companion.cpp +++ b/src/Companion.cpp @@ -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) }, }; diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index d72bda6..2316141 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -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; -} +}
\ No newline at end of file diff --git a/src/factories/AudioFactory.cpp b/src/factories/AudioFactory.cpp index a6c5364..bd91a20 100644 --- a/src/factories/AudioFactory.cpp +++ b/src/factories/AudioFactory.cpp @@ -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); diff --git a/src/factories/ResourceType.h b/src/factories/ResourceType.h index ee8a9f6..7dfac06 100644 --- a/src/factories/ResourceType.h +++ b/src/factories/ResourceType.h @@ -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 |
