This commit is contained in:
Jcw87
2026-09-06 15:43:18 -07:00
committed by GitHub
parent f7d64187ed
commit 4c0a2960c9
17 changed files with 186 additions and 153 deletions
+1 -1
View File
@@ -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"),
+2
View File
@@ -37,6 +37,8 @@ namespace JAInter {
public:
SeqUpdateData();
void init() {}
/* 0x00 */ u8 field_0x0;
/* 0x01 */ u8 field_0x1;
/* 0x02 */ u8 field_0x2;
+45 -36
View File
@@ -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 <typename T>
class TOffset {
public:
T *ptr(const void *p) { return JSUConvertOffsetToPtr<T>(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<s16> field_0x8;
/* 0x0C */ TOffset<s16> 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<TVmap> mVmapOffsets[1];
};
struct TInst {
/* 0x00 */ u8 field_0x0[8];
/* 0x08 */ f32 field_0x8;
/* 0x0C */ f32 field_0xC;
/* 0x10 */ TOffset<TOsc> mOscOffsets[2];
/* 0x18 */ TOffset<TRand> mRandOffsets[2];
/* 0x20 */ TOffset<TSense> mSenseOffsets[2];
/* 0x28 */ u32 mKeyRegionCount;
/* 0x2C */ TOffset<TKeymap> mKeymapOffsets[2];
};
struct TPmap {
/* 0x00 */ f32 field_0x0;
/* 0x04 */ f32 field_0x4;
/* 0x08 */ TOffset<TRand> mRandOffsets[2];
/* 0x10 */ u32 mVeloRegionCount;
/* 0x14 */ TOffset<TVmap> mVeloRegionOffsets[1];
};
struct TPerc {
/* 0x000 */ u32 mMagic;
/* 0x004 */ u8 field_0x4[0x84];
/* 0x088 */ TOffset<TPmap> mPmapOffsets[0x80];
/* 0x288 */ s8 field_0x288[0x80];
/* 0x308 */ u16 field_0x308[0x80];
};
struct THeader {
/* 0x000 */ u8 field_0x0[0x24];
/* 0x024 */ TOffset<TInst> mInstOffsets[0x80];
/* 0x224 */ u8 field_0x224[0x190];
/* 0x3B4 */ TOffset<TPerc> mPercOffsets[12];
};
TBasicBank* createBasicBank(void*);
TOscillator::Osc_* findOscPtr(JASystem::TBasicBank*, JASystem::BNKParser::THeader*, JASystem::BNKParser::TOsc*);
+1 -1
View File
@@ -11,7 +11,7 @@ namespace JASystem {
class TBank {
public:
TBank() {
mWaveBank = 0;
mWaveBank = NULL;
}
virtual ~TBank() {}
virtual TInst* getInst(int) const = 0;
+6 -2
View File
@@ -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;
+10 -3
View File
@@ -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;
+8 -4
View File
@@ -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;
};
}
+34 -24
View File
@@ -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 <typename T>
class TOffset {
public:
T *ptr(const void *p) { return JSUConvertOffsetToPtr<T>(p, mOffset); }
T *ptr(const void *p) const { return JSUConvertOffsetToPtr<T>(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*);
+3 -3
View File
@@ -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 */
+7 -6
View File
@@ -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;
+1 -1
View File
@@ -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()];
+27 -29
View File
@@ -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<TInst>(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<TOsc>(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<s16>(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<s16>(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<TRand>(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<TSense>(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<TKeymap>(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<TVmap>(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<TPerc>(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<TPmap>(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<TRand>(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<TVmap>(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<TInst>* instOffsets = header->mInstOffsets - 1;
for (int i = 0; i < 128; i++) {
TInst* instRaw = JSUConvertOffsetToPtr<TInst>(header, instOffsets[i + 1]);
TInst* instRaw = instOffsets[i + 1].ptr(header);
if (instRaw != NULL) {
for (int j = 0; j < 2; j++) {
TOsc* oscRaw = JSUConvertOffsetToPtr<TOsc>(header, instRaw->mOscOffsets[j]);
TOsc* oscRaw = instRaw->mOscOffsets[j].ptr(header);
if (oscRaw == oscPtr) {
JASystem::TInst* inst = bank->getInst(i);
if (inst != NULL) {
+4 -4
View File
@@ -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) {
+23 -24
View File
@@ -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 = &param_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 = &param_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);
+6 -6
View File
@@ -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;
+2 -2
View File
@@ -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;
}
+6 -7
View File
@@ -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<TCtrlScene>(header, ctrlGroupRaw->mCtrlSceneOffsets[groupIndex]);
TCtrl* ctrlRaw = JSUConvertOffsetToPtr<TCtrl>(header, ctrlSceneRaw->mCtrlOffset);
const TCtrlScene* ctrlSceneRaw = JSUConvertOffsetToPtr<TCtrlScene>(header, ctrlGroupRaw->mCtrlSceneOffsets[groupIndex]);
const TCtrl* ctrlRaw = JSUConvertOffsetToPtr<TCtrl>(header, ctrlSceneRaw->mCtrlOffset);
TBasicWaveBank::TWaveGroup* waveGroup = bank->getWaveGroup(groupIndex);
TWaveArchiveBank* archiveBankRaw = JSUConvertOffsetToPtr<TWaveArchiveBank>(header, header->mArchiveBankOffset);
archiveRaw = JSUConvertOffsetToPtr<TWaveArchive>(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<TCtrlGroup>(header, header->mCtrlGroupOffset);
if (ctrlGroupRaw->mCtrlGroupCount != 1) {
return NULL;
@@ -89,7 +88,7 @@ JASystem::TSimpleWaveBank* JASystem::WSParser::createSimpleWaveBank(void* stream
const TCtrlScene* ctrlSceneRaw = JSUConvertOffsetToPtr<TCtrlScene>(header, ctrlGroupRaw->mCtrlSceneOffsets[0]);
const TCtrl* ctrlRaw = JSUConvertOffsetToPtr<TCtrl>(header, ctrlSceneRaw->mCtrlOffset);
const TWaveArchiveBank* archiveBankRaw = JSUConvertOffsetToPtr<TWaveArchiveBank>(header, header->mArchiveBankOffset);
TWaveArchiveBank* archiveBankRaw = JSUConvertOffsetToPtr<TWaveArchiveBank>(header, header->mArchiveBankOffset);
archiveRaw = JSUConvertOffsetToPtr<TWaveArchive>(header, archiveBankRaw->mArchiveOffsets[0]);
for (int waveIndex = 0; waveIndex < ctrlRaw->mWaveCount; waveIndex++) {
TCtrlWave* ctrlWaveRaw = JSUConvertOffsetToPtr<TCtrlWave>(header, ctrlRaw->mCtrlWaveOffsets[waveIndex]);