From 9421c024c891a883b547babdee471d8ca300ec0a Mon Sep 17 00:00:00 2001 From: KiritoDv Date: Sat, 16 Sep 2023 12:01:39 -0600 Subject: [PATCH] Fixed animation and audio extraction on windows --- .gitignore | 3 ++- src/audio/AIFCDecode.cpp | 8 ++++++++ src/audio/AudioManager.cpp | 10 +++++----- src/audio/AudioManager.h | 2 ++ src/factories/AnimFactory.cpp | 4 ++-- 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index e038c5e..45b1dad 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ cmake-build-*/ debug/ *.z64 *.n64 -assets/ \ No newline at end of file +assets/ +build/ \ No newline at end of file diff --git a/src/audio/AIFCDecode.cpp b/src/audio/AIFCDecode.cpp index 21eec08..e627ad0 100644 --- a/src/audio/AIFCDecode.cpp +++ b/src/audio/AIFCDecode.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include "binarytools/BinaryWriter.h" #include "BinaryReader.h" @@ -24,10 +25,17 @@ typedef float f32; #undef BSWAP32 #undef BSWAP64 +#ifdef _MSC_VER +#define bswap16(x) _byteswap_ushort(x) +#define bswap32(x) _byteswap_ulong(x) +#define BSWAP16(x) x = bswap16(x) +#define BSWAP32(x) x = bswap32(x) +#else #define bswap16(x) __builtin_bswap16(x) #define bswap32(x) __builtin_bswap32(x) #define BSWAP16(x) x = bswap16(x) #define BSWAP32(x) x = bswap32(x) +#endif #define BSWAP16_MANY(x, n) for (s32 _i = 0; _i < n; _i++) BSWAP16((x)[_i]) diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index 2316141..7dbf42f 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -508,7 +508,7 @@ void serialize_f80(double num, LUS::BinaryWriter &writer) { #define START_SECTION(section) \ { \ - out.Write(BSWAP32(section)); \ + out.Write((uint32_t) BSWAP32(section)); \ LUS::BinaryWriter tmp = LUS::BinaryWriter(); \ tmp.SetEndianness(LUS::Endianness::Big); \ @@ -516,7 +516,7 @@ void serialize_f80(double num, LUS::BinaryWriter &writer) { { \ LUS::BinaryWriter tmp = LUS::BinaryWriter(); \ tmp.SetEndianness(LUS::Endianness::Big); \ - out.Write(BSWAP32(AIFC::MagicValues::AAPL)); \ + out.Write((uint32_t) BSWAP32(AIFC::MagicValues::AAPL)); \ tmp.Write(AIFC::MagicValues::stoc); \ tmp.Write(section, false); \ @@ -524,7 +524,7 @@ void serialize_f80(double num, LUS::BinaryWriter &writer) { auto odata = tmp.ToVector(); \ size_t size = odata.size(); \ len += ALIGN(size, 2) + 8; \ - out.Write(BSWAP32((uint32_t) size)); \ + out.Write((uint32_t) BSWAP32((uint32_t) size)); \ out.Write(odata.data(), odata.size()); \ if(size % 2){ \ out.WriteByte(0); \ @@ -562,10 +562,10 @@ void AudioManager::write_aifc(AudioBankSample* entry, LUS::BinaryWriter &out) { } } - out.Write(BSWAP32(AIFC::MagicValues::FORM)); + out.Write((uint32_t) BSWAP32(AIFC::MagicValues::FORM)); // This should be where the size is, but we need to write it later out.Write((uint32_t) 0); - out.Write(BSWAP32(AIFC::MagicValues::AIFC)); + out.Write((uint32_t) BSWAP32(AIFC::MagicValues::AIFC)); START_SECTION(AIFC::MagicValues::COMM); diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index 4b5d9ce..a26fe2d 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -5,6 +5,8 @@ #include #include #include "binarytools/BinaryWriter.h" +#include +#include #define NONE 0xFFFF #define ALIGN(val, al) (size_t) ((val + (al - 1)) & -al) diff --git a/src/factories/AnimFactory.cpp b/src/factories/AnimFactory.cpp index 7727220..0416ce0 100644 --- a/src/factories/AnimFactory.cpp +++ b/src/factories/AnimFactory.cpp @@ -35,7 +35,7 @@ void WriteAnimationHeader(LUS::BinaryWriter* writer, nlohmann::json& offsets, st void WriteAnimationIndex(LUS::BinaryWriter* writer, nlohmann::json& offsets, std::vector& buffer) { LUS::BinaryReader reader((char*) buffer.data() + (size_t)offsets[0], offsets[1]); reader.SetEndianness(LUS::Endianness::Big); - size_t entries = ((size_t) offsets[1]); + size_t entries = ((size_t) offsets[1]) / sizeof(int16_t); WRITE_U32(entries); for(size_t id = 0; id < entries; id++) { WRITE_I16(reader.ReadInt16()); @@ -46,7 +46,7 @@ void WriteAnimationIndex(LUS::BinaryWriter* writer, nlohmann::json& offsets, std void WriteAnimationValues(LUS::BinaryWriter* writer, nlohmann::json& offsets, std::vector& buffer) { LUS::BinaryReader reader((char*) buffer.data() + (size_t)offsets[0], offsets[1]); reader.SetEndianness(LUS::Endianness::Big); - size_t entries = ((size_t) offsets[1]); + size_t entries = ((size_t) offsets[1]) / sizeof(uint16_t); WRITE_U32(entries); for(size_t id = 0; id < entries; id++) { WRITE_U16(reader.ReadUInt16());