Fixed animation and audio extraction on windows

This commit is contained in:
KiritoDv
2023-09-16 12:01:39 -06:00
parent ae8487a4ad
commit 9421c024c8
5 changed files with 19 additions and 8 deletions
+2 -1
View File
@@ -7,4 +7,5 @@ cmake-build-*/
debug/
*.z64
*.n64
assets/
assets/
build/
+8
View File
@@ -8,6 +8,7 @@
#include <cstdio>
#include <cstdlib>
#include <cstdarg>
#include <stdexcept>
#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])
+5 -5
View File
@@ -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);
+2
View File
@@ -5,6 +5,8 @@
#include <string>
#include <iostream>
#include "binarytools/BinaryWriter.h"
#include <variant>
#include <optional>
#define NONE 0xFFFF
#define ALIGN(val, al) (size_t) ((val + (al - 1)) & -al)
+2 -2
View File
@@ -35,7 +35,7 @@ void WriteAnimationHeader(LUS::BinaryWriter* writer, nlohmann::json& offsets, st
void WriteAnimationIndex(LUS::BinaryWriter* writer, nlohmann::json& offsets, std::vector<uint8_t>& 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<uint8_t>& 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());