diff options
| author | KiritoDv <kiritodev01@gmail.com> | 2023-09-17 23:55:59 -0600 |
|---|---|---|
| committer | KiritoDv <kiritodev01@gmail.com> | 2023-09-17 23:55:59 -0600 |
| commit | 396f732bc58080430562ea60fd345bf2e51cfc0b (patch) | |
| tree | 69a90e2d4e255074bc5c476c991deb7b30f847e3 /src/factories/SampleFactory.cpp | |
| parent | 87ba0d258759a03b2397d63ba5d203cf5fe26c0f (diff) | |
Refactored to use a better file format
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 |
