diff options
| author | KiritoDv <kiritodev01@gmail.com> | 2024-11-19 16:40:24 -0600 |
|---|---|---|
| committer | Lywx <kiritodev01@gmail.com> | 2024-11-21 00:05:17 -0600 |
| commit | 528ea6090bbc39f77d320b3fb9b8caa4fe958948 (patch) | |
| tree | f176350645d478cc80fa1505120591936ff9ba3b /src/factories/naudio/v0/SampleFactory.cpp | |
| parent | 4451ae28dba815411a39fcda22a3455d1ea69343 (diff) | |
Recreated audio export system to something more generic
Diffstat (limited to 'src/factories/naudio/v0/SampleFactory.cpp')
| -rw-r--r-- | src/factories/naudio/v0/SampleFactory.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/factories/naudio/v0/SampleFactory.cpp b/src/factories/naudio/v0/SampleFactory.cpp new file mode 100644 index 0000000..b8bc7fa --- /dev/null +++ b/src/factories/naudio/v0/SampleFactory.cpp @@ -0,0 +1,43 @@ +#include "SampleFactory.h" + +ExportResult SampleBinaryExporter::Export(std::ostream &write, std::shared_ptr<IParsedData> raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { + auto writer = LUS::BinaryWriter(); + auto sample = std::static_pointer_cast<SampleData>(raw)->mSample; + + WriteHeader(writer, Torch::ResourceType::Sample, 0); + writer.Write(sample.loop.start); + writer.Write(sample.loop.end); + writer.Write(sample.loop.count); + writer.Write(sample.loop.pad); + + if(sample.loop.state.has_value()){ + auto state = sample.loop.state.value(); + writer.Write(static_cast<uint32_t>(state.size())); + writer.Write(reinterpret_cast<char*>(state.data()), state.size() * sizeof(int16_t)); + } else { + writer.Write(static_cast<uint32_t>(0)); + } + + writer.Write(sample.book.order); + writer.Write(sample.book.npredictors); + + writer.Write(static_cast<uint32_t>(sample.book.table.size())); + writer.Write(reinterpret_cast<char*>(sample.book.table.data()), sample.book.table.size() * sizeof(int16_t)); + + writer.Write(static_cast<int32_t>(sample.data.size())); + writer.Write(reinterpret_cast<char*>(sample.data.data()), sample.data.size()); + + writer.Write(sample.name); + + writer.Finish(write); + return std::nullopt; +} + +std::optional<std::shared_ptr<IParsedData>> SampleFactory::parse(std::vector<uint8_t>& buffer, YAML::Node& data) { + const auto id = data["id"].as<int32_t>(); + if(AudioManager::Instance == nullptr){ + throw std::runtime_error("AudioManager not initialized"); + } + AudioBankSample entry = AudioManager::Instance->get_aifc(id); + return std::make_shared<SampleData>(entry); +}
\ No newline at end of file |
