summaryrefslogtreecommitdiff
path: root/src/factories/naudio/v0/SampleFactory.cpp
diff options
context:
space:
mode:
authorKiritoDv <kiritodev01@gmail.com>2024-11-19 16:40:24 -0600
committerLywx <kiritodev01@gmail.com>2024-11-21 00:05:17 -0600
commit528ea6090bbc39f77d320b3fb9b8caa4fe958948 (patch)
treef176350645d478cc80fa1505120591936ff9ba3b /src/factories/naudio/v0/SampleFactory.cpp
parent4451ae28dba815411a39fcda22a3455d1ea69343 (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.cpp43
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