mirror of
https://github.com/zeldaret/tp
synced 2026-07-09 14:55:32 -04:00
work on JASTrack (#2065)
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
template<size_t N>
|
||||
class JASBankTable : public JASBankList {
|
||||
public:
|
||||
JASBank* getBank(u32 param_0) { return mArray.get(param_0); }
|
||||
// JASBank* getBank(u32 param_0) { return mArray.get(param_0); }
|
||||
virtual JASBank* getBank(u32 param_0) const { return mArray.get(param_0); }
|
||||
void registBank(u32 param_0, JASBank* param_1) { mArray.set(param_0, param_1); }
|
||||
|
||||
@@ -17,6 +17,7 @@ private:
|
||||
|
||||
class JASDefaultBankTable : public JASBankTable<256>, public JASGlobalInstance<JASDefaultBankTable> {
|
||||
public:
|
||||
JASDefaultBankTable() : JASGlobalInstance(true) {}
|
||||
};
|
||||
|
||||
#endif /* JASBANKLIST_H */
|
||||
@@ -17,28 +17,28 @@ namespace JASDsp {
|
||||
class JASChannelParams {
|
||||
public:
|
||||
JASChannelParams() {
|
||||
field_0x0 = 1.0f;
|
||||
field_0x4 = 1.0f;
|
||||
mVolume = 1.0f;
|
||||
mPitch = 1.0f;
|
||||
field_0x8 = 0.0f;
|
||||
field_0xc = 0.5f;
|
||||
field_0x10 = 0.0f;
|
||||
field_0x14 = 0.0f;
|
||||
mPan = 0.5f;
|
||||
mFxMix = 0.0f;
|
||||
mDolby = 0.0f;
|
||||
}
|
||||
void init() {
|
||||
field_0x0 = 1.0f;
|
||||
field_0x4 = 1.0f;
|
||||
mVolume = 1.0f;
|
||||
mPitch = 1.0f;
|
||||
field_0x8 = 0.0f;
|
||||
field_0xc = 0.5f;
|
||||
field_0x10 = 0.0f;
|
||||
field_0x14 = 0.0f;
|
||||
mPan = 0.5f;
|
||||
mFxMix = 0.0f;
|
||||
mDolby = 0.0f;
|
||||
}
|
||||
|
||||
f32 field_0x0;
|
||||
f32 field_0x4;
|
||||
f32 mVolume;
|
||||
f32 mPitch;
|
||||
f32 field_0x8;
|
||||
f32 field_0xc;
|
||||
f32 field_0x10;
|
||||
f32 field_0x14;
|
||||
f32 mPan;
|
||||
f32 mFxMix;
|
||||
f32 mDolby;
|
||||
};
|
||||
|
||||
class JASChannel : public JASPoolAllocObject_MultiThreaded<JASChannel> {
|
||||
|
||||
@@ -5,16 +5,20 @@
|
||||
|
||||
|
||||
struct JASOscillator {
|
||||
struct Point {};
|
||||
struct Point {
|
||||
/* 0x0 */ s16 _0;
|
||||
/* 0x2 */ s16 _2;
|
||||
/* 0x4 */ s16 _4;
|
||||
};
|
||||
|
||||
struct EffectParams {};
|
||||
|
||||
struct Data {
|
||||
/* 0x00 */ u32 _00;
|
||||
/* 0x04 */ f32 _04;
|
||||
/* 0x08 */ const short* _08;
|
||||
/* 0x0C */ const short* _0C;
|
||||
/* 0x10 */ f32 _10;
|
||||
/* 0x08 */ const Point* mTable;
|
||||
/* 0x0C */ const Point* _0C;
|
||||
/* 0x10 */ f32 mScale;
|
||||
/* 0x14 */ f32 _14;
|
||||
};
|
||||
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
#ifndef JASTRACK_H
|
||||
#define JASTRACK_H
|
||||
|
||||
#include "JSystem/JAudio2/JASBankTable.h"
|
||||
#include "JSystem/JAudio2/JASChannel.h"
|
||||
#include "JSystem/JAudio2/JASGadget.h"
|
||||
#include "JSystem/JAudio2/JASHeapCtrl.h"
|
||||
#include "JSystem/JAudio2/JASOscillator.h"
|
||||
#include "JSystem/JAudio2/JASRegisterParam.h"
|
||||
#include "JSystem/JAudio2/JASSeqCtrl.h"
|
||||
#include "JSystem/JAudio2/JASTrackPort.h"
|
||||
#include "JSystem/JGadget/linklist.h"
|
||||
|
||||
struct JASSoundParams;
|
||||
|
||||
@@ -15,47 +19,43 @@ namespace JASDsp {
|
||||
extern u32 FILTER_MODE_IIR;
|
||||
};
|
||||
|
||||
struct JASChannel {
|
||||
/* 8029AAD0 */ void release(u16);
|
||||
/* 8029AB64 */ void setOscInit(u32, JASOscillator::Data const*);
|
||||
/* 8029AB98 */ void setMixConfig(u32, u16);
|
||||
/* 8029ACD4 */ void setKeySweepTarget(s32, u32);
|
||||
/* 8029BBFC */ void free();
|
||||
};
|
||||
|
||||
struct JASTrack {
|
||||
struct JASTrack : public JASPoolAllocObject_MultiThreaded<JASTrack> {
|
||||
enum Status {
|
||||
STATUS_FREE,
|
||||
STATUS_RUN,
|
||||
};
|
||||
|
||||
struct TChannelMgr {
|
||||
struct TChannelMgr : public JASPoolAllocObject_MultiThreaded<TChannelMgr> {
|
||||
/* 802930DC */ TChannelMgr(JASTrack*);
|
||||
/* 80293148 */ void init();
|
||||
/* 802931B0 */ void releaseAll();
|
||||
/* 80293220 */ void noteOff(u32, u16);
|
||||
/* 80293220 */ bool noteOff(u32, u16);
|
||||
/* 802932A0 */ void setPauseFlag(bool);
|
||||
|
||||
/* 0x00 */ JASChannel* field_0x0[8];
|
||||
/* 0x20 */ u8 field_0x20[0x18]; // JASChannelParams
|
||||
/* 0x00 */ JASChannel* mChannels[8];
|
||||
/* 0x20 */ JASChannelParams mParams;
|
||||
/* 0x38 */ short field_0x38[8];
|
||||
/* 0x48 */ JASSoundParams* field_0x48;
|
||||
/* 0x4c */ JASTrack* field_0x4c;
|
||||
/* 0x48 */ JASSoundParams* mSoundParams;
|
||||
/* 0x4c */ JASTrack* mTrack;
|
||||
};
|
||||
|
||||
struct TList {
|
||||
/* 80292F6C */ void cbSeqMain(void*);
|
||||
struct TList : JGadget::TLinkList<JASTrack, -0x240> {
|
||||
TList() : mCallbackRegistered(false) {}
|
||||
/* 80292F90 */ void append(JASTrack*);
|
||||
/* 8029301C */ void seqMain();
|
||||
/* 8029345C */ ~TList();
|
||||
/* 8029345C */ ~TList() {}
|
||||
|
||||
/* 80292F6C */ static s32 cbSeqMain(void*);
|
||||
|
||||
/* 0xC */ bool mCallbackRegistered;
|
||||
};
|
||||
|
||||
struct MoveParam_ {
|
||||
/* 802932C8 */ MoveParam_();
|
||||
/* 802932C8 */ MoveParam_() : mValue(0.0f), mTarget(0.0f), mCount(0) {}
|
||||
|
||||
/* 0x00 */ f32 field_0x0;
|
||||
/* 0x04 */ f32 field_0x4;
|
||||
/* 0x08 */ int field_0x8;
|
||||
/* 0x00 */ f32 mValue;
|
||||
/* 0x04 */ f32 mTarget;
|
||||
/* 0x08 */ u32 mCount;
|
||||
};
|
||||
|
||||
/* 80291228 */ JASTrack();
|
||||
@@ -70,12 +70,12 @@ struct JASTrack {
|
||||
/* 80291A78 */ void stopSeq();
|
||||
/* 80291ABC */ void start();
|
||||
/* 80291AC8 */ void close();
|
||||
/* 80291B8C */ void connectChild(u32, JASTrack*);
|
||||
/* 80291B8C */ bool connectChild(u32, JASTrack*);
|
||||
/* 80291BB8 */ void closeChild(u32);
|
||||
/* 80291C30 */ JASTrack* openChild(u32);
|
||||
/* 80291DAC */ void connectBus(int, int);
|
||||
/* 80291DBC */ void setLatestKey(u8);
|
||||
/* 80291DF8 */ void channelStart(JASTrack::TChannelMgr*, u32, u32, u32);
|
||||
/* 80291DF8 */ JASChannel* channelStart(JASTrack::TChannelMgr*, u32, u32, u32);
|
||||
/* 80291F38 */ int noteOn(u32, u32, u32);
|
||||
/* 80292008 */ int gateOn(u32, u32, f32, u32);
|
||||
/* 80292198 */ int noteOff(u32, u16);
|
||||
@@ -85,7 +85,7 @@ struct JASTrack {
|
||||
/* 80292348 */ void updateTrack(f32);
|
||||
/* 802924E4 */ void updateTempo();
|
||||
/* 80292580 */ void updateSeq(bool, f32);
|
||||
/* 80292644 */ void seqTimeToDspTime(f32);
|
||||
/* 80292644 */ u32 seqTimeToDspTime(f32);
|
||||
/* 802926E0 */ void setParam(u32, f32, u32);
|
||||
/* 80292708 */ void noteOffAll(u16);
|
||||
/* 802927A0 */ void mute(bool);
|
||||
@@ -100,22 +100,28 @@ struct JASTrack {
|
||||
/* 8029297C */ u16 readPort(u32);
|
||||
/* 802929A0 */ void setChannelPauseFlag(bool);
|
||||
/* 80292A3C */ void pause(bool);
|
||||
/* 80292AA4 */ void getTransposeTotal() const;
|
||||
/* 80292AF4 */ void isMute() const;
|
||||
/* 80292AA4 */ int getTransposeTotal() const;
|
||||
/* 80292AF4 */ bool isMute() const;
|
||||
/* 80292B58 */ void setTempo(u16);
|
||||
/* 80292B8C */ void setTempoRate(f32);
|
||||
/* 80292BC0 */ void setTimebase(u16);
|
||||
/* 80292BF4 */ void updateChannel(JASChannel*, JASDsp::TChannel*);
|
||||
/* 80292CA4 */ void channelUpdateCallback(u32, JASChannel*, JASDsp::TChannel*, void*);
|
||||
/* 80292D88 */ void getRootTrack();
|
||||
/* 80292DA0 */ void tickProc();
|
||||
/* 80292E9C */ void seqMain();
|
||||
/* 80292D88 */ JASTrack* getRootTrack();
|
||||
/* 80292DA0 */ int tickProc();
|
||||
/* 80292E9C */ int seqMain();
|
||||
|
||||
static u8 const sAdsTable[24];
|
||||
static u8 const sEnvOsc[24];
|
||||
static u8 const sPitchEnvOsc[24];
|
||||
/* 80292CA4 */ static void channelUpdateCallback(u32, JASChannel*, JASDsp::TChannel*, void*);
|
||||
|
||||
static JASOscillator::Point const sAdsTable[4];
|
||||
static JASOscillator::Data const sEnvOsc;
|
||||
static JASOscillator::Data const sPitchEnvOsc;
|
||||
#ifdef NONMATCHING
|
||||
static JASDefaultBankTable sDefaultBankTable;
|
||||
static TList sTrackList;
|
||||
#else
|
||||
static u8 sDefaultBankTable[1036];
|
||||
static u8 sTrackList[16];
|
||||
#endif
|
||||
|
||||
JASSeqCtrl* getSeqCtrl() { return &mSeqCtrl; }
|
||||
u16 getPort(u32 param_0) { return mTrackPort.get(param_0); }
|
||||
@@ -126,7 +132,7 @@ struct JASTrack {
|
||||
void writeReg(JASRegisterParam::RegID param_0, u32 param_1) { mRegisterParam.write(param_0, param_1); }
|
||||
JASTrack* getParent() { return mParent; }
|
||||
JASTrack* getChild(u32 index) { return mChildren[index]; }
|
||||
int getChannelMgrCount() { return channelMgrCount; }
|
||||
int getChannelMgrCount() { return mChannelMgrCount; }
|
||||
f32 getVibDepth() const { return mVibDepth; }
|
||||
void setVibDepth(f32 param_0) { mVibDepth = param_0; }
|
||||
f32 getVibPitch() const { return mVibPitch; }
|
||||
@@ -140,7 +146,7 @@ struct JASTrack {
|
||||
u16 getTremDelay() const { return mTremDelay; }
|
||||
void setTremDelay(u32 param_0) { mTremDelay = param_0; }
|
||||
u8 getStatus() const { return mStatus; }
|
||||
void setAutoDelete(u8 param_0) { field_0x216.autoDelete = param_0; }
|
||||
void setAutoDelete(u8 param_0) { mFlags.autoDelete = param_0; }
|
||||
f32 getPanPower() const { return mPanPower; }
|
||||
void setPanPower(f32 param_0) { mPanPower = param_0; }
|
||||
u32 getSkipSample() const { return mSkipSample; }
|
||||
@@ -166,15 +172,15 @@ struct JASTrack {
|
||||
/* 0x000 */ JASSeqCtrl mSeqCtrl;
|
||||
/* 0x05C */ JASTrackPort mTrackPort;
|
||||
/* 0x080 */ JASRegisterParam mRegisterParam;
|
||||
/* 0x09C */ MoveParam_ field_0x9c[6];
|
||||
/* 0x0e4 */ u8 mOscParam[0x30]; // JASOscillator::Data[2]
|
||||
/* 0x114 */ u8 field_0x114[0x18]; // JASOscillator::Point[4]
|
||||
/* 0x09C */ MoveParam_ mMoveParam[6]; // volume, pitch, fxmix, pan, dolby, distFilter
|
||||
/* 0x0e4 */ JASOscillator::Data mOscParam[2];
|
||||
/* 0x114 */ JASOscillator::Point mOscPoint[4];
|
||||
/* 0x12C */ JASTrack* mParent;
|
||||
/* 0x130 */ JASTrack* mChildren[16];
|
||||
/* 0x170 */ TChannelMgr* field_0x170[4];
|
||||
/* 0x180 */ TChannelMgr field_0x180;
|
||||
/* 0x1D0 */ int channelMgrCount;
|
||||
/* 0x1D4 */ void* field_0x1d4;
|
||||
/* 0x170 */ TChannelMgr* mChannelMgrs[4];
|
||||
/* 0x180 */ TChannelMgr mDefaultChannelMgr;
|
||||
/* 0x1D0 */ int mChannelMgrCount;
|
||||
/* 0x1D4 */ JASDefaultBankTable* mBankTable;
|
||||
/* 0x1D8 */ f32 field_0x1d8;
|
||||
/* 0x1DC */ f32 field_0x1dc;
|
||||
/* 0x1E0 */ f32 mVibDepth;
|
||||
@@ -183,40 +189,36 @@ struct JASTrack {
|
||||
/* 0x1EC */ f32 mTremPitch;
|
||||
/* 0x1F0 */ u16 mVibDelay;
|
||||
/* 0x1F2 */ u16 mTremDelay;
|
||||
/* 0x1F4 */ short field_0x1f4[8];
|
||||
/* 0x204 */ short field_0x204[8];
|
||||
/* 0x214 */ char field_0x214;
|
||||
/* 0x1F4 */ short mFIR[8];
|
||||
/* 0x204 */ short mIIR[8];
|
||||
/* 0x214 */ u8 mFilterMode;
|
||||
/* 0x215 */ volatile u8 mStatus;
|
||||
/* 0x216 */ struct {
|
||||
u8 flag0 : 1;
|
||||
u8 flag1 : 1;
|
||||
u8 flag2 : 1;
|
||||
u8 autoDelete : 1;
|
||||
u8 flag4 : 1;
|
||||
u8 flag5 : 1;
|
||||
u8 flag6 : 1;
|
||||
u8 flag7 : 1;
|
||||
} field_0x216;
|
||||
bool pause : 1;
|
||||
bool mute : 1;
|
||||
bool flag2 : 1;
|
||||
bool autoDelete : 1;
|
||||
bool flag4 : 1;
|
||||
bool flag5 : 1;
|
||||
bool flag6 : 1;
|
||||
bool flag7 : 1;
|
||||
} mFlags;
|
||||
/* 0x218 */ f32 mPanPower;
|
||||
/* 0x21C */ f32 field_0x21c;
|
||||
/* 0x21C */ f32 mTempoRate;
|
||||
/* 0x220 */ u32 mSkipSample;
|
||||
/* 0x224 */ u16 mDirectRelease;
|
||||
/* 0x226 */ u16 field_0x226;
|
||||
/* 0x226 */ u16 mTempo;
|
||||
/* 0x228 */ u16 mTimebase;
|
||||
/* 0x22A */ s8 mTranspose;
|
||||
/* 0x22B */ char field_0x22b;
|
||||
/* 0x22B */ u8 field_0x22b;
|
||||
/* 0x22C */ u16 mBankNumber;
|
||||
/* 0x22E */ u16 mProgNumber;
|
||||
/* 0x230 */ u8 mBendSense;
|
||||
/* 0x231 */ u8 mNoteOnPrio;
|
||||
/* 0x232 */ u8 mReleasePrio;
|
||||
/* 0x233 */ u8 mGateRate;
|
||||
/* 0x234 */ u16 field_0x234[6];
|
||||
/* 0x240 */ u8 field_0x240[0x08]; // TLinkListNode
|
||||
};
|
||||
|
||||
struct JASDefaultBankTable : public JASGlobalInstance<JASDefaultBankTable> {
|
||||
/* 802934B4 */ ~JASDefaultBankTable();
|
||||
/* 0x234 */ u16 mMixConfig[6];
|
||||
/* 0x240 */ JGadget::TLinkListNode field_0x240;
|
||||
};
|
||||
|
||||
#endif /* JASTRACK_H */
|
||||
|
||||
Reference in New Issue
Block a user