Endianness fixes in JAudio loading code

Not tested because I can't even get the code to init again due to the aforementioned race condition
This commit is contained in:
PJB3005
2026-02-26 23:22:47 +01:00
parent b6a6c4fd0e
commit 38c006fa0e
19 changed files with 110 additions and 107 deletions
+32 -32
View File
@@ -10,34 +10,34 @@ class JKRHeap;
namespace JASBNKParser {
struct TFileHeader {
/* 0x0 */ int id;
/* 0x4 */ u32 mSize;
/* 0x0 */ BE(int) id;
/* 0x4 */ BE(u32) mSize;
/* 0x8 */ u8 _08[4];
/* 0xC */ u32 mVersion;
/* 0xC */ BE(u32) mVersion;
};
namespace Ver1 {
struct TOsc {
/* 0x00 */ u32 id;
/* 0x00 */ BE(u32) id;
/* 0x04 */ u8 mTarget;
/* 0x08 */ f32 _08;
/* 0x0C */ u32 mTableOffset;
/* 0x10 */ u32 _10;
/* 0x14 */ f32 mScale;
/* 0x18 */ f32 _18;
/* 0x08 */ BE(f32) _08;
/* 0x0C */ BE(u32) mTableOffset;
/* 0x10 */ BE(u32) _10;
/* 0x14 */ BE(f32) mScale;
/* 0x18 */ BE(f32) _18;
};
struct TPercData {
/* 0x00 */ f32 mVolume;
/* 0x04 */ f32 mPitch;
/* 0x00 */ BE(f32) mVolume;
/* 0x04 */ BE(f32) mPitch;
/* 0x08 */ u8 mPan;
/* 0x0A */ u16 mRelease;
/* 0x0C */ u32 field_0xc;
/* 0x0A */ BE(u16) mRelease;
/* 0x0C */ BE(u32) field_0xc;
};
struct TChunk {
/* 0x0 */ u32 mID;
/* 0x4 */ u32 mSize;
/* 0x0 */ BE(u32) mID;
/* 0x4 */ BE(u32) mSize;
};
struct TEnvtChunk : TChunk {
@@ -45,13 +45,13 @@ namespace JASBNKParser {
};
struct TOscChunk : TChunk {
/* 0x8 */ u32 mCount;
/* 0x8 */ BE(u32) mCount;
/* 0xC */ TOsc mOsc[0];
};
struct TListChunk : TChunk {
/* 0x8 */ u32 count;
/* 0xC */ u32 mOffsets[0];
/* 0x8 */ BE(u32) count;
/* 0xC */ BE(u32) mOffsets[0];
};
TChunk* findChunk(void const*, u32);
@@ -67,18 +67,18 @@ namespace JASBNKParser {
struct TOsc {
/* 0x00 */ u8 mTarget;
/* 0x04 */ f32 field_0x4;
/* 0x04 */ BE(f32) field_0x4;
/* 0x08 */ TOffset<JASOscillator::Point> mPointOffset;
/* 0x0C */ TOffset<JASOscillator::Point> field_0xc;
/* 0x10 */ f32 mScale;
/* 0x14 */ f32 field_0x14;
/* 0x10 */ BE(f32) mScale;
/* 0x14 */ BE(f32) field_0x14;
};
struct TVmap {
/* 0x00 */ u8 field_0x0[4];
/* 0x04 */ u32 field_0x4;
/* 0x08 */ f32 field_0x8;
/* 0x0C */ f32 field_0xc;
/* 0x04 */ BE(u32) field_0x4;
/* 0x08 */ BE(f32) field_0x8;
/* 0x0C */ BE(f32) field_0xc;
};
struct TKeymap {
@@ -89,27 +89,27 @@ namespace JASBNKParser {
struct TInst {
/* 0x00 */ u8 field_0x0[8];
/* 0x08 */ f32 mVolume;
/* 0x0C */ f32 mPitch;
/* 0x08 */ BE(f32) mVolume;
/* 0x0C */ BE(f32) mPitch;
/* 0x10 */ TOffset<TOsc> mOscOffset[2];
/* 0x18 */ u8 field_0x18[0x10];
/* 0x28 */ u32 mKeyRegionCount;
/* 0x28 */ BE(u32) mKeyRegionCount;
/* 0x2C */ TOffset<TKeymap> mKeymapOffset[0];
};
struct TPmap {
/* 0x00 */ f32 mVolume;
/* 0x04 */ f32 mPitch;
/* 0x00 */ BE(f32) mVolume;
/* 0x04 */ BE(f32) mPitch;
/* 0x08 */ u8 field_0x8[0xc];
/* 0x14 */ TOffset<TVmap> mVmapOffset;
};
struct TPerc {
/* 0x000 */ u32 mMagic;
/* 0x000 */ BE(u32) mMagic;
/* 0x000 */ u8 field_0x0[0x84];
/* 0x088 */ TOffset<TPmap> mPmapOffset[0x80];
/* 0x288 */ s8 mPan[0x80];
/* 0x308 */ u16 mRelease[0x80];
/* 0x308 */ BE(u16) mRelease[0x80];
};
struct TOffsetData {
@@ -133,7 +133,7 @@ namespace JASBNKParser {
JASBasicBank* createBasicBank(void const*, JKRHeap*);
inline u32 getBankNumber(const void* param_0) {
u32* ptr = (u32*)param_0;
BE(u32)* ptr = (BE(u32)*)param_0;
return ptr[2];
}
+1 -1
View File
@@ -11,7 +11,7 @@
struct JASBasicWaveBank : public JASWaveBank {
struct TWaveHandle : public JASWaveHandle {
TWaveHandle() { mHeap = NULL; }
virtual int getWavePtr() const;
virtual intptr_t getWavePtr() const;
virtual const JASWaveInfo* getWaveInfo() const { return &field_0x4; }
bool compareHeap(JASHeap* heap) const { return mHeap == heap;}
+1 -1
View File
@@ -156,7 +156,7 @@ public:
u32 field_0x0;
JASWaveInfo field_0x4;
} field_0xdc;
int field_0x104;
intptr_t field_0x104;
static OSMessageQueue sBankDisposeMsgQ;
static OSMessage sBankDisposeMsg[16];
+4 -3
View File
@@ -2,6 +2,7 @@
#define JASOSCILLATOR_H
#include <dolphin/types.h>
#include "dusk/endian.h"
/**
* @ingroup jsystem-jaudio
@@ -9,9 +10,9 @@
*/
struct JASOscillator {
struct Point {
/* 0x0 */ s16 _0;
/* 0x2 */ s16 _2;
/* 0x4 */ s16 _4;
/* 0x0 */ BE(s16) _0;
/* 0x2 */ BE(s16) _2;
/* 0x4 */ BE(s16) _4;
};
struct EffectParams {
+1 -1
View File
@@ -7,7 +7,7 @@
struct JASSimpleWaveBank : JASWaveBank, JASWaveArc {
struct TWaveHandle : JASWaveHandle {
int getWavePtr() const;
intptr_t getWavePtr() const;
TWaveHandle();
const JASWaveInfo* getWaveInfo() const;
+14 -14
View File
@@ -22,26 +22,26 @@ public:
}
private:
/* 0x0 */ u32 mOffset;
/* 0x0 */ BE(u32) mOffset;
};
struct TCtrlWave {
/* 0x0 */ u32 _00;
/* 0x0 */ BE(u32) _00;
};
struct TWave {
/* 0x00 */ u8 _00;
/* 0x01 */ u8 _01;
/* 0x02 */ u8 _02;
/* 0x04 */ f32 _04;
/* 0x08 */ u32 mOffset;
/* 0x0C */ u32 _0C;
/* 0x10 */ u32 _10;
/* 0x14 */ u32 _14;
/* 0x18 */ u32 _18;
/* 0x1C */ u32 _1C;
/* 0x20 */ s16 _20;
/* 0x22 */ s16 _22;
/* 0x04 */ BE(f32) _04;
/* 0x08 */ BE(u32) mOffset;
/* 0x0C */ BE(u32) _0C;
/* 0x10 */ BE(u32) _10;
/* 0x14 */ BE(u32) _14;
/* 0x18 */ BE(u32) _18;
/* 0x1C */ BE(u32) _1C;
/* 0x20 */ BE(s16) _20;
/* 0x22 */ BE(s16) _22;
};
struct TWaveArchive {
@@ -56,7 +56,7 @@ public:
struct TCtrl {
/* 0x0 */ u8 _00[4];
/* 0x4 */ u32 mWaveCount;
/* 0x4 */ BE(u32) mWaveCount;
/* 0x8 */ TOffset<TCtrlWave> mCtrlWaveOffsets[0];
};
@@ -67,14 +67,14 @@ public:
struct TCtrlGroup {
/* 0x0 */ u8 _00[8];
/* 0x8 */ u32 mGroupCount;
/* 0x8 */ BE(u32) mGroupCount;
/* 0xC */ TOffset<TCtrlScene> mCtrlSceneOffsets[0];
};
/** @fabricated */
struct THeader {
/* 0x00 */ u8 _00[0xC];
/* 0x0C */ u32 mWaveTableSize;
/* 0x0C */ BE(u32) mWaveTableSize;
/* 0x10 */ TOffset<TWaveArchiveBank> mArchiveBankOffset;
/* 0x14 */ TOffset<TCtrlGroup> mCtrlGroupOffset;
};
+1 -1
View File
@@ -39,7 +39,7 @@ class JASWaveHandle {
public:
virtual ~JASWaveHandle() {}
virtual const JASWaveInfo* getWaveInfo() const = 0;
virtual int getWavePtr() const = 0;
virtual intptr_t getWavePtr() const = 0;
};
/**
@@ -2,6 +2,7 @@
#define JAUAUDIOARCINTERPRETER_H
#include <dolphin/types.h>
#include "dusk/endian.h"
/**
* @ingroup jsystem-jaudio
@@ -33,7 +34,7 @@ public:
}
u32 readU32_() {
u32 temp = *(u32*)mReadPtr;
u32 temp = *(BE(u32)*)mReadPtr;
mReadPtr += 4;
return temp;
}
+2 -2
View File
@@ -40,8 +40,8 @@ public:
/* 0x88 */ const void* mBstnDst;
/* 0x8C */ JSUList<JAUDisposer_> field_0x8c;
/* 0x98 */ s32 field_0x98;
/* 0x9C */ int field_0x9c;
/* 0xA0 */ int field_0xa0;
/* 0x9C */ int mBankMemoryUsage;
/* 0xA0 */ int mWaveBankMemoryUsage;
};
JAUSection(JAUSectionHeap*, u32, s32);
+4 -4
View File
@@ -13,9 +13,9 @@ struct JAISeqDataRegion;
struct JAUSeqCollectionData {
s8 field_0x0;
s8 field_0x1;
u16 field_0x2;
u32 field_0x4;
u32 field_0x8;
BE(u16) field_0x2;
BE(u32) field_0x4;
BE(u32) field_0x8;
};
/**
@@ -32,7 +32,7 @@ public:
bool isValid() const { return field_0x8; }
/* 0x00 */ u16 field_0x0;
/* 0x04 */ const u32* field_0x4;
/* 0x04 */ const BE(u32)* field_0x4;
/* 0x08 */ const JAUSeqCollectionData* field_0x8;
/* 0x0C */ int field_0xc;
};
+12 -11
View File
@@ -3,6 +3,7 @@
#include "JSystem/JAudio2/JAISound.h"
#include "JSystem/JAudio2/JASGadget.h"
#include "dusk/endian.h"
/**
* @ingroup jsystem-jaudio
@@ -36,10 +37,10 @@ struct JAUSoundTable_ {
field_0x0 = param_0;
// magic number is not in debug rom. I'm not sure what this comparison is (maybe some sort of '' number?)
// I also do not know how it is different between JAUSoundTable and JAUSoundNameTable
if (*(u32*)field_0x0 + 0xbdad0000 != Root::magicNumber()) {
if (*(BE(u32)*)field_0x0 + 0xbdad0000 != Root::magicNumber()) {
field_0x0 = NULL;
} else {
field_0x4 = (Root*)((u8*)field_0x0 + *((u32*)field_0x0 + 3));
field_0x4 = (Root*)((u8*)field_0x0 + *((BE(u32)*)field_0x0 + 3));
}
}
@@ -83,8 +84,8 @@ struct JAUSoundTable_ {
*/
struct JAUSoundTableRoot {
static inline u32 magicNumber() { return 0x5420; }
u32 mSectionNumber;
u32 mSectionOffsets[0];
BE(u32) mSectionNumber;
BE(u32) mSectionOffsets[0];
};
/**
@@ -102,8 +103,8 @@ struct JAUSoundTableSection {
return mGroupOffsets[index];
}
u32 mNumGroups;
u32 mGroupOffsets[0];
BE(u32) mNumGroups;
BE(u32) mGroupOffsets[0];
};
/**
@@ -128,11 +129,11 @@ struct JAUSoundTableGroup {
if (index >= mNumItems) {
return 0;
}
return *(u32*)(mTypeIds + index * 4) & 0xffffff;
return *(BE(u32)*)(mTypeIds + index * 4) & 0xffffff;
}
u32 mNumItems;
u32 field_0x4;
BE(u32) mNumItems;
BE(u32) field_0x4;
u8 mTypeIds[0];
};
@@ -169,8 +170,8 @@ struct JAUSoundTable : public JASGlobalInstance<JAUSoundTable> {
*/
struct JAUSoundNameTableRoot {
static inline u32 magicNumber() { return 0x544e; }
u32 mSectionNumber;
u32 mSectionOffsets[0];
BE(u32) mSectionNumber;
BE(u32) mSectionOffsets[0];
};
/**
* @ingroup jsystem-jaudio
+2 -2
View File
@@ -5,8 +5,8 @@
struct BinaryStreamFileTable {
/* 0x0 */ u8 mIdentifier[4];
/* 0x4 */ u32 mNumFiles;
/* 0x8 */ int mFilePathOffsets[];
/* 0x4 */ BE(u32) mNumFiles;
/* 0x8 */ BE(int) mFilePathOffsets[];
};
/**