diff options
| author | Nicholas Estelami <NEstelami@users.noreply.github.com> | 2022-06-13 21:54:25 -0400 |
|---|---|---|
| committer | Nicholas Estelami <NEstelami@users.noreply.github.com> | 2022-06-14 01:13:18 -0400 |
| commit | c5df54ae273aeab31c3c163028795d288ec9affb (patch) | |
| tree | 9f3c9505891ad268e247068e02dc9e2747455c12 /ZAPDTR | |
| parent | c82df705a67dd5d1c316793937799b0ae8ecec11 (diff) | |
Fixed last remaining audio bugs
Diffstat (limited to 'ZAPDTR')
| -rw-r--r-- | ZAPDTR/ZAPD/ZAudio.cpp | 32 | ||||
| -rw-r--r-- | ZAPDTR/ZAPD/ZAudio.h | 8 |
2 files changed, 34 insertions, 6 deletions
diff --git a/ZAPDTR/ZAPD/ZAudio.cpp b/ZAPDTR/ZAPD/ZAudio.cpp index 8dd985701..976133513 100644 --- a/ZAPDTR/ZAPD/ZAudio.cpp +++ b/ZAPDTR/ZAPD/ZAudio.cpp @@ -26,7 +26,6 @@ void ZAudio::ParseXML(tinyxml2::XMLElement* reader) while (child != nullptr) { - int bp = 0; if (std::string(child->Value()) == "Sequences") { auto seqChild = child->FirstChildElement(); @@ -52,7 +51,17 @@ void ZAudio::ParseXML(tinyxml2::XMLElement* reader) if (std::string(sampChild->Value()) == "Sample") { auto atStr = sampChild->FirstChildElement()->Attribute("At"); - sampleOffsets[bankId][StringHelper::StrToL(atStr, 16)] = sampChild->Attribute("Name"); + auto loopStr = sampChild->FirstChildElement()->Attribute("LoopOffset"); + uint32_t loopOffset = 0xFFFFFFFF; + uint32_t atOffset = StringHelper::StrToL(atStr, 16); + + if (loopStr != NULL) + { + loopOffset = StringHelper::StrToL(loopStr, 16); + specialLoopSamples[loopOffset] = atOffset; + } + + sampleOffsets[bankId][loopOffset][atOffset] = sampChild->Attribute("Name"); } sampChild = sampChild->NextSiblingElement(); @@ -140,11 +149,20 @@ SampleEntry* ZAudio::ParseSampleEntry(std::vector<uint8_t> audioBank, sample->loop.end = BitConverter::ToInt32BE(audioBank, loopOffset + 4); sample->loop.count = BitConverter::ToInt32BE(audioBank, loopOffset + 8); - if (sample->loop.count != 0xFFFFFFFF) + if (sample->loop.start == 0x3ADB) + { + int bp = 0; + } + + if (/* sample->loop.count != 0xFFFFFFFF && */ sample->loop.count != 0) { - for (int i = 0; i < sample->loop.count; i++) + //for (int i = 0; i < sample->loop.count; i++) + for (int i = 0; i < 16; i++) { - int16_t state = BitConverter::ToInt16BE(sample->data, loopOffset + 16 + (i * 2)); + //if ((loopOffset + 16 + (i * 2)) >= audioBank.size()) + //break; + + int16_t state = BitConverter::ToInt16BE(audioBank, loopOffset + 16 + (i * 2)); sample->loop.states.push_back(state); } } @@ -159,6 +177,10 @@ SampleEntry* ZAudio::ParseSampleEntry(std::vector<uint8_t> audioBank, } sample->sampleDataOffset = sampleDataOffset; + + if (specialLoopSamples.find(loopOffset) != specialLoopSamples.end()) + sample->sampleLoopOffset = loopOffset; + sample->fileName = StringHelper::Sprintf("audio/samples/sample_%08X", sampleOffset); samples[sampleOffset] = sample; diff --git a/ZAPDTR/ZAPD/ZAudio.h b/ZAPDTR/ZAPD/ZAudio.h index 5d18c2e71..511ba5ed6 100644 --- a/ZAPDTR/ZAPD/ZAudio.h +++ b/ZAPDTR/ZAPD/ZAudio.h @@ -29,6 +29,7 @@ struct SampleEntry std::string fileName; uint8_t bankId; uint32_t sampleDataOffset; + uint32_t sampleLoopOffset = 0xFFFFFFFF; uint8_t codec; uint8_t medium; uint8_t unk_bit26; @@ -94,7 +95,12 @@ public: std::map<uint32_t, SampleEntry*> samples; std::vector<std::vector<uint32_t>> fontIndices; std::vector<std::string> seqNames; - std::map<uint32_t, std::map<uint32_t, std::string>> sampleOffsets; + + // First Key = Bank ID, Sec Key = LoopDataOffset, Third Key = Sample Data Offset + std::map<uint32_t, std::map<uint32_t, std::map<uint32_t, std::string>>> sampleOffsets; + + // Key = Loop Offset, Value = Sample Offset + std::map<uint32_t, uint32_t> specialLoopSamples; ZAudio(ZFile* nParent); |
