diff options
Diffstat (limited to 'src/factories/SampleFactory.cpp')
| -rw-r--r-- | src/factories/SampleFactory.cpp | 46 |
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 |
