#include "SampleFactory.h" ExportResult SampleBinaryExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { auto writer = LUS::BinaryWriter(); auto sample = std::static_pointer_cast(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(state.size())); writer.Write(reinterpret_cast(state.data()), state.size() * sizeof(int16_t)); } else { writer.Write(static_cast(0)); } writer.Write(sample.book.order); writer.Write(sample.book.npredictors); writer.Write(static_cast(sample.book.table.size())); writer.Write(reinterpret_cast(sample.book.table.data()), sample.book.table.size() * sizeof(int16_t)); writer.Write(static_cast(sample.data.size())); writer.Write(reinterpret_cast(sample.data.data()), sample.data.size()); writer.Write(sample.name); writer.Finish(write); return std::nullopt; } std::optional> SampleFactory::parse(std::vector& buffer, YAML::Node& data) { const auto id = data["id"].as(); if(AudioManager::Instance == nullptr){ throw std::runtime_error("AudioManager not initialized"); } AudioBankSample entry = AudioManager::Instance->get_aifc(id); return std::make_shared(entry); }