summaryrefslogtreecommitdiff
path: root/ZAPDTR
diff options
context:
space:
mode:
authorNicholas Estelami <NEstelami@users.noreply.github.com>2022-06-13 21:54:25 -0400
committerNicholas Estelami <NEstelami@users.noreply.github.com>2022-06-15 15:57:52 -0400
commit99e3d9a8992fa722ddf1af6ef52b3a01bebba4c7 (patch)
tree24ab133ddcf68c9b76590852de2996066944447b /ZAPDTR
parent5d3b21bd2ba79265afdd9ae8eeec0dfce2df3956 (diff)
Fixed last remaining audio bugs
Diffstat (limited to 'ZAPDTR')
-rw-r--r--ZAPDTR/ZAPD/ZAudio.cpp32
-rw-r--r--ZAPDTR/ZAPD/ZAudio.h8
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);