Work on Audio, JAUSeqDataBlockMgr OK (#2027)

This commit is contained in:
hatal175
2024-01-09 01:19:07 +02:00
committed by GitHub
parent 40dae638a7
commit 28bef08667
38 changed files with 344 additions and 931 deletions
+4 -4
View File
@@ -20,17 +20,17 @@ struct JAISeqData {
struct JAISeqDataRegion {
bool intersects(JAISeqData& seqData) const {
if (field_0x0 + field_0x4 < (u32)seqData.field_0x0) {
if ((u32)addr + size < (u32)seqData.field_0x0) {
return false;
}
if ((u32)seqData.field_0x0 + seqData.field_0x4 < field_0x0) {
if ((u32)seqData.field_0x0 + seqData.field_0x4 < (u32)addr) {
return false;
}
return true;
}
/* 0x00 */ u32 field_0x0;
/* 0x04 */ u32 field_0x4;
/* 0x00 */ u8* addr;
/* 0x04 */ u32 size;
};
@@ -30,6 +30,7 @@ struct JASBasicWaveBank : public JASWaveBank {
/* 80298B64 */ int getWavePtr() const;
/* 80298C18 */ TWaveHandle() { mHeap = NULL; }
/* 80298C64 */ const JASWaveInfo* getWaveInfo() const { return &field_0x4; }
bool compareHeap(JASHeap* heap) const { return mHeap == heap;}
/* 0x04 */ JASWaveInfo field_0x4;
/* 0x28 */ JASHeap* mHeap;
+1 -1
View File
@@ -20,7 +20,7 @@ public:
/* 802906F0 */ JASHeap* getTailHeap();
/* 8029077C */ u32 getTailOffset();
/* 802907E0 */ u32 getCurOffset();
/* 80290B54 */ ~JASHeap();
/* 80290B54 */ ~JASHeap() {}
void* getBase() { return mBase; }
bool isAllocated() { return mBase; }
+72
View File
@@ -1,5 +1,77 @@
#ifndef JASWSPARSER_H
#define JASWSPARSER_H
#include "dolphin/types.h"
#include "JSystem/JSupport/JSupport.h"
class JKRHeap;
class JASWaveBank;
class JASBasicWaveBank;
class JASSimpleWaveBank;
class JASWSParser {
public:
template<class T>
class TOffset {
public:
T* ptr(void* param_0) {
return JSUConvertOffsetToPtr<T>(param_0, mOffset);
}
void* mOffset;
};
/** @fabricated */
struct THeader {
u8 _00[0x10]; // _00 - unknown/padding
u32 mArchiveBankOffset; // _10
u32 mCtrlGroupOffset; // _14
};
struct TCtrlWave {
u32 _00; // _00
};
struct TWave {
u8 _00; // _00
u8 _01; // _01
u8 _02; // _02
f32 _04; // _04
u32 mOffset; // _08
u32 _0C; // _0C
u32 _10; // _10
u32 _14; // _14
u32 _18; // _18
u32 _1C; // _1C
s16 _20; // _20
s16 _22; // _22
};
struct TWaveArchive {
char mFileName[0x74]; // _00 - unknown length
u32 mWaveOffsets[1]; // _74 - dynamic length
};
struct TWaveArchiveBank {
u8 _00[8]; // _00 - unknown/padding
u32 mArchiveOffsets[1]; // _08 - dynamic length
};
struct TCtrl {
u8 _00[4]; // _00 - unknown/padding
u32 mWaveCount; // _04
u32 mCtrlWaveOffsets[1]; // _08 - dynamic length
};
struct TCtrlScene {
u8 _00[12]; // _00 - unknown/padding
u32 mCtrlOffset; // _0C
};
struct TCtrlGroup {
u8 _00[8]; // _00 - unknown/padding
u32 mCtrlGroupCount; // _08
u32 mCtrlSceneOffsets[1]; // _0C - dynamic length
};
/* 80298FB0 */ static u32 getGroupCount(void const*);
/* 80298FD8 */ static JASWaveBank* createWaveBank(void const*, JKRHeap*);
/* 80299034 */ static JASBasicWaveBank* createBasicWaveBank(void const*, JKRHeap*);
/* 80299264 */ static JASSimpleWaveBank* createSimpleWaveBank(void const*, JKRHeap*);
static u8 sUsedHeapSize[4 + 4 /* padding */];
};
#endif /* JASWSPARSER_H */
+1 -1
View File
@@ -22,7 +22,7 @@ public:
/* 802A4990 */ virtual void beginBNKList(u32, u32);
/* 802A49B4 */ virtual void endBNKList();
/* 802A49D8 */ virtual void readMaxSeCategory(int, int, int);
/* 802A49FC */ virtual ~JAUAudioArcLoader();
/* 802A49FC */ virtual ~JAUAudioArcLoader() {}
/* 0x0C */ JAUSection* mSection;
};
+6
View File
@@ -101,6 +101,12 @@ public:
/* 802A6278 */ ~JAUSectionHeap();
JAUWaveBankTable& getWaveBankTable() { return sectionHeapData_.waveBankTable; }
JKRHeap* getHeap() {
if (getOpenSection()->isBuilding() != 0) {
return mHeap;
}
return NULL;
}
/* 0x00 */ JAUSection base1;
/* 0xDC */ u8 base2[0xE0 - 0xDC]; // JAISeqDataMgr
+9 -9
View File
@@ -2,6 +2,7 @@
#define JAUSEQDATABLOCKMGR_H
#include "JSystem/JAudio2/JAISound.h"
#include "JSystem/JAudio2/JAISeqDataMgr.h"
#include "JSystem/JSupport/JSUList.h"
class JAISeqData;
@@ -13,18 +14,17 @@ struct JAUSeqDataBlock {
/* 0x00 */ JSULink<JAUSeqDataBlock> field_0x0;
/* 0x10 */ JAISoundID field_0x10;
/* 0x14 */ u8* field_0x14;
/* 0x18 */ u32 field_0x18;
/* 0x14 */ JAISeqDataRegion field_0x14;
/* 0x1C */ int field_0x1c;
};
class JAUSeqDataBlocks {
public:
/* 802A6928 */ void getSeqData(JAISoundID);
/* 802A6974 */ void seekFreeBlock(u32);
/* 802A69D8 */ void append(JSULink<JAUSeqDataBlock>*);
/* 802A69F8 */ void remove(JSULink<JAUSeqDataBlock>*);
/* 802A6A18 */ void hasFailedBlock(JAISoundID);
/* 802A6928 */ u8* getSeqData(JAISoundID);
/* 802A6974 */ JSULink<JAUSeqDataBlock>* seekFreeBlock(u32);
/* 802A69D8 */ bool append(JSULink<JAUSeqDataBlock>*);
/* 802A69F8 */ bool remove(JSULink<JAUSeqDataBlock>*);
/* 802A6A18 */ bool hasFailedBlock(JAISoundID);
/* 0x00 */ JSUList<JAUSeqDataBlock> field_0x0;
};
@@ -36,8 +36,8 @@ public:
/* 802A6AA8 */ s32 getSeqData(JAISoundID, JAISeqDataUser*, JAISeqData*, bool);
/* 802A6B8C */ bool appendDynamicSeqDataBlock(JAUSeqDataBlock*);
/* 802A6C18 */ bool loadDynamicSeq(JAISoundID, bool, JAISeqDataUser*);
/* 802A6D48 */ void releaseIdleDynamicSeqDataBlock(JAISeqDataUser*);
/* 802A6E00 */ void releaseIdleDynamicSeqDataBlock_(JAISeqDataUser*, u32);
/* 802A6D48 */ u32 releaseIdleDynamicSeqDataBlock(JAISeqDataUser*);
/* 802A6E00 */ JAUSeqDataBlock* releaseIdleDynamicSeqDataBlock_(JAISeqDataUser*, u32);
/* 802A6EDC */ void rearrangeLoadingSeqs_();
JKRArchive* getSeqDataArchive() { return seqDataArchive_; }
+4
View File
@@ -226,4 +226,8 @@ inline bool JKRRemoveResource(void* resource, JKRFileLoader* fileLoader) {
return JKRFileLoader::removeResource(resource, fileLoader);
}
inline void JKRUnmountArchive(JKRArchive* arc) {
arc->unmount();
}
#endif
+1 -1
View File
@@ -6,7 +6,7 @@
class Z2AudioArcLoader : public JAUAudioArcLoader {
public:
Z2AudioArcLoader(JAUSection*);
virtual ~Z2AudioArcLoader();
virtual ~Z2AudioArcLoader() {}
virtual bool readCommandMore(u32);
void readBFCA(const void*);