diff options
| author | KiritoDv <kiritodev01@gmail.com> | 2024-03-20 13:38:28 -0600 |
|---|---|---|
| committer | KiritoDv <kiritodev01@gmail.com> | 2024-03-20 13:38:28 -0600 |
| commit | bca2ea5769bf7438912676e29f236f7d3648381c (patch) | |
| tree | b1529617d00dfe50ad59646571d25f61132c0a9b | |
| parent | 0e23e5114e335ac68cefb67a66ba509fa4e23e98 (diff) | |
Test
| -rw-r--r-- | src/audio/AudioManager.cpp | 28 | ||||
| -rw-r--r-- | src/factories/AudioHeaderFactory.cpp | 13 |
2 files changed, 26 insertions, 15 deletions
diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index 62032bf..018eac8 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -139,32 +139,35 @@ Bank AudioManager::parse_ctl(CTLHeader header, std::vector<uint8_t> data, Sample std::string name = ss.str(); uint32_t numInstruments = header.instruments; uint32_t numDrums = header.numDrums; - LUS::BinaryReader reader(reinterpret_cast<char*>(data.data()), data.size()); - reader.SetEndianness(LUS::Endianness::Big); + char* rawData = (char*) data.data(); - uint32_t drumBaseAddr = reader.ReadUInt32(); + uint32_t drumBaseAddr; + memcpy(&drumBaseAddr, rawData, 4); + drumBaseAddr = BSWAP32(drumBaseAddr); std::vector<uint32_t> drumOffsets; if(numDrums != 0){ assert(drumBaseAddr != 0); for (size_t i = 0; i < numDrums; ++i) { - reader.Seek(drumBaseAddr + i * 4, LUS::SeekOffsetType::Start); - uint32_t drumOffset = reader.ReadUInt32(); - // assert(drumOffset != 0); + uint32_t drumOffset; + memcpy(&drumOffset, rawData + drumBaseAddr + i * 4, 4); + drumOffset = BSWAP32(drumOffset); + assert(drumOffset != 0); drumOffsets.push_back(drumOffset); } } else { assert(drumBaseAddr == 0); } - const uint32_t instrumentBaseAddr = 4; + uint32_t instrumentBaseAddr = 4; std::vector<uint32_t> instrumentOffsets; std::vector<uint32_t> instrumentList; for (size_t i = 0; i < numInstruments; ++i) { - reader.Seek(instrumentBaseAddr + i * 4, LUS::SeekOffsetType::Start); - uint32_t instOffset = reader.ReadUInt32(); + uint32_t instOffset; + memcpy(&instOffset, rawData + (instrumentBaseAddr + i * 4), 4); + instOffset = BSWAP32(instOffset); if(instOffset == 0){ instrumentList.push_back(NONE); instrumentOffsets.push_back(NONE); @@ -253,16 +256,17 @@ Bank AudioManager::parse_ctl(CTLHeader header, std::vector<uint8_t> data, Sample } } + std::vector<uint32_t> unusedEnvOffsets; if(!usedEnvOffsets.empty()){ - std::vector<uint32_t> unusedEnvOffsets; size_t min = std::min_element(usedEnvOffsets.begin(), usedEnvOffsets.end()) - usedEnvOffsets.begin(); size_t max = std::max_element(usedEnvOffsets.begin(), usedEnvOffsets.end()) - usedEnvOffsets.begin(); for(size_t idx = min + 4; idx < max; idx += 4){ uint32_t addr = usedEnvOffsets[idx]; if(std::find(usedEnvOffsets.begin(), usedEnvOffsets.end(), addr) == usedEnvOffsets.end()){ unusedEnvOffsets.push_back(addr); - reader.Seek(addr, LUS::SeekOffsetType::Start); - uint32_t stubMarker = reader.ReadUInt32(); + uint32_t stubMarker; + memcpy(&stubMarker, rawData + addr, 4); + stubMarker = BSWAP32(stubMarker); assert(stubMarker == 0); auto env = parse_envelope(addr, data); envData[addr] = env; diff --git a/src/factories/AudioHeaderFactory.cpp b/src/factories/AudioHeaderFactory.cpp index 8234552..c980cf7 100644 --- a/src/factories/AudioHeaderFactory.cpp +++ b/src/factories/AudioHeaderFactory.cpp @@ -3,6 +3,8 @@ #include <vector> #include "Companion.h" #include "audio/AudioManager.h" +#include "audio/AIFCDecode.h" +#include "spdlog/spdlog.h" void AudioAIFCExporter::Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement) { @@ -10,15 +12,20 @@ void AudioAIFCExporter::Export(std::ostream& write, std::shared_ptr<IParsedData> int temp = 0; for(auto& sample : samples){ - LUS::BinaryWriter writer = LUS::BinaryWriter(); std::string dpath = Companion::Instance->GetOutputPath() + "/" + (*replacement); if(!exists(fs::path(dpath).parent_path())){ create_directories(fs::path(dpath).parent_path()); } std::ofstream file(dpath + "_bank_" + std::to_string(++temp) + ".aifc", std::ios::binary); - AudioManager::write_aifc(sample, writer); - writer.Finish(file); + + LUS::BinaryWriter aifc = LUS::BinaryWriter(); + AudioManager::write_aifc(sample, aifc); + // LUS::BinaryWriter aiff = LUS::BinaryWriter(); + // write_aiff(aifc.ToVector(), aiff); + // aifc.Close(); + aifc.Finish(file); file.close(); + SPDLOG_INFO("Exported {}", dpath + "_bank_" + std::to_string(temp) + ".aif"); } } |
