diff options
| author | KiritoDv <kiritodev01@gmail.com> | 2024-03-17 00:39:27 -0600 |
|---|---|---|
| committer | KiritoDv <kiritodev01@gmail.com> | 2024-03-17 00:39:27 -0600 |
| commit | 515a939b066f23d71ff32ae47e864608d392479c (patch) | |
| tree | 57083629f0cb0983b392aded788151d27f4adca6 | |
| parent | 9b1d57e8a3960d6c2e4cb5a9add0dcf2f80b2e51 (diff) | |
Fixed wrong tbl and ctl data
| -rw-r--r-- | src/audio/AudioManager.cpp | 50 |
1 files changed, 26 insertions, 24 deletions
diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index 939a647..2b24a8f 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -510,29 +510,41 @@ TBLFile AudioManager::parse_tbl(std::vector<uint8_t>& data, std::vector<Entry>& void AudioManager::initialize(std::vector<uint8_t>& buffer, YAML::Node& data) { - bool hasHeaders = false; + auto ctl = GetSafeNode<YAML::Node>(data, "ctl"); + auto tbl = GetSafeNode<YAML::Node>(data, "tbl"); + auto ctlOffset = ctl["offset"].as<uint32_t>(); + auto ctlSize = ctl["size"].as<size_t>(); - if(hasHeaders){ - auto ctl = GetSafeNode<YAML::Node>(data, "ctl"); - auto tbl = GetSafeNode<YAML::Node>(data, "tbl"); + auto tblOffset = tbl["offset"].as<uint32_t>(); + auto tblSize = tbl["size"].as<size_t>(); + + auto tbl_data = PyUtils::slice(buffer, tblOffset, tblOffset + tblSize); + auto ctl_data = PyUtils::slice(buffer, ctlOffset, ctlOffset + ctlSize); + + if(data["ctl_headers"] && data["tbl_headers"]){ + auto ctl = GetSafeNode<YAML::Node>(data, "ctl_headers"); + auto tbl = GetSafeNode<YAML::Node>(data, "tbl_headers"); - auto ctlOffset = GetSafeNode<uint32_t>(ctl, "offset"); - auto ctlSize = GetSafeNode<size_t>(ctl, "size"); + auto ctlHeaderOffset = GetSafeNode<uint32_t>(ctl, "offset"); + auto ctlHeaderSize = GetSafeNode<size_t>(ctl, "size"); - auto tblOffset = GetSafeNode<uint32_t>(tbl, "offset"); - auto tblSize = GetSafeNode<size_t>(tbl, "size"); + auto tblHeaderOffset = GetSafeNode<uint32_t>(tbl, "offset"); + auto tblHeaderSize = GetSafeNode<size_t>(tbl, "size"); - auto tbl_data = PyUtils::slice(buffer, tblOffset, tblOffset + tblSize); - auto ctl_data = PyUtils::slice(buffer, ctlOffset, ctlOffset + ctlSize); + auto tbl_header_data = PyUtils::slice(buffer, tblHeaderOffset, tblHeaderOffset + tblHeaderSize); + auto ctl_header_data = PyUtils::slice(buffer, ctlHeaderOffset, ctlHeaderOffset + tblHeaderSize); - auto tblEntries = parse_sh_header(tbl_data, false); - auto ctlEntries = parse_sh_header(ctl_data, true); + auto tblEntries = parse_sh_header(tbl_header_data, false); + auto ctlEntries = parse_sh_header(ctl_header_data, true); - auto sample_banks = parse_tbl(tbl_data, tblEntries).banks; + SPDLOG_INFO("Raw TBL Entries: {}", tbl.size()); + SPDLOG_INFO("Raw CTL Entries: {}", ctl.size()); + + this->loaded_tbl = parse_tbl(tbl_data, tblEntries); for(size_t idx = 0; idx < ctlEntries.size(); idx++){ auto header = ctlEntries[idx].header.value(); - auto sample_bank = sample_banks[header.sampleBankIndex]; + auto sample_bank = this->loaded_tbl.banks[header.sampleBankIndex]; auto entry = PyUtils::slice(ctl_data, ctlEntries[idx].offset, ctlEntries[idx].offset + ctlEntries[idx].length); CTLHeader ch = { @@ -545,22 +557,12 @@ void AudioManager::initialize(std::vector<uint8_t>& buffer, YAML::Node& data) { } } else { - auto ctl = GetSafeNode<YAML::Node>(data, "ctl"); - auto tbl = GetSafeNode<YAML::Node>(data, "tbl"); - auto ctlOffset = ctl["offset"].as<uint32_t>(); - auto ctlSize = ctl["size"].as<size_t>(); - - auto tblOffset = tbl["offset"].as<uint32_t>(); - auto tblSize = tbl["size"].as<size_t>(); - auto tblEntries = parse_seq_file(buffer, tblOffset, false); auto ctlEntries = parse_seq_file(buffer, ctlOffset, true); SPDLOG_INFO("Raw TBL Entries: {}", tbl.size()); SPDLOG_INFO("Raw CTL Entries: {}", ctl.size()); - std::vector<uint8_t> tbl_data = PyUtils::slice(buffer, tblOffset, tblOffset + tblSize); - std::vector<uint8_t> ctl_data = PyUtils::slice(buffer, ctlOffset, ctlOffset + ctlSize); this->loaded_tbl = parse_tbl(tbl_data, tblEntries); SPDLOG_INFO("Processed TBL Entries: {}", this->loaded_tbl.tbls.size()); |
