summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKiritoDv <kiritodev01@gmail.com>2024-03-20 13:38:28 -0600
committerKiritoDv <kiritodev01@gmail.com>2024-03-20 13:38:28 -0600
commitbca2ea5769bf7438912676e29f236f7d3648381c (patch)
treeb1529617d00dfe50ad59646571d25f61132c0a9b
parent0e23e5114e335ac68cefb67a66ba509fa4e23e98 (diff)
Test
-rw-r--r--src/audio/AudioManager.cpp28
-rw-r--r--src/factories/AudioHeaderFactory.cpp13
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");
}
}