diff --git a/configure.py b/configure.py index 2a22c0328..bd70883e6 100755 --- a/configure.py +++ b/configure.py @@ -877,7 +877,7 @@ config.libs = [ Object(Matching, "JSystem/JAudio/JASInstSense.cpp"), Object(Matching, "JSystem/JAudio/JASInstRand.cpp"), Object(Matching, "JSystem/JAudio/JASWSParser.cpp"), - Object(NonMatching, "JSystem/JAudio/JASBNKParser.cpp"), + Object(Matching, "JSystem/JAudio/JASBNKParser.cpp"), Object(Matching, "JSystem/JAudio/JASWaveArcLoader.cpp"), Object(Matching, "JSystem/JAudio/JASWaveBankMgr.cpp"), Object(Matching, "JSystem/JAudio/JASBankMgr.cpp"), diff --git a/include/JSystem/JAudio/JAISequenceMgr.h b/include/JSystem/JAudio/JAISequenceMgr.h index adb3048e4..a4922c699 100644 --- a/include/JSystem/JAudio/JAISequenceMgr.h +++ b/include/JSystem/JAudio/JAISequenceMgr.h @@ -37,6 +37,8 @@ namespace JAInter { public: SeqUpdateData(); + void init() {} + /* 0x00 */ u8 field_0x0; /* 0x01 */ u8 field_0x1; /* 0x02 */ u8 field_0x2; diff --git a/include/JSystem/JAudio/JASBNKParser.h b/include/JSystem/JAudio/JASBNKParser.h index bba4561ed..40a626e3f 100644 --- a/include/JSystem/JAudio/JASBNKParser.h +++ b/include/JSystem/JAudio/JASBNKParser.h @@ -2,53 +2,27 @@ #define JASBNKPARSER_H #include "JSystem/JAudio/JASOscillator.h" +#include "JSystem/JSupport/JSupport.h" namespace JASystem { class TBasicBank; namespace BNKParser { - struct THeader { - /* 0x000 */ u8 field_0x0[0x24]; - /* 0x024 */ u32 mInstOffsets[0x80]; - /* 0x224 */ u8 field_0x224[0x190]; - /* 0x3B4 */ u32 mPercOffsets[12]; - }; - struct TInst { - /* 0x00 */ u8 field_0x0[8]; - /* 0x08 */ f32 field_0x8; - /* 0x0C */ f32 field_0xC; - /* 0x10 */ u32 mOscOffsets[2]; - /* 0x18 */ u32 mRandOffsets[2]; - /* 0x20 */ u32 mSenseOffsets[2]; - /* 0x28 */ u32 mKeyRegionCount; - /* 0x2C */ u32 mKeymapOffsets[2]; - }; - struct TKeymap { - /* 0x00 */ u8 field_0x0; - /* 0x04 */ u32 field_0x4; - /* 0x08 */ u32 mVmapOffsets[1]; + template + class TOffset { + public: + T *ptr(const void *p) { return JSUConvertOffsetToPtr(p, mOffset); } + private: + u32 mOffset; }; + struct TOsc { /* 0x00 */ u8 field_0x0; /* 0x04 */ f32 field_0x4; - /* 0x08 */ u32 field_0x8; - /* 0x0C */ u32 field_0xC; + /* 0x08 */ TOffset field_0x8; + /* 0x0C */ TOffset field_0xC; /* 0x10 */ f32 field_0x10; /* 0x14 */ f32 field_0x14; }; - struct TPerc { - /* 0x000 */ u32 mMagic; - /* 0x004 */ u8 field_0x4[0x84]; - /* 0x088 */ u32 mPmapOffsets[0x80]; - /* 0x288 */ s8 field_0x288[0x80]; - /* 0x308 */ u16 field_0x308[0x80]; - }; - struct TPmap { - /* 0x00 */ f32 field_0x0; - /* 0x04 */ f32 field_0x4; - /* 0x08 */ u32 mRandOffsets[2]; - /* 0x10 */ u32 mVeloRegionCount; - /* 0x14 */ u32 mVeloRegionOffsets[1]; - }; struct TRand { /* 0x00 */ u8 field_0x0; /* 0x04 */ f32 field_0x4; @@ -67,6 +41,41 @@ namespace JASystem { /* 0x08 */ f32 field_0x8; /* 0x0C */ f32 field_0xC; }; + struct TKeymap { + /* 0x00 */ u8 field_0x0; + /* 0x04 */ u32 mVeloRegionCount; + /* 0x08 */ TOffset mVmapOffsets[1]; + }; + struct TInst { + /* 0x00 */ u8 field_0x0[8]; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ TOffset mOscOffsets[2]; + /* 0x18 */ TOffset mRandOffsets[2]; + /* 0x20 */ TOffset mSenseOffsets[2]; + /* 0x28 */ u32 mKeyRegionCount; + /* 0x2C */ TOffset mKeymapOffsets[2]; + }; + struct TPmap { + /* 0x00 */ f32 field_0x0; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ TOffset mRandOffsets[2]; + /* 0x10 */ u32 mVeloRegionCount; + /* 0x14 */ TOffset mVeloRegionOffsets[1]; + }; + struct TPerc { + /* 0x000 */ u32 mMagic; + /* 0x004 */ u8 field_0x4[0x84]; + /* 0x088 */ TOffset mPmapOffsets[0x80]; + /* 0x288 */ s8 field_0x288[0x80]; + /* 0x308 */ u16 field_0x308[0x80]; + }; + struct THeader { + /* 0x000 */ u8 field_0x0[0x24]; + /* 0x024 */ TOffset mInstOffsets[0x80]; + /* 0x224 */ u8 field_0x224[0x190]; + /* 0x3B4 */ TOffset mPercOffsets[12]; + }; TBasicBank* createBasicBank(void*); TOscillator::Osc_* findOscPtr(JASystem::TBasicBank*, JASystem::BNKParser::THeader*, JASystem::BNKParser::TOsc*); diff --git a/include/JSystem/JAudio/JASBank.h b/include/JSystem/JAudio/JASBank.h index 3d9b1b684..8aa251bf0 100644 --- a/include/JSystem/JAudio/JASBank.h +++ b/include/JSystem/JAudio/JASBank.h @@ -11,7 +11,7 @@ namespace JASystem { class TBank { public: TBank() { - mWaveBank = 0; + mWaveBank = NULL; } virtual ~TBank() {} virtual TInst* getInst(int) const = 0; diff --git a/include/JSystem/JAudio/JASBasicInst.h b/include/JSystem/JAudio/JASBasicInst.h index 7b3ab84d7..546953450 100644 --- a/include/JSystem/JAudio/JASBasicInst.h +++ b/include/JSystem/JAudio/JASBasicInst.h @@ -27,6 +27,7 @@ namespace JASystem { TVeloRegion* getVeloRegion(int); const TVeloRegion* getVeloRegion(int) const; + void setHighKey(int key) { mBaseKey = key; } u32 getVeloRegionCount() const { return mVeloRegionCount; } /* 0x00 */ int mBaseKey; @@ -46,8 +47,11 @@ namespace JASystem { TKeymap* getKeyRegion(int); u32 getType() const { return 'BSIC'; } - /* 0x04 */ f32 field_0x4; - /* 0x08 */ f32 field_0x8; + void setVolume(f32 volume) { mVolume = volume; } + void setPitch(f32 pitch) { mPitch = pitch; } + + /* 0x04 */ f32 mVolume; + /* 0x08 */ f32 mPitch; /* 0x0C */ TInstEffect** mEffect; /* 0x10 */ u32 mEffectCount; /* 0x14 */ TOscillator::Osc_** mOsc; diff --git a/include/JSystem/JAudio/JASDrumSet.h b/include/JSystem/JAudio/JASDrumSet.h index fd3dee3f1..c2187e3e5 100644 --- a/include/JSystem/JAudio/JASDrumSet.h +++ b/include/JSystem/JAudio/JASDrumSet.h @@ -19,9 +19,16 @@ namespace JASystem { void setEffect(int, JASystem::TInstEffect*); void setRelease(u32); - /* 0x00 */ f32 field_0x0; - /* 0x04 */ f32 field_0x4; - /* 0x08 */ f32 field_0x8; + void setVolume(f32 volume) { mVolume = volume; } + void setPitch(f32 pitch) { mPitch = pitch; } + void setPan(f32 pan) { mPan = pan; } + + private: + friend class TDrumSet; + + /* 0x00 */ f32 mVolume; + /* 0x04 */ f32 mPitch; + /* 0x08 */ f32 mPan; /* 0x0C */ u16 field_0xc; /* 0x10 */ TInstEffect** mEffect; /* 0x14 */ u32 mEffectCount; diff --git a/include/JSystem/JAudio/JASInstRand.h b/include/JSystem/JAudio/JASInstRand.h index e83c3f537..5c03a8125 100644 --- a/include/JSystem/JAudio/JASInstRand.h +++ b/include/JSystem/JAudio/JASInstRand.h @@ -7,13 +7,17 @@ namespace JASystem { class TInstRand : public TInstEffect { public: TInstRand() { - field_0x8 = 1.0f; - field_0xc = 0.0f; + mBase = 1.0f; + mWidth = 0.0f; } virtual f32 getY(int, int) const; - /* 0x08 */ f32 field_0x8; - /* 0x0C */ f32 field_0xc; + void setBase(f32 base) { mBase = base; } + void setWidth(f32 width) { mWidth = width; } + + private: + /* 0x08 */ f32 mBase; + /* 0x0C */ f32 mWidth; }; } diff --git a/include/JSystem/JAudio/JASWSParser.h b/include/JSystem/JAudio/JASWSParser.h index 56c4e91b9..dffbb82da 100644 --- a/include/JSystem/JAudio/JASWSParser.h +++ b/include/JSystem/JAudio/JASWSParser.h @@ -1,36 +1,22 @@ #ifndef JASWSPARSER_H #define JASWSPARSER_H -#include "dolphin/types.h" +#include "JSystem/JSupport/JSupport.h" namespace JASystem { class TBasicWaveBank; class TSimpleWaveBank; namespace WSParser { - struct TCtrl { - /* 0x00 */ u32 mMagic; - /* 0x04 */ u32 mWaveCount; - /* 0x08 */ u32 mCtrlWaveOffsets[1]; - }; - struct TCtrlGroup { - /* 0x00 */ u32 mMagic; - /* 0x04 */ u8 field_0x4[0x08 - 0x04]; - /* 0x08 */ u32 mCtrlGroupCount; - /* 0x0C */ u32 mCtrlSceneOffsets[1]; - }; - struct TCtrlScene { - /* 0x00 */ u32 mMagic; - /* 0x04 */ u8 field_0x4[0x0C - 0x04]; - /* 0x0C */ u32 mCtrlOffset; - }; - struct TCtrlWave { - /* 0x00 */ u32 field_0x0; - }; - struct THeader { - /* 0x00 */ u8 field_0x0[0x10]; - /* 0x10 */ u32 mArchiveBankOffset; - /* 0x14 */ u32 mCtrlGroupOffset; + // Using this class breaks match for JASystem::WSParser::createSimpleWaveBank + template + class TOffset { + public: + T *ptr(const void *p) { return JSUConvertOffsetToPtr(p, mOffset); } + T *ptr(const void *p) const { return JSUConvertOffsetToPtr(p, mOffset); } + private: + u32 mOffset; }; + struct TWave { /* 0x00 */ u8 field_0x0; /* 0x01 */ u8 field_0x1; @@ -56,6 +42,30 @@ namespace JASystem { /* 0x04 */ u8 field_0x4[0x08 - 0x04]; /* 0x08 */ u32 mArchiveOffsets[1]; }; + struct TCtrlWave { + /* 0x00 */ u32 field_0x0; + }; + struct TCtrl { + /* 0x00 */ u32 mMagic; + /* 0x04 */ u32 mWaveCount; + /* 0x08 */ u32 mCtrlWaveOffsets[1]; + }; + struct TCtrlScene { + /* 0x00 */ u32 mMagic; + /* 0x04 */ u8 field_0x4[0x0C - 0x04]; + /* 0x0C */ u32 mCtrlOffset; + }; + struct TCtrlGroup { + /* 0x00 */ u32 mMagic; + /* 0x04 */ u8 field_0x4[0x08 - 0x04]; + /* 0x08 */ u32 mCtrlGroupCount; + /* 0x0C */ u32 mCtrlSceneOffsets[1]; + }; + struct THeader { + /* 0x00 */ u8 field_0x0[0x10]; + /* 0x10 */ u32 mArchiveBankOffset; + /* 0x14 */ u32 mCtrlGroupOffset; + }; u32 getGroupCount(void*); TBasicWaveBank* createBasicWaveBank(void*); diff --git a/src/JAZelAudio/JAIZelAtmos.cpp b/src/JAZelAudio/JAIZelAtmos.cpp index 2bd49664b..c11d13d8b 100644 --- a/src/JAZelAudio/JAIZelAtmos.cpp +++ b/src/JAZelAudio/JAIZelAtmos.cpp @@ -8,7 +8,7 @@ /* 802AD008-802AD014 .text initSeaEnvPos__11JAIZelBasicFv */ void JAIZelBasic::initSeaEnvPos() { - /* Nonmatching */ + field_0x1b80 = 0; } /* 802AD014-802AD0A8 .text registSeaEnvPos__11JAIZelBasicFP3Vec */ @@ -43,7 +43,7 @@ void JAIZelBasic::seaShoreSE(u32, Vec*, u32, s8) { /* 802AD98C-802AD998 .text initRiverPos__11JAIZelBasicFv */ void JAIZelBasic::initRiverPos() { - /* Nonmatching */ + field_0x1dd0 = 0; } /* 802AD998-802ADB38 .text registRiverPos__11JAIZelBasicFP3Vec */ @@ -63,7 +63,7 @@ void JAIZelBasic::waterfallSePlay(u8, Vec*, s8) { /* 802ADE68-802ADE74 .text initWindowPos__11JAIZelBasicFv */ void JAIZelBasic::initWindowPos() { - /* Nonmatching */ + field_0x1ec0 = 0; } /* 802ADE74-802ADF20 .text registWindowPos__11JAIZelBasicFP3Vec */ diff --git a/src/JSystem/JAudio/JAIBasic.cpp b/src/JSystem/JAudio/JAIBasic.cpp index c75d5efa1..989db520a 100644 --- a/src/JSystem/JAudio/JAIBasic.cpp +++ b/src/JSystem/JAudio/JAIBasic.cpp @@ -502,16 +502,17 @@ u16 JAIBasic::setParameterSeqSync(JASystem::TTrack* param_1, u16 param_2) { } } break; - case 1: + case 1: { u8 tmp = param_1->field_0x36c; JAInter::SeMgr::seTrackUpdate_s* r31 = JAInter::SeMgr::seTrackUpdate; JASystem::TTrack::TOuterParam* r28 = param_1->mOuterParam; - r28->setParam(1, r31[tmp].field_0x4); - r28->setParam(8, r31[tmp].field_0x10); - r28->setParam(2, r31[tmp].field_0x8); - r28->setParam(4, r31[tmp].field_0xc); - r28->setParam(16, msBasic->field_0xd != 2 ? 0.0f : r31[tmp].field_0x14); + r28->setParam(OUTERPARAM_Volume, r31[tmp].field_0x4); + r28->setParam(OUTERPARAM_Pan, r31[tmp].field_0x10); + r28->setParam(OUTERPARAM_Pitch, r31[tmp].field_0x8); + r28->setParam(OUTERPARAM_Fxmix, r31[tmp].field_0xc); + r28->setParam(OUTERPARAM_Dolby, msBasic->field_0xd != 2 ? 0.0f : r31[tmp].field_0x14); break; + } case 127: param_1->writePortApp(0, JAInter::SeMgr::seScene); break; diff --git a/src/JSystem/JAudio/JAISequenceMgr.cpp b/src/JSystem/JAudio/JAISequenceMgr.cpp index e429c33e8..0bb6a09b2 100644 --- a/src/JSystem/JAudio/JAISequenceMgr.cpp +++ b/src/JSystem/JAudio/JAISequenceMgr.cpp @@ -68,7 +68,7 @@ JAInter::SeqUpdateData::SeqUpdateData() { field_0x2 = 0; field_0x3 = 0; field_0x8 = 0; - field_0x48 = 0; + field_0x48 = NULL; systemTrackParameter = new (JAIBasic::getCurrentJAIHeap(), 0x20) PlayerParameter[33]; JUT_ASSERT_MSG(81, systemTrackParameter, "JAISeqUpdateData Cannot alloc Heap!!\n"); trackVolume = new (JAIBasic::getCurrentJAIHeap(), 0x20) f32[JAIGlobalParameter::getParamSeqTrackMax()]; diff --git a/src/JSystem/JAudio/JASBNKParser.cpp b/src/JSystem/JAudio/JASBNKParser.cpp index bbb66dadd..2498c1b1d 100644 --- a/src/JSystem/JAudio/JASBNKParser.cpp +++ b/src/JSystem/JAudio/JASBNKParser.cpp @@ -13,14 +13,12 @@ #include "JSystem/JAudio/JASInstRand.h" #include "JSystem/JAudio/JASInstSense.h" #include "JSystem/JKernel/JKRHeap.h" -#include "JSystem/JSupport/JSupport.h" #include "JSystem/JUtility/JUTAssert.h" u32 JASystem::BNKParser::sUsedHeapSize; /* 802870F0-802879A0 .text createBasicBank__Q28JASystem9BNKParserFPv */ JASystem::TBasicBank* JASystem::BNKParser::createBasicBank(void* stream) { - /* Nonmatching - regswap */ JKRHeap* heap = TBank::getCurrentHeap(); const u32 freeSize = heap->getFreeSize(); THeader* header = (THeader*)stream; @@ -31,16 +29,16 @@ JASystem::TBasicBank* JASystem::BNKParser::createBasicBank(void* stream) { bank->setInstCount(0x100); for (int i = 0; i < 0x80; i++) { - TInst* instRaw = JSUConvertOffsetToPtr(header, header->mInstOffsets[i]); + TInst* instRaw = header->mInstOffsets[i].ptr(header); if (instRaw != NULL) { TBasicInst* instp = new (heap, 0) TBasicInst(); JUT_ASSERT(56, instp != NULL); - instp->field_0x4 = instRaw->field_0x8; - instp->field_0x8 = instRaw->field_0xC; + instp->setVolume(instRaw->field_0x8); + instp->setPitch(instRaw->field_0xC); instp->setOscCount(2); for (int oscIndex = 0, j = 0; j < 2; j++) { - TOsc* oscRaw = JSUConvertOffsetToPtr(header, instRaw->mOscOffsets[j]); + TOsc* oscRaw = instRaw->mOscOffsets[j].ptr(header); if (oscRaw != NULL) { TOscillator::Osc_* osc = findOscPtr(bank, header, oscRaw); if (osc == NULL) { @@ -48,7 +46,7 @@ JASystem::TBasicBank* JASystem::BNKParser::createBasicBank(void* stream) { JUT_ASSERT(72, osc != NULL); osc->field_0x0 = oscRaw->field_0x0; osc->field_0x4 = oscRaw->field_0x4; - s16* oscTable = JSUConvertOffsetToPtr(header, oscRaw->field_0x8); + s16* oscTable = oscRaw->field_0x8.ptr(header); if (oscTable != NULL) { s32 tableLength = getOscTableEndPtr(oscTable) - oscTable; osc->table = new (heap, 0) s16[tableLength]; @@ -57,7 +55,7 @@ JASystem::TBasicBank* JASystem::BNKParser::createBasicBank(void* stream) { } else { osc->table = NULL; } - oscTable = JSUConvertOffsetToPtr(header, oscRaw->field_0xC); + oscTable = oscRaw->field_0xC.ptr(header); if (oscTable != NULL) { s32 tableLength = getOscTableEndPtr(oscTable) - oscTable; osc->rel_table = new (heap, 0) s16[tableLength]; @@ -76,18 +74,18 @@ JASystem::TBasicBank* JASystem::BNKParser::createBasicBank(void* stream) { instp->setEffectCount(4); for (int j = 0; j < 2; j++) { - TRand* randRaw = JSUConvertOffsetToPtr(header, instRaw->mRandOffsets[j]); + TRand* randRaw = instRaw->mRandOffsets[j].ptr(header); if (randRaw != NULL) { TInstRand* randp = new (heap, 0) TInstRand(); JUT_ASSERT(120, randp != NULL); randp->setTarget(randRaw->field_0x0); - randp->field_0x8 = randRaw->field_0x4; - randp->field_0xc = randRaw->field_0x8; + randp->setBase(randRaw->field_0x4); + randp->setWidth(randRaw->field_0x8); instp->setEffect(j, randp); } } for (int j = 0; j < 2; j++) { - TSense* senseRaw = JSUConvertOffsetToPtr(header, instRaw->mSenseOffsets[j]); + TSense* senseRaw = instRaw->mSenseOffsets[j].ptr(header); if (senseRaw != NULL) { TInstSense* sensep = new (heap, 0) TInstSense(); JUT_ASSERT(133, sensep != NULL); @@ -100,12 +98,12 @@ JASystem::TBasicBank* JASystem::BNKParser::createBasicBank(void* stream) { instp->setKeyRegionCount(instRaw->mKeyRegionCount); for (int j = 0; j < instRaw->mKeyRegionCount; j++) { TBasicInst::TKeymap* instKeymap = instp->getKeyRegion(j); - TKeymap* keymapRaw = JSUConvertOffsetToPtr(header, instRaw->mKeymapOffsets[j]); - instKeymap->mBaseKey = keymapRaw->field_0x0; - instKeymap->setVeloRegionCount(keymapRaw->field_0x4); - for (int k = 0; k < keymapRaw->field_0x4; k++) { + TKeymap* keymapRaw = instRaw->mKeymapOffsets[j].ptr(header); + instKeymap->setHighKey(keymapRaw->field_0x0); + instKeymap->setVeloRegionCount(keymapRaw->mVeloRegionCount); + for (int k = 0; k < keymapRaw->mVeloRegionCount; k++) { TBasicInst::TVeloRegion* instVeloRegion = instKeymap->getVeloRegion(k); - TVmap* vmapRaw = JSUConvertOffsetToPtr(header, keymapRaw->mVmapOffsets[k]); + TVmap* vmapRaw = keymapRaw->mVmapOffsets[k].ptr(header); instVeloRegion->mBaseVel = vmapRaw->field_0x0; instVeloRegion->field_0x04 = vmapRaw->field_0x4 & 0xFFFF; instVeloRegion->field_0x08 = vmapRaw->field_0x8; @@ -117,29 +115,29 @@ JASystem::TBasicBank* JASystem::BNKParser::createBasicBank(void* stream) { } for (int i = 0; i < 12; i++) { - TPerc* percRaw = JSUConvertOffsetToPtr(header, header->mPercOffsets[i]); + TPerc* percRaw = header->mPercOffsets[i].ptr(header); if (percRaw != NULL) { TDrumSet* setp = new (heap, 0) TDrumSet(); JUT_ASSERT(183, setp != NULL); for (int j = 0; j < 0x80; j++) { - TPmap* pmapRaw = JSUConvertOffsetToPtr(header, percRaw->mPmapOffsets[j]); + TPmap* pmapRaw = percRaw->mPmapOffsets[j].ptr(header); if (pmapRaw != NULL) { TDrumSet::TPerc* drumSetPerc = setp->getPerc(j); - drumSetPerc->field_0x0 = pmapRaw->field_0x0; - drumSetPerc->field_0x4 = pmapRaw->field_0x4; + drumSetPerc->setVolume(pmapRaw->field_0x0); + drumSetPerc->setPitch(pmapRaw->field_0x4); if (percRaw->mMagic == 'PER2') { - drumSetPerc->field_0x8 = percRaw->field_0x288[j] / 127.0f; + drumSetPerc->setPan(percRaw->field_0x288[j] / 127.0f); drumSetPerc->setRelease(percRaw->field_0x308[j]); } drumSetPerc->setEffectCount(2); for (int effectIndex = 0, k = 0; k < 2; k++) { - TRand* randRaw = JSUConvertOffsetToPtr(header, pmapRaw->mRandOffsets[k]); + TRand* randRaw = pmapRaw->mRandOffsets[k].ptr(header); if (randRaw != NULL) { TInstRand* randp = new (heap, 0) TInstRand(); JUT_ASSERT(207, randp != NULL); randp->setTarget(randRaw->field_0x0); - randp->field_0x8 = randRaw->field_0x4; - randp->field_0xc = randRaw->field_0x8; + randp->setBase(randRaw->field_0x4); + randp->setWidth(randRaw->field_0x8); drumSetPerc->setEffect(effectIndex, randp); effectIndex++; } @@ -147,7 +145,7 @@ JASystem::TBasicBank* JASystem::BNKParser::createBasicBank(void* stream) { drumSetPerc->setVeloRegionCount(pmapRaw->mVeloRegionCount); for (int k = 0; k < pmapRaw->mVeloRegionCount; k++) { TBasicInst::TVeloRegion* instVeloRegion = drumSetPerc->getVeloRegion(k); - TVmap* vmapRaw = JSUConvertOffsetToPtr(header, pmapRaw->mVeloRegionOffsets[k]); + TVmap* vmapRaw = pmapRaw->mVeloRegionOffsets[k].ptr(header); instVeloRegion->mBaseVel = vmapRaw->field_0x0; instVeloRegion->field_0x04 = vmapRaw->field_0x4 & 0xFFFF; instVeloRegion->field_0x08 = vmapRaw->field_0x8; @@ -164,12 +162,12 @@ JASystem::TBasicBank* JASystem::BNKParser::createBasicBank(void* stream) { /* 802879A0-80287AEC .text findOscPtr__Q28JASystem9BNKParserFPQ28JASystem10TBasicBankPQ38JASystem9BNKParser7THeaderPQ38JASystem9BNKParser4TOsc */ JASystem::TOscillator::Osc_* JASystem::BNKParser::findOscPtr(JASystem::TBasicBank* bank, JASystem::BNKParser::THeader* header, JASystem::BNKParser::TOsc* oscPtr) { - u32* instOffsets = header->mInstOffsets - 1; + TOffset* instOffsets = header->mInstOffsets - 1; for (int i = 0; i < 128; i++) { - TInst* instRaw = JSUConvertOffsetToPtr(header, instOffsets[i + 1]); + TInst* instRaw = instOffsets[i + 1].ptr(header); if (instRaw != NULL) { for (int j = 0; j < 2; j++) { - TOsc* oscRaw = JSUConvertOffsetToPtr(header, instRaw->mOscOffsets[j]); + TOsc* oscRaw = instRaw->mOscOffsets[j].ptr(header); if (oscRaw == oscPtr) { JASystem::TInst* inst = bank->getInst(i); if (inst != NULL) { diff --git a/src/JSystem/JAudio/JASBasicInst.cpp b/src/JSystem/JAudio/JASBasicInst.cpp index a5d53bcb9..a9abc83de 100644 --- a/src/JSystem/JAudio/JASBasicInst.cpp +++ b/src/JSystem/JAudio/JASBasicInst.cpp @@ -14,8 +14,8 @@ /* 80284844-80284888 .text __ct__Q28JASystem10TBasicInstFv */ JASystem::TBasicInst::TBasicInst() { - field_0x4 = 1.0f; - field_0x8 = 1.0f; + mVolume = 1.0f; + mPitch = 1.0f; mEffect = NULL; mEffectCount = 0; mOsc = NULL; @@ -37,8 +37,8 @@ bool JASystem::TBasicInst::getParam(int key, int velo, TInstParam* param) const param->field_0x38 = 0; param->mOscData = mOsc; param->mOscCount = mOscCount; - param->field_0x10 *= field_0x4; - param->field_0x14 *= field_0x8; + param->field_0x10 *= mVolume; + param->field_0x14 *= mPitch; for (int i = 0; i < mEffectCount; i++) { TInstEffect* effect = mEffect[i]; if (!effect) { diff --git a/src/JSystem/JAudio/JASBasicWaveBank.cpp b/src/JSystem/JAudio/JASBasicWaveBank.cpp index e2e3a9ee2..c4a713255 100644 --- a/src/JSystem/JAudio/JASBasicWaveBank.cpp +++ b/src/JSystem/JAudio/JASBasicWaveBank.cpp @@ -61,43 +61,42 @@ void JASystem::TBasicWaveBank::setWaveTableSize(u32 param_1) { } /* 80285CB0-80285D54 .text incWaveTable__Q28JASystem14TBasicWaveBankFPCQ38JASystem14TBasicWaveBank10TWaveGroup */ -void JASystem::TBasicWaveBank::incWaveTable(const TWaveGroup* param_1) { - /* Nonmatching */ +void JASystem::TBasicWaveBank::incWaveTable(const TWaveGroup* waveGroup) { OSLockMutex(&mMutex); - for (int i = 0; i < param_1->getWaveCount(); i++) { - u32 waveID = param_1->getWaveID(i); - TWaveInfo** table = mWaveTable; - TWaveInfo* waveInfo = ¶m_1->mCtrlWaveArray[i]; + for (int i = 0; i < waveGroup->getWaveCount(); i++) { + TWaveInfo** waveTable = &mWaveTable[waveGroup->getWaveID(i)]; + TWaveInfo* waveInfo = &waveGroup->mCtrlWaveArray[i]; waveInfo->mNext = NULL; - waveInfo->mPrev = table[waveID]; - if (table[waveID]) { - table[waveID]->mNext = waveInfo; + waveInfo->mPrev = *waveTable; + if (*waveTable) { + (*waveTable)->mNext = waveInfo; } - table[waveID] = waveInfo; + *waveTable = waveInfo; } OSUnlockMutex(&mMutex); } /* 80285D54-80285E28 .text decWaveTable__Q28JASystem14TBasicWaveBankFPCQ38JASystem14TBasicWaveBank10TWaveGroup */ -void JASystem::TBasicWaveBank::decWaveTable(const TWaveGroup* param_1) { +void JASystem::TBasicWaveBank::decWaveTable(const TWaveGroup* waveGroup) { /* Nonmatching */ OSLockMutex(&mMutex); - for (int i = 0; i < param_1->getWaveCount(); i++) { - u32 waveID = param_1->getWaveID(i); + for (int i = 0; i < waveGroup->getWaveCount(); i++) { + u32 waveID = waveGroup->getWaveID(i); TWaveInfo* waveInfo = mWaveTable[waveID]; - TWaveInfo* waveInfo2 = ¶m_1->mCtrlWaveArray[i]; + TWaveInfo* waveInfo2 = &waveGroup->mCtrlWaveArray[i]; for (; waveInfo; waveInfo = waveInfo->mPrev) { - if (waveInfo == waveInfo2) { - if (!waveInfo->mNext) { - mWaveTable[waveID] = waveInfo->mPrev; - } else { - waveInfo->mNext->mPrev = waveInfo->mPrev; - } - if (waveInfo->mPrev) { - waveInfo->mPrev->mNext = waveInfo->mNext; - } - break; + if (waveInfo != waveInfo2) { + continue; } + if (!waveInfo->mNext) { + mWaveTable[waveID] = waveInfo->mPrev; + } else { + waveInfo->mNext->mPrev = waveInfo->mPrev; + } + if (waveInfo->mPrev) { + waveInfo->mPrev->mNext = waveInfo->mNext; + } + break; } } OSUnlockMutex(&mMutex); diff --git a/src/JSystem/JAudio/JASDrumSet.cpp b/src/JSystem/JAudio/JASDrumSet.cpp index 3bb09f54d..701dc1506 100644 --- a/src/JSystem/JAudio/JASDrumSet.cpp +++ b/src/JSystem/JAudio/JASDrumSet.cpp @@ -22,9 +22,9 @@ bool JASystem::TDrumSet::getParam(int key, int param_2, JASystem::TInstParam* pa const TPerc* perc = field_0x4 + key; param_3->field_0x0 = 0; param_3->field_0x38 = 1; - param_3->field_0x10 *= perc->field_0x0; - param_3->field_0x14 *= perc->field_0x4; - param_3->field_0x20 = perc->field_0x8; + param_3->field_0x10 *= perc->mVolume; + param_3->field_0x14 *= perc->mPitch; + param_3->field_0x20 = perc->mPan; param_3->field_0x3a = perc->field_0xc; static TOscillator::Osc_ osc; osc.field_0x0 = 0; @@ -84,9 +84,9 @@ JASystem::TDrumSet::TPerc* JASystem::TDrumSet::getPerc(int index) { /* 80285520-80285554 .text __ct__Q38JASystem8TDrumSet5TPercFv */ JASystem::TDrumSet::TPerc::TPerc() { - field_0x0 = 1.0f; - field_0x4 = 1.0f; - field_0x8 = 0.5f; + mVolume = 1.0f; + mPitch = 1.0f; + mPan = 0.5f; field_0xc = 1000; mEffect = NULL; mEffectCount = 0; diff --git a/src/JSystem/JAudio/JASInstRand.cpp b/src/JSystem/JAudio/JASInstRand.cpp index 7f655377a..91103ed4b 100644 --- a/src/JSystem/JAudio/JASInstRand.cpp +++ b/src/JSystem/JAudio/JASInstRand.cpp @@ -12,6 +12,6 @@ f32 JASystem::TInstRand::getY(int, int) const { static JMath::TRandom_fast_ oRandom(0); f32 tmp = (oRandom.get_ufloat_1() * 2.0f - 0.9999999f); - tmp *= field_0xc; - return tmp + field_0x8; + tmp *= mWidth; + return tmp + mBase; } diff --git a/src/JSystem/JAudio/JASWSParser.cpp b/src/JSystem/JAudio/JASWSParser.cpp index 38539a0a8..5fff3c750 100644 --- a/src/JSystem/JAudio/JASWSParser.cpp +++ b/src/JSystem/JAudio/JASWSParser.cpp @@ -9,7 +9,6 @@ #include "JSystem/JAudio/JASBasicWaveBank.h" #include "JSystem/JAudio/JASSimpleWaveBank.h" #include "JSystem/JKernel/JKRHeap.h" -#include "JSystem/JSupport/JSupport.h" u32 JASystem::WSParser::sUsedHeapSize; @@ -24,7 +23,7 @@ JASystem::TBasicWaveBank* JASystem::WSParser::createBasicWaveBank(void* stream) TWaveArchive* archiveRaw; JKRHeap* heap = TWaveBank::getCurrentHeap(); const u32 priorFreeSize = heap->getFreeSize(); - const THeader* header = (THeader*)stream; + THeader* header = (THeader*)stream; TBasicWaveBank* bank = new (heap, 0) TBasicWaveBank(); if (bank == NULL) { return NULL; @@ -34,8 +33,8 @@ JASystem::TBasicWaveBank* JASystem::WSParser::createBasicWaveBank(void* stream) bank->setGroupCount(ctrlGroupRaw->mCtrlGroupCount); u32 maxSize = 0; for (int groupIndex = 0; groupIndex < ctrlGroupRaw->mCtrlGroupCount; groupIndex++) { - TCtrlScene* ctrlSceneRaw = JSUConvertOffsetToPtr(header, ctrlGroupRaw->mCtrlSceneOffsets[groupIndex]); - TCtrl* ctrlRaw = JSUConvertOffsetToPtr(header, ctrlSceneRaw->mCtrlOffset); + const TCtrlScene* ctrlSceneRaw = JSUConvertOffsetToPtr(header, ctrlGroupRaw->mCtrlSceneOffsets[groupIndex]); + const TCtrl* ctrlRaw = JSUConvertOffsetToPtr(header, ctrlSceneRaw->mCtrlOffset); TBasicWaveBank::TWaveGroup* waveGroup = bank->getWaveGroup(groupIndex); TWaveArchiveBank* archiveBankRaw = JSUConvertOffsetToPtr(header, header->mArchiveBankOffset); archiveRaw = JSUConvertOffsetToPtr(header, archiveBankRaw->mArchiveOffsets[groupIndex]); @@ -73,10 +72,10 @@ JASystem::TBasicWaveBank* JASystem::WSParser::createBasicWaveBank(void* stream) /* 80286E38-80287048 .text createSimpleWaveBank__Q28JASystem8WSParserFPv */ JASystem::TSimpleWaveBank* JASystem::WSParser::createSimpleWaveBank(void* stream) { - const TWaveArchive* archiveRaw; + TWaveArchive* archiveRaw; JKRHeap* heap = TWaveBank::getCurrentHeap(); const u32 priorFreeSize = heap->getFreeSize(); - const THeader* header = (THeader*)stream; + THeader* header = (THeader*)stream; const TCtrlGroup* ctrlGroupRaw = JSUConvertOffsetToPtr(header, header->mCtrlGroupOffset); if (ctrlGroupRaw->mCtrlGroupCount != 1) { return NULL; @@ -89,7 +88,7 @@ JASystem::TSimpleWaveBank* JASystem::WSParser::createSimpleWaveBank(void* stream const TCtrlScene* ctrlSceneRaw = JSUConvertOffsetToPtr(header, ctrlGroupRaw->mCtrlSceneOffsets[0]); const TCtrl* ctrlRaw = JSUConvertOffsetToPtr(header, ctrlSceneRaw->mCtrlOffset); - const TWaveArchiveBank* archiveBankRaw = JSUConvertOffsetToPtr(header, header->mArchiveBankOffset); + TWaveArchiveBank* archiveBankRaw = JSUConvertOffsetToPtr(header, header->mArchiveBankOffset); archiveRaw = JSUConvertOffsetToPtr(header, archiveBankRaw->mArchiveOffsets[0]); for (int waveIndex = 0; waveIndex < ctrlRaw->mWaveCount; waveIndex++) { TCtrlWave* ctrlWaveRaw = JSUConvertOffsetToPtr(header, ctrlRaw->mCtrlWaveOffsets[waveIndex]);