From e466f58b2cff026c37201154cc74096b1f7ac0ce Mon Sep 17 00:00:00 2001 From: KiritoDv Date: Fri, 29 Nov 2024 22:11:39 -0600 Subject: [PATCH] Fixed aiff sample extraction and sample name --- src/Companion.cpp | 5 ++--- .../naudio/v0/AudioHeaderFactory.cpp | 8 +++++++- src/factories/naudio/v0/AudioHeaderFactory.h | 6 ++++-- src/factories/naudio/v0/AudioManager.cpp | 4 ++++ src/factories/naudio/v0/AudioManager.h | 1 + src/factories/naudio/v0/SampleFactory.cpp | 20 +++++++++++++++++++ src/factories/naudio/v0/SampleFactory.h | 8 ++++++++ 7 files changed, 46 insertions(+), 6 deletions(-) diff --git a/src/Companion.cpp b/src/Companion.cpp index a86e64a..0589c84 100644 --- a/src/Companion.cpp +++ b/src/Companion.cpp @@ -573,7 +573,7 @@ void Companion::ProcessFile(YAML::Node root) { if(assetNode["type"]){ const auto type = GetSafeNode(assetNode, "type"); - if(type == "SAMPLE"){ + if(type == "NAUDIO:V0:SAMPLE"){ AudioManager::Instance->bind_sample(assetNode, output); } } @@ -597,10 +597,9 @@ void Companion::ProcessFile(YAML::Node root) { auto output = (this->gCurrentDirectory / entryName).string(); std::replace(output.begin(), output.end(), '\\', '/'); - if(node["type"]){ const auto type = GetSafeNode(node, "type"); - if(type == "SAMPLE"){ + if(type == "NAUDIO:V0:SAMPLE"){ AudioManager::Instance->bind_sample(node, output); } } diff --git a/src/factories/naudio/v0/AudioHeaderFactory.cpp b/src/factories/naudio/v0/AudioHeaderFactory.cpp index 1cd3d7c..e4ef99f 100644 --- a/src/factories/naudio/v0/AudioHeaderFactory.cpp +++ b/src/factories/naudio/v0/AudioHeaderFactory.cpp @@ -6,6 +6,7 @@ #include "spdlog/spdlog.h" #include +/* ExportResult AudioAIFCExporter::Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) { auto samples = AudioManager::Instance->get_samples(); @@ -26,11 +27,16 @@ ExportResult AudioAIFCExporter::Export(std::ostream& write, std::shared_ptr> AudioHeaderFactory::parse(std::vector& buffer, YAML::Node& data) { AudioManager::Instance->initialize(buffer, data); diff --git a/src/factories/naudio/v0/AudioHeaderFactory.h b/src/factories/naudio/v0/AudioHeaderFactory.h index 0d09d73..7e4ef5d 100644 --- a/src/factories/naudio/v0/AudioHeaderFactory.h +++ b/src/factories/naudio/v0/AudioHeaderFactory.h @@ -2,10 +2,12 @@ #include +/* class AudioAIFCExporter : public BaseExporter { public: ExportResult Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement); }; +*/ class AudioDummyExporter : public BaseExporter { public: @@ -22,11 +24,11 @@ public: } std::unordered_map> GetExporters() override { return { - REGISTER(Modding, AudioAIFCExporter) + // REGISTER(Modding, AudioGenericAIFCExporter) REGISTER(Header, AudioDummyExporter) REGISTER(Binary, AudioDummyExporter) REGISTER(Code, AudioDummyExporter) }; } - bool SupportModdedAssets() override { return true; } + bool HasModdedDependencies() override { return true; } }; \ No newline at end of file diff --git a/src/factories/naudio/v0/AudioManager.cpp b/src/factories/naudio/v0/AudioManager.cpp index 2752308..4c836a9 100644 --- a/src/factories/naudio/v0/AudioManager.cpp +++ b/src/factories/naudio/v0/AudioManager.cpp @@ -545,6 +545,10 @@ std::map AudioManager::get_banks() { return this->banks; } +std::vector AudioManager::get_loaded_banks() { + return this->loaded_tbl.banks; +} + std::vector AudioManager::get_samples() { std::vector samples; for(auto &bank : this->loaded_tbl.banks){ diff --git a/src/factories/naudio/v0/AudioManager.h b/src/factories/naudio/v0/AudioManager.h index 0d072bc..644ce15 100644 --- a/src/factories/naudio/v0/AudioManager.h +++ b/src/factories/naudio/v0/AudioManager.h @@ -129,6 +129,7 @@ public: std::string& get_sample(uint32_t id); AudioBankSample get_aifc(int32_t index); std::map get_banks(); + std::vector get_loaded_banks(); std::vector get_samples(); uint32_t get_index(AudioBankSample* bank); private: diff --git a/src/factories/naudio/v0/SampleFactory.cpp b/src/factories/naudio/v0/SampleFactory.cpp index b8bc7fa..8d25096 100644 --- a/src/factories/naudio/v0/SampleFactory.cpp +++ b/src/factories/naudio/v0/SampleFactory.cpp @@ -1,5 +1,25 @@ #include "SampleFactory.h" +#include +#include "Companion.h" +#include "AIFCDecode.h" +#include "spdlog/spdlog.h" +#include + +ExportResult SampleModdingExporter::Export(std::ostream& writer, std::shared_ptr raw, std::string& entryName, YAML::Node& node, std::string* replacement) { + auto sample = std::static_pointer_cast(raw); + *replacement += ".aiff"; + + LUS::BinaryWriter aifc = LUS::BinaryWriter(); + AudioConverter::SampleV0ToAIFC(&sample->mSample, aifc); + + LUS::BinaryWriter aiff = LUS::BinaryWriter(); + write_aiff(aifc.ToVector(), aiff); + aifc.Close(); + aiff.Finish(writer); + return std::nullopt; +} + ExportResult SampleBinaryExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { auto writer = LUS::BinaryWriter(); auto sample = std::static_pointer_cast(raw)->mSample; diff --git a/src/factories/naudio/v0/SampleFactory.h b/src/factories/naudio/v0/SampleFactory.h index ae940e2..ed292fe 100644 --- a/src/factories/naudio/v0/SampleFactory.h +++ b/src/factories/naudio/v0/SampleFactory.h @@ -5,6 +5,11 @@ #include #include "AudioManager.h" +class SampleModdingExporter : public BaseExporter { +public: + ExportResult Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement); +}; + class SampleData : public IParsedData { public: AudioBankSample mSample; @@ -21,7 +26,10 @@ public: std::optional> parse(std::vector& buffer, YAML::Node& data) override; std::unordered_map> GetExporters() override { return { + REGISTER(Modding, SampleModdingExporter) REGISTER(Binary, SampleBinaryExporter) }; } + + bool SupportModdedAssets() override { return true; } }; \ No newline at end of file