mirror of
https://github.com/zeldaret/tww.git
synced 2026-09-10 03:52:05 -04:00
JAudio (#1197)
This commit is contained in:
+1
-1
@@ -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"),
|
||||
|
||||
@@ -37,6 +37,8 @@ namespace JAInter {
|
||||
public:
|
||||
SeqUpdateData();
|
||||
|
||||
void init() {}
|
||||
|
||||
/* 0x00 */ u8 field_0x0;
|
||||
/* 0x01 */ u8 field_0x1;
|
||||
/* 0x02 */ u8 field_0x2;
|
||||
|
||||
@@ -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*);
|
||||
|
||||
@@ -11,7 +11,7 @@ namespace JASystem {
|
||||
class TBank {
|
||||
public:
|
||||
TBank() {
|
||||
mWaveBank = 0;
|
||||
mWaveBank = NULL;
|
||||
}
|
||||
virtual ~TBank() {}
|
||||
virtual TInst* getInst(int) const = 0;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -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*);
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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()];
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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]);
|
||||
|
||||
Reference in New Issue
Block a user