#include "AssetDumperLoadedSound.h" #include "Sound/WavTypes.h" #include "Sound/WavWriter.h" #include using namespace IW3; bool AssetDumperLoadedSound::ShouldDump(XAssetInfo* asset) { return true; } void AssetDumperLoadedSound::DumpWavPcm(const LoadedSound* asset, std::ostream& stream) { const WavWriter writer(stream); const WavMetaData metaData{.channelCount = static_cast(asset->sound.info.channels), .samplesPerSec = static_cast(asset->sound.info.rate), .bitsPerSample = static_cast(asset->sound.info.bits)}; writer.WritePcmHeader(metaData, asset->sound.info.data_len); writer.WritePcmData(asset->sound.data, asset->sound.info.data_len); } void AssetDumperLoadedSound::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) { const auto* loadedSound = asset->Asset(); const auto assetFile = context.OpenAssetFile(std::format("sound/{}", asset->m_name)); if (!assetFile) return; auto& stream = *assetFile; switch (static_cast(loadedSound->sound.info.format)) { case WavFormat::PCM: DumpWavPcm(loadedSound, stream); break; default: std::cerr << std::format("Unknown format {} for loaded sound: {}\n", loadedSound->sound.info.format, loadedSound->name); break; } }