From bca2ea5769bf7438912676e29f236f7d3648381c Mon Sep 17 00:00:00 2001 From: KiritoDv Date: Wed, 20 Mar 2024 13:38:28 -0600 Subject: Test --- src/audio/AudioManager.cpp | 28 ++++++++++++++++------------ 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 data, Sample std::string name = ss.str(); uint32_t numInstruments = header.instruments; uint32_t numDrums = header.numDrums; - LUS::BinaryReader reader(reinterpret_cast(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 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 instrumentOffsets; std::vector 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 data, Sample } } + std::vector unusedEnvOffsets; if(!usedEnvOffsets.empty()){ - std::vector 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 #include "Companion.h" #include "audio/AudioManager.h" +#include "audio/AIFCDecode.h" +#include "spdlog/spdlog.h" void AudioAIFCExporter::Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) { @@ -10,15 +12,20 @@ void AudioAIFCExporter::Export(std::ostream& write, std::shared_ptr 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"); } } -- cgit v1.2.3