summaryrefslogtreecommitdiff
path: root/src/factories/SampleFactory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/factories/SampleFactory.cpp')
-rw-r--r--src/factories/SampleFactory.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/factories/SampleFactory.cpp b/src/factories/SampleFactory.cpp
new file mode 100644
index 0000000..7e2d1a1
--- /dev/null
+++ b/src/factories/SampleFactory.cpp
@@ -0,0 +1,46 @@
+#include "SampleFactory.h"
+
+#include <vector>
+#include "audio/AudioManager.h"
+
+bool SampleFactory::process(LUS::BinaryWriter* writer, YAML::Node& data, std::vector<uint8_t>& buffer) {
+ WRITE_HEADER(LUS::ResourceType::Sample, 0);
+
+ auto id = data["id"].as<int32_t>();
+ AudioBankSample entry = AudioManager::Instance->get_aifc(id);
+
+ // Write AdpcmLoop
+ WRITE_U32(entry.loop.start);
+ WRITE_U32(entry.loop.end);
+ WRITE_I32(entry.loop.count);
+ WRITE_U32(entry.loop.pad);
+
+ if(entry.loop.state.has_value()){
+ std::vector<int16_t> state = entry.loop.state.value();
+ WRITE_U32(state.size());
+ for(auto &value : state){
+ writer->Write(value);
+ }
+ } else {
+ WRITE_U32(0);
+ }
+
+ // Write AdpcmBook
+ WRITE_I32(entry.book.order);
+ WRITE_I32(entry.book.npredictors);
+
+ WRITE_U32(entry.book.table.size());
+ for(auto &value : entry.book.table){
+ writer->Write(value);
+ }
+
+ // Write sample
+ WRITE_I32(entry.data.size());
+ for(auto &value : entry.data){
+ WRITE_U8(value);
+ }
+
+ writer->Write(entry.name);
+
+ return true;
+} \ No newline at end of file