mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-08-08 18:13:02 -04:00
JAS work (#2069)
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
#ifndef JASARAMSTREAM_H
|
||||
#define JASARAMSTREAM_H
|
||||
|
||||
#include "JSystem/JAudio2/JASTaskThread.h"
|
||||
#include "dolphin/os/OSMessage.h"
|
||||
#include "JSystem/JUtility/JUTAssert.h"
|
||||
#include "dolphin/dvd.h"
|
||||
|
||||
class JASChannel;
|
||||
|
||||
@@ -14,31 +16,71 @@ namespace JASDsp {
|
||||
|
||||
class JASAramStream {
|
||||
public:
|
||||
typedef void (*StreamCallback)(u32, JASAramStream*, void*);
|
||||
|
||||
enum CallbackType {
|
||||
/* 0 */ CB_START,
|
||||
/* 1 */ CB_STOP,
|
||||
};
|
||||
|
||||
// Used internally for passing data to task functions
|
||||
struct TaskData {
|
||||
/* 0x0 */ JASAramStream* stream;
|
||||
/* 0x4 */ u32 field_0x4;
|
||||
/* 0x8 */ int field_0x8;
|
||||
};
|
||||
|
||||
struct Header {
|
||||
/* 0x00 */ u32 tag;
|
||||
/* 0x04 */ u8 field_0x4[5];
|
||||
/* 0x09 */ u8 format;
|
||||
/* 0x0A */ u8 bits;
|
||||
/* 0x0C */ u16 channels;
|
||||
/* 0x0E */ u16 loop;
|
||||
/* 0x10 */ int field_0x10;
|
||||
/* 0x14 */ u8 field_0x14[4];
|
||||
/* 0x18 */ int loop_start;
|
||||
/* 0x1C */ int loop_end;
|
||||
/* 0x20 */ u32 block_size;
|
||||
/* 0x24 */ u8 field_0x24[4];
|
||||
/* 0x28 */ u8 field_0x28;
|
||||
/* 0x29 */ u8 field_0x29[0x17];
|
||||
}; // Size: 0x40
|
||||
|
||||
struct BlockHeader {
|
||||
/* 0x00 */ u32 tag;
|
||||
/* 0x04 */ u32 field_0x4;
|
||||
/* 0x08 */ struct {
|
||||
s16 field_0x0;
|
||||
s16 field_0x2;
|
||||
} field_0x8[6];
|
||||
}; // Size: 0x20
|
||||
|
||||
/* 8029631C */ static void initSystem(u32, u32);
|
||||
/* 802963A8 */ JASAramStream();
|
||||
/* 8029649C */ void init(u32, u32, void (*)(u32, JASAramStream*, void*), void*);
|
||||
/* 8029649C */ void init(u32, u32, StreamCallback, void*);
|
||||
/* 8029655C */ bool prepare(s32, int);
|
||||
/* 80296618 */ bool start();
|
||||
/* 8029664C */ void stop(u16);
|
||||
/* 80296684 */ void pause(bool);
|
||||
/* 802966CC */ void cancel();
|
||||
/* 80296710 */ void getBlockSamples() const;
|
||||
/* 8029673C */ void headerLoadTask(void*);
|
||||
/* 8029676C */ void firstLoadTask(void*);
|
||||
/* 80296848 */ void loadToAramTask(void*);
|
||||
/* 80296868 */ void finishTask(void*);
|
||||
/* 802968C8 */ void prepareFinishTask(void*);
|
||||
/* 80296920 */ void headerLoad(u32, int);
|
||||
/* 80296AE8 */ void load();
|
||||
/* 80296D74 */ void channelProcCallback(void*);
|
||||
/* 80296D94 */ void dvdErrorCheck(void*);
|
||||
/* 80296DF0 */ void channelCallback(u32, JASChannel*, JASDsp::TChannel*, void*);
|
||||
/* 8029664C */ bool stop(u16);
|
||||
/* 80296684 */ bool pause(bool);
|
||||
/* 802966CC */ bool cancel();
|
||||
/* 80296710 */ u32 getBlockSamples() const;
|
||||
/* 8029673C */ static void headerLoadTask(void*);
|
||||
/* 8029676C */ static void firstLoadTask(void*);
|
||||
/* 80296848 */ static void loadToAramTask(void*);
|
||||
/* 80296868 */ static void finishTask(void*);
|
||||
/* 802968C8 */ static void prepareFinishTask(void*);
|
||||
/* 80296920 */ bool headerLoad(u32, int);
|
||||
/* 80296AE8 */ bool load();
|
||||
/* 80296D74 */ static s32 channelProcCallback(void*);
|
||||
/* 80296D94 */ static s32 dvdErrorCheck(void*);
|
||||
/* 80296DF0 */ static void channelCallback(u32, JASChannel*, JASDsp::TChannel*, void*);
|
||||
/* 80296E2C */ void updateChannel(u32, JASChannel*, JASDsp::TChannel*);
|
||||
/* 802974AC */ void channelProc();
|
||||
/* 802974AC */ s32 channelProc();
|
||||
/* 80297658 */ void channelStart();
|
||||
/* 80297870 */ void channelStop(u16);
|
||||
|
||||
void setPitch(f32 pitch) { field_0x178 = pitch; }
|
||||
void setPitch(f32 pitch) { mPitch = pitch; }
|
||||
void setVolume(f32 volume) {
|
||||
for (int i = 0; i < 6; i++) {
|
||||
mChannelVolume[i] = volume;
|
||||
@@ -53,7 +95,7 @@ public:
|
||||
|
||||
void setFxmix(f32 fxMix) {
|
||||
for (int i = 0; i < 6; i++) {
|
||||
mchannelFxMix[i] = fxMix;
|
||||
mChannelFxMix[i] = fxMix;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,7 +117,7 @@ public:
|
||||
|
||||
void setChannelFxmix(int channel, f32 fxMix) {
|
||||
JUT_ASSERT(302, channel < CHANNEL_MAX);
|
||||
mchannelFxMix[channel] = fxMix;
|
||||
mChannelFxMix[channel] = fxMix;
|
||||
}
|
||||
|
||||
void setChannelDolby(int channel, f32 dolby) {
|
||||
@@ -83,66 +125,61 @@ public:
|
||||
mChannelDolby[channel] = dolby;
|
||||
}
|
||||
|
||||
static u32 getBlockSize() { return sBlockSize; }
|
||||
|
||||
/* 0x000 */ OSMessageQueue field_0x000;
|
||||
/* 0x020 */ OSMessageQueue field_0x020;
|
||||
/* 0x040 */ void* field_0x040[16];
|
||||
/* 0x080 */ void* field_0x080[4];
|
||||
/* 0x090 */ JASChannel* field_0x090[6];
|
||||
/* 0x0A8 */ int field_0x0a8;
|
||||
/* 0x0AC */ u8 field_0x0ac;
|
||||
/* 0x0AD */ u8 field_0x0ad;
|
||||
/* 0x090 */ JASChannel* mChannels[CHANNEL_MAX];
|
||||
/* 0x0A8 */ JASChannel* field_0x0a8;
|
||||
/* 0x0AC */ bool field_0x0ac;
|
||||
/* 0x0AD */ bool field_0x0ad;
|
||||
/* 0x0AE */ u8 field_0x0ae;
|
||||
/* 0x0AF */ u8 field_0x0AF[0x0B0 - 0x0AF];
|
||||
/* 0x0B0 */ int field_0x0b0;
|
||||
/* 0x0B4 */ int field_0x0b4;
|
||||
/* 0x0B8 */ int field_0x0b8;
|
||||
/* 0x0B8 */ u32 field_0x0b8;
|
||||
/* 0x0BC */ int field_0x0bc;
|
||||
/* 0x0C0 */ u8 field_0x0c0;
|
||||
/* 0x0C1 */ u8 field_0x0C1[0x0C4 - 0x0C1];
|
||||
/* 0x0C4 */ int field_0x0c4;
|
||||
/* 0x0C0 */ bool field_0x0c0;
|
||||
/* 0x0C4 */ u32 field_0x0c4;
|
||||
/* 0x0C8 */ f32 field_0x0c8;
|
||||
/* 0x0CC */ u8 field_0x0CC[0x108 - 0x0CC];
|
||||
/* 0x108 */ int field_0x108;
|
||||
/* 0x0CC */ DVDFileInfo mDvdFileInfo;
|
||||
/* 0x108 */ u32 field_0x108;
|
||||
/* 0x10C */ int field_0x10c;
|
||||
/* 0x110 */ int field_0x110;
|
||||
/* 0x110 */ u32 mBlock;
|
||||
/* 0x114 */ u8 field_0x114;
|
||||
/* 0x115 */ u8 field_0x115[0x118 - 0x115];
|
||||
/* 0x118 */ int field_0x118;
|
||||
/* 0x118 */ u32 field_0x118;
|
||||
/* 0x11C */ int field_0x11c;
|
||||
/* 0x120 */ int field_0x120;
|
||||
/* 0x124 */ int field_0x124;
|
||||
/* 0x128 */ short field_0x128;
|
||||
/* 0x12A */ u8 field_0x12A[0x12C - 0x12A];
|
||||
/* 0x128 */ u16 field_0x128;
|
||||
/* 0x12C */ int field_0x12c;
|
||||
/* 0x130 */ short field_0x130[CHANNEL_MAX];
|
||||
/* 0x13C */ short field_0x13c[CHANNEL_MAX];
|
||||
/* 0x130 */ s16 field_0x130[CHANNEL_MAX];
|
||||
/* 0x13C */ s16 field_0x13c[CHANNEL_MAX];
|
||||
/* 0x148 */ int field_0x148;
|
||||
/* 0x14C */ int field_0x14c;
|
||||
/* 0x150 */ void* field_0x150;
|
||||
/* 0x154 */ int field_0x154;
|
||||
/* 0x158 */ short field_0x158;
|
||||
/* 0x15A */ short field_0x15a;
|
||||
/* 0x15C */ int field_0x15c;
|
||||
/* 0x160 */ int field_0x160;
|
||||
/* 0x164 */ int field_0x164;
|
||||
/* 0x168 */ u8 field_0x168;
|
||||
/* 0x169 */ u8 field_0x169[0x16C - 0x169];
|
||||
/* 0x16C */ int field_0x16c;
|
||||
/* 0x170 */ int field_0x170;
|
||||
/* 0x174 */ f32 field_0x174;
|
||||
/* 0x178 */ f32 field_0x178;
|
||||
/* 0x17C */ float mChannelVolume[CHANNEL_MAX];
|
||||
/* 0x194 */ float mChannelPan[CHANNEL_MAX];
|
||||
/* 0x1AC */ float mchannelFxMix[CHANNEL_MAX];
|
||||
/* 0x1C4 */ float mChannelDolby[CHANNEL_MAX];
|
||||
/* 0x1DC */ short field_0x1dc[CHANNEL_MAX];
|
||||
/* 0x14C */ u32 field_0x14c;
|
||||
/* 0x150 */ StreamCallback mCallback;
|
||||
/* 0x154 */ void* mCallbackData;
|
||||
/* 0x158 */ u16 field_0x158;
|
||||
/* 0x15A */ u16 mChannelNum;
|
||||
/* 0x15C */ u32 mBufCount;
|
||||
/* 0x160 */ u32 field_0x160;
|
||||
/* 0x164 */ u32 field_0x164;
|
||||
/* 0x168 */ bool mLoop;
|
||||
/* 0x16C */ u32 mLoopStart;
|
||||
/* 0x170 */ u32 mLoopEnd;
|
||||
/* 0x174 */ f32 mVolume;
|
||||
/* 0x178 */ f32 mPitch;
|
||||
/* 0x17C */ f32 mChannelVolume[CHANNEL_MAX];
|
||||
/* 0x194 */ f32 mChannelPan[CHANNEL_MAX];
|
||||
/* 0x1AC */ f32 mChannelFxMix[CHANNEL_MAX];
|
||||
/* 0x1C4 */ f32 mChannelDolby[CHANNEL_MAX];
|
||||
/* 0x1DC */ u16 field_0x1dc[CHANNEL_MAX];
|
||||
|
||||
u32 getBlockSize() { return sBlockSize; }
|
||||
|
||||
static u8 sLoadThread[4];
|
||||
static u8 sReadBuffer[4];
|
||||
static JASTaskThread* sLoadThread;
|
||||
static u8* sReadBuffer;
|
||||
static u32 sBlockSize;
|
||||
static u8 sChannelMax[4];
|
||||
static u32 sChannelMax;
|
||||
};
|
||||
|
||||
#endif /* JASARAMSTREAM_H */
|
||||
|
||||
@@ -80,7 +80,7 @@ struct JASBasicWaveBank : public JASWaveBank {
|
||||
/* 0x24 */ u16 mHandleCount;
|
||||
/* 0x26 */ u16 mGroupCount;
|
||||
|
||||
static u8 mNoLoad[4 + 4 /* padding */];
|
||||
static u32 mNoLoad;
|
||||
};
|
||||
|
||||
#endif /* JASBASICWAVEBANK_H */
|
||||
|
||||
@@ -21,6 +21,16 @@ struct JASCalc {
|
||||
return x;
|
||||
} */
|
||||
|
||||
static f32 clamp01(f32 i_value) {
|
||||
if (i_value <= 0.0f) {
|
||||
return 0.0f;
|
||||
}
|
||||
if (i_value >= 1.0f) {
|
||||
return 1.0f;
|
||||
}
|
||||
return i_value;
|
||||
}
|
||||
|
||||
f32 fake1();
|
||||
f32 fake2(long x);
|
||||
f32 fake3();
|
||||
|
||||
@@ -33,45 +33,73 @@ public:
|
||||
mDolby = 0.0f;
|
||||
}
|
||||
|
||||
f32 mVolume;
|
||||
f32 mPitch;
|
||||
f32 field_0x8;
|
||||
f32 mPan;
|
||||
f32 mFxMix;
|
||||
f32 mDolby;
|
||||
/* 0x00 */ f32 mVolume;
|
||||
/* 0x04 */ f32 mPitch;
|
||||
/* 0x08 */ f32 field_0x8;
|
||||
/* 0x0C */ f32 mPan;
|
||||
/* 0x10 */ f32 mFxMix;
|
||||
/* 0x14 */ f32 mDolby;
|
||||
};
|
||||
|
||||
class JASChannel : public JASPoolAllocObject_MultiThreaded<JASChannel> {
|
||||
public:
|
||||
struct PanVector {};
|
||||
typedef void (*Callback)(u32, JASChannel*, JASDsp::TChannel*, void*);
|
||||
|
||||
/* 8029A800 */ JASChannel(void (*)(u32, JASChannel*, JASDsp::TChannel*, void*), void*);
|
||||
enum CallbackType {
|
||||
/* 0 */ CB_PLAY,
|
||||
/* 1 */ CB_START,
|
||||
/* 2 */ CB_STOP,
|
||||
/* 3 */ CB_TIMER,
|
||||
};
|
||||
|
||||
enum Status {
|
||||
/* 0 */ STATUS_INACTIVE,
|
||||
/* 1 */ STATUS_ACTIVE,
|
||||
/* 2 */ STATUS_RELEASE,
|
||||
};
|
||||
|
||||
struct PanVector {
|
||||
/* 0x0 */ f32 mSound;
|
||||
/* 0x4 */ f32 mEffect;
|
||||
/* 0x8 */ f32 mChannel;
|
||||
};
|
||||
|
||||
union MixConfig {
|
||||
u16 whole;
|
||||
struct {
|
||||
u8 upper;
|
||||
u8 lower0 : 4;
|
||||
u8 lower1 : 4;
|
||||
} parts;
|
||||
};
|
||||
|
||||
/* 8029A800 */ JASChannel(Callback, void*);
|
||||
/* 8029A918 */ ~JASChannel();
|
||||
/* 8029A9F0 */ int play();
|
||||
/* 8029AA60 */ void playForce();
|
||||
/* 8029AA60 */ int playForce();
|
||||
/* 8029AAD0 */ void release(u16);
|
||||
/* 8029AB64 */ void setOscInit(u32, JASOscillator::Data const*);
|
||||
/* 8029AB98 */ void setMixConfig(u32, u16);
|
||||
/* 8029ABA8 */ void calcEffect(JASChannel::PanVector const*);
|
||||
/* 8029ABC0 */ void calcPan(JASChannel::PanVector const*);
|
||||
/* 8029ABA8 */ static f32 calcEffect(JASChannel::PanVector const*);
|
||||
/* 8029ABC0 */ static f32 calcPan(JASChannel::PanVector const*);
|
||||
/* 8029ABEC */ void effectOsc(u32, JASOscillator::EffectParams*);
|
||||
/* 8029ACD4 */ void setKeySweepTarget(s32, u32);
|
||||
/* 8029AD38 */ void updateEffectorParam(JASDsp::TChannel*, u16*,
|
||||
JASOscillator::EffectParams const&);
|
||||
/* 8029AF78 */ static void dspUpdateCallback(u32, JASDsp::TChannel*, void*);
|
||||
/* 8029B004 */ void initialUpdateDSPChannel(JASDsp::TChannel*);
|
||||
/* 8029B324 */ void updateDSPChannel(JASDsp::TChannel*);
|
||||
/* 8029AF78 */ static s32 dspUpdateCallback(u32, JASDsp::TChannel*, void*);
|
||||
/* 8029B004 */ s32 initialUpdateDSPChannel(JASDsp::TChannel*);
|
||||
/* 8029B324 */ s32 updateDSPChannel(JASDsp::TChannel*);
|
||||
/* 8029B6A0 */ void updateAutoMixer(JASDsp::TChannel*, f32, f32, f32, f32);
|
||||
/* 8029B7D8 */ void updateMixer(f32, f32, f32, f32, u16*);
|
||||
/* 8029BBFC */ void free();
|
||||
/* 8029BC0C */ static void initBankDisposeMsgQueue();
|
||||
/* 8029BC48 */ static void receiveBankDisposeMsg();
|
||||
/* 8029BCC0 */ void checkBankDispose() const;
|
||||
/* 8029BCC0 */ bool checkBankDispose() const;
|
||||
|
||||
void setPauseFlag(bool param_0) { mPauseFlag = param_0; }
|
||||
void setUpdateTimer(u32 param_0) { mUpdateTimer = param_0; }
|
||||
void setBankDisposeID(const void* param_0) { mBankDisposeID = param_0; }
|
||||
void setDirectRelease(u16 param_0) { field_0x1c[0].setDirectRelease(param_0); }
|
||||
void setDirectRelease(u16 param_0) { mOscillators[0].setDirectRelease(param_0); }
|
||||
void setVibrate(f32 param_0, f32 param_1) {
|
||||
mVibrate.setDepth(param_0);
|
||||
mVibrate.setPitch(param_1);
|
||||
@@ -84,34 +112,35 @@ public:
|
||||
void setTremoloDelay(u16 param_0) { mTremolo.setDelay(param_0); }
|
||||
void setPriority(u16 param_0) { mPriority = param_0; }
|
||||
void setParams(const JASChannelParams& param_0) { mParams = param_0; }
|
||||
void setInitVolume(f32 param_0) { field_0xb4.mVolume = param_0; }
|
||||
void setInitFxmix(f32 param_0) { field_0xb4.mFxMix = param_0; }
|
||||
void setInitPitch(f32 param_0) { field_0xb4.mPitch = param_0; }
|
||||
void setInitPan(f32 param_0) { field_0xb4.mPan = param_0; }
|
||||
void setInitDolby(f32 param_0) { field_0xb4.mDolby = param_0; }
|
||||
void setInitVolume(f32 param_0) { mSoundParams.mVolume = param_0; }
|
||||
void setInitFxmix(f32 param_0) { mSoundParams.mFxMix = param_0; }
|
||||
void setInitPitch(f32 param_0) { mSoundParams.mPitch = param_0; }
|
||||
void setInitPan(f32 param_0) { mSoundParams.mPan = param_0; }
|
||||
void setInitDolby(f32 param_0) { mSoundParams.mDolby = param_0; }
|
||||
void setKey(s32 param_0) { mKey = param_0; }
|
||||
void setVelocity(u32 param_0) { mVelocity = param_0; }
|
||||
void setSkipSamples(u32 param_0) { mSkipSamples = param_0; }
|
||||
bool isDolbyMode() { return mMixConfig[0].whole == 0xffff; }
|
||||
|
||||
/* 0x00 */ int mStatus;
|
||||
/* 0x04 */ bool mPauseFlag;
|
||||
/* 0x08 */ JASDSPChannel* mDspCh;
|
||||
/* 0x0C */ void* field_0xc;
|
||||
/* 0x10 */ void* field_0x10;
|
||||
/* 0x0C */ Callback mCallback;
|
||||
/* 0x10 */ void* mCallbackData;
|
||||
/* 0x14 */ u32 mUpdateTimer;
|
||||
/* 0x18 */ const void* mBankDisposeID;
|
||||
/* 0x1C */ JASOscillator field_0x1c[2];
|
||||
/* 0x1C */ JASOscillator mOscillators[2];
|
||||
/* 0x5C */ JASLfo mVibrate;
|
||||
/* 0x74 */ JASLfo mTremolo;
|
||||
/* 0x8C */ u16 field_0x8c[6];
|
||||
/* 0x98 */ short mPriority;
|
||||
/* 0x8C */ MixConfig mMixConfig[6];
|
||||
/* 0x98 */ u16 mPriority;
|
||||
/* 0x9C */ JASChannelParams mParams;
|
||||
/* 0xB4 */ JASSoundParams field_0xb4;
|
||||
/* 0xB4 */ JASSoundParams mSoundParams;
|
||||
/* 0xC8 */ s16 mKey;
|
||||
/* 0xCA */ u16 mVelocity;
|
||||
/* 0xCC */ f32 field_0xcc;
|
||||
/* 0xD0 */ f32 field_0xd0;
|
||||
/* 0xD4 */ u32 field_0xd4;
|
||||
/* 0xCC */ f32 mKeySweep;
|
||||
/* 0xD0 */ f32 mKeySweepTarget;
|
||||
/* 0xD4 */ u32 mKeySweepCount;
|
||||
/* 0xD8 */ u32 mSkipSamples;
|
||||
struct {
|
||||
u32 field_0x0;
|
||||
@@ -121,8 +150,8 @@ public:
|
||||
|
||||
static OSMessageQueue sBankDisposeMsgQ;
|
||||
static OSMessage sBankDisposeMsg[16];
|
||||
static u32 sBankDisposeList[16];
|
||||
static u32 sBankDisposeListSize;
|
||||
static OSMessage sBankDisposeList[16];
|
||||
static int sBankDisposeListSize;
|
||||
};
|
||||
|
||||
#endif /* JASCHANNEL_H */
|
||||
|
||||
@@ -1,5 +1,49 @@
|
||||
#ifndef JASDSPCHANNEL_H
|
||||
#define JASDSPCHANNEL_H
|
||||
|
||||
#include "JSystem/JAudio2/JASDSPInterface.h"
|
||||
|
||||
struct JASDSPChannel {
|
||||
typedef s32 (*Callback)(u32, JASDsp::TChannel*, void*);
|
||||
|
||||
enum Status {
|
||||
/* 0 */ STATUS_ACTIVE,
|
||||
/* 1 */ STATUS_INACTIVE,
|
||||
/* 2 */ STATUS_DROP,
|
||||
};
|
||||
|
||||
enum CallbackType {
|
||||
/* 0 */ CB_PLAY,
|
||||
/* 1 */ CB_START,
|
||||
/* 2 */ CB_STOP,
|
||||
/* 3 */ CB_DROP,
|
||||
};
|
||||
|
||||
/* 8029D2F4 */ JASDSPChannel();
|
||||
/* 8029D320 */ void free();
|
||||
/* 8029D330 */ void start();
|
||||
/* 8029D340 */ void drop();
|
||||
/* 8029D534 */ void setPriority(u8);
|
||||
/* 8029D65C */ void updateProc();
|
||||
|
||||
/* 8029D3C8 */ static void initAll();
|
||||
/* 8029D44C */ static JASDSPChannel* alloc(u8, Callback, void*);
|
||||
/* 8029D4BC */ static JASDSPChannel* allocForce(u8, Callback, void*);
|
||||
/* 8029D540 */ static JASDSPChannel* getLowestChannel(int);
|
||||
/* 8029D5D0 */ static JASDSPChannel* getLowestActiveChannel();
|
||||
/* 8029D89C */ static void updateAll();
|
||||
/* 8029D910 */ static int killActiveChannel();
|
||||
/* 8029D948 */ static JASDSPChannel* getHandle(u32);
|
||||
|
||||
static JASDSPChannel* sDspChannels;
|
||||
|
||||
/* 0x00 */ s32 mStatus;
|
||||
/* 0x04 */ s16 mPriority;
|
||||
/* 0x08 */ u32 mFlags;
|
||||
/* 0x0C */ u32 field_0xc;
|
||||
/* 0x10 */ Callback mCallback;
|
||||
/* 0x14 */ void* mCallbackData;
|
||||
/* 0x18 */ JASDsp::TChannel* mChannel;
|
||||
}; // Size: 0x1C
|
||||
|
||||
#endif /* JASDSPCHANNEL_H */
|
||||
|
||||
@@ -57,7 +57,7 @@ namespace JASDsp {
|
||||
/* 0x002 */ u16 mIsFinished;
|
||||
/* 0x004 */ u16 mPitch;
|
||||
/* 0x006 */ short field_0x006;
|
||||
/* 0x008 */ short field_0x008;
|
||||
/* 0x008 */ u16 field_0x008;
|
||||
/* 0x00A */ u8 field_0x00A[0x00C - 0x00A];
|
||||
/* 0x00C */ s16 mPauseFlag;
|
||||
/* 0x00E */ short field_0x00E;
|
||||
@@ -71,7 +71,7 @@ namespace JASDsp {
|
||||
/* 0x05A */ u8 field_0x05A[0x060 - 0x05A];
|
||||
/* 0x060 */ short field_0x060;
|
||||
/* 0x062 */ u8 field_0x062[0x064 - 0x062];
|
||||
/* 0x064 */ short field_0x064;
|
||||
/* 0x064 */ u16 field_0x064;
|
||||
/* 0x066 */ short field_0x066;
|
||||
/* 0x068 */ int field_0x068;
|
||||
/* 0x06C */ u8 field_0x06C[0x070 - 0x06C];
|
||||
|
||||
@@ -33,19 +33,6 @@ public:
|
||||
/* 0x40 */ JASHeap* field_0x40;
|
||||
};
|
||||
|
||||
namespace JASKernel {
|
||||
/* 802909B8 */ void setupRootHeap(JKRSolidHeap*, u32);
|
||||
/* 80290AC0 */ JKRHeap* getSystemHeap();
|
||||
/* 80290AC8 */ void* getCommandHeap();
|
||||
/* 80290AD0 */ void setupAramHeap(u32, u32);
|
||||
/* 80290B08 */ JASHeap* getAramHeap();
|
||||
|
||||
extern u8 audioAramHeap[68];
|
||||
extern u32 sAramBase;
|
||||
extern JKRHeap* sSystemHeap;
|
||||
extern void* sCommandHeap;
|
||||
};
|
||||
|
||||
struct JASGenericMemPool {
|
||||
/* 80290848 */ JASGenericMemPool();
|
||||
/* 80290860 */ ~JASGenericMemPool();
|
||||
@@ -185,13 +172,13 @@ public:
|
||||
}
|
||||
|
||||
void free(void* ptr) {
|
||||
T::Lock lock(&((JASMemChunkPool<ChunkSize,T>*)ptr)->mMutex);
|
||||
MemoryChunk* chunk = ((JASMemChunkPool<ChunkSize,T>*)ptr)->field_0x18;
|
||||
T::Lock lock(&mMutex);
|
||||
MemoryChunk* chunk = field_0x18;
|
||||
MemoryChunk* prevChunk = NULL;
|
||||
while (chunk != NULL) {
|
||||
if (chunk->checkArea(this)) {
|
||||
if (chunk->checkArea(ptr)) {
|
||||
chunk->free();
|
||||
if (chunk != ((JASMemChunkPool<ChunkSize,T>*)ptr)->field_0x18 && chunk->isEmpty()) {
|
||||
if (chunk != field_0x18 && chunk->isEmpty()) {
|
||||
MemoryChunk* nextChunk = chunk->getNextChunk();
|
||||
delete chunk;
|
||||
prevChunk->setNextChunk(nextChunk);
|
||||
@@ -207,6 +194,19 @@ public:
|
||||
/* 0x18 */ MemoryChunk* field_0x18;
|
||||
};
|
||||
|
||||
namespace JASKernel {
|
||||
/* 802909B8 */ void setupRootHeap(JKRSolidHeap*, u32);
|
||||
/* 80290AC0 */ JKRHeap* getSystemHeap();
|
||||
/* 80290AC8 */ JASMemChunkPool<1024, JASThreadingModel::ObjectLevelLockable>* getCommandHeap();
|
||||
/* 80290AD0 */ void setupAramHeap(u32, u32);
|
||||
/* 80290B08 */ JASHeap* getAramHeap();
|
||||
|
||||
extern u8 audioAramHeap[68];
|
||||
extern u32 sAramBase;
|
||||
extern JKRHeap* sSystemHeap;
|
||||
extern JASMemChunkPool<1024, JASThreadingModel::ObjectLevelLockable>* sCommandHeap;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
class JASPoolAllocObject {
|
||||
public:
|
||||
|
||||
@@ -11,10 +11,28 @@ struct JASOscillator {
|
||||
/* 0x4 */ s16 _4;
|
||||
};
|
||||
|
||||
struct EffectParams {};
|
||||
struct EffectParams {
|
||||
EffectParams() {
|
||||
mVolume = 1.0f;
|
||||
mPitch = 1.0f;
|
||||
mPan = 0.5f;
|
||||
mFxMix = 0.0f;
|
||||
mDolby = 0.0f;
|
||||
_14 = 1.0f;
|
||||
_18 = 1.0f;
|
||||
}
|
||||
|
||||
/* 0x00 */ f32 mVolume;
|
||||
/* 0x04 */ f32 mPitch;
|
||||
/* 0x08 */ f32 mPan;
|
||||
/* 0x0C */ f32 mFxMix;
|
||||
/* 0x10 */ f32 mDolby;
|
||||
/* 0x14 */ f32 _14;
|
||||
/* 0x18 */ f32 _18;
|
||||
};
|
||||
|
||||
struct Data {
|
||||
/* 0x00 */ u32 _00;
|
||||
/* 0x00 */ u32 mTarget;
|
||||
/* 0x04 */ f32 _04;
|
||||
/* 0x08 */ const Point* mTable;
|
||||
/* 0x0C */ const Point* _0C;
|
||||
@@ -22,6 +40,16 @@ struct JASOscillator {
|
||||
/* 0x14 */ f32 _14;
|
||||
};
|
||||
|
||||
enum Target {
|
||||
/* 0 */ TARGET_VOLUME,
|
||||
/* 1 */ TARGET_PITCH,
|
||||
/* 2 */ TARGET_PAN,
|
||||
/* 3 */ TARGET_FXMIX,
|
||||
/* 4 */ TARGET_DOLBY,
|
||||
/* 5 */ TARGET_5,
|
||||
/* 6 */ TARGET_6,
|
||||
};
|
||||
|
||||
JASOscillator();
|
||||
|
||||
void initStart(const Data*);
|
||||
@@ -32,9 +60,11 @@ struct JASOscillator {
|
||||
void updateCurrentValue(f32 param_0);
|
||||
|
||||
void setDirectRelease(u16 param_0) { mDirectRelease = param_0; }
|
||||
void stop() {
|
||||
_1C = 0;
|
||||
}
|
||||
void stop() { _1C = 0; }
|
||||
bool isValid() { return mData != NULL; }
|
||||
bool isStop() { return _1C == 0; }
|
||||
bool isRelease() { return _1C == 3 || _1C == 4; }
|
||||
u32 getTarget() { return mData->mTarget; }
|
||||
|
||||
/* 0x00 */ const Data* mData;
|
||||
/* 0x04 */ f32 _04;
|
||||
|
||||
@@ -25,7 +25,7 @@ public:
|
||||
/* 8028FE88 */ void pause(bool);
|
||||
|
||||
/* 8028F724 */ virtual ~JASTaskThread();
|
||||
/* 8028FD4C */ virtual void run();
|
||||
/* 8028FD4C */ virtual void* run();
|
||||
|
||||
/* 0x7C */ OSThreadQueue mpThreadQueue;
|
||||
/* 0x84 */ bool field_0x84;
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
struct JASWaveInfo {
|
||||
JASWaveInfo() {
|
||||
field_0x01 = 0x3c;
|
||||
field_0x20 = one;
|
||||
field_0x20 = &one;
|
||||
}
|
||||
|
||||
/* 0x00 */ u8 field_0x00;
|
||||
@@ -20,9 +20,9 @@ struct JASWaveInfo {
|
||||
/* 0x18 */ int field_0x18;
|
||||
/* 0x1C */ s16 field_0x1c;
|
||||
/* 0x1E */ s16 field_0x1e;
|
||||
/* 0x20 */ const void* field_0x20;
|
||||
/* 0x20 */ const u32* field_0x20;
|
||||
|
||||
static u32 one[1 + 1 /* padding */];
|
||||
static u32 one;
|
||||
};
|
||||
|
||||
#endif /* JASWAVEINFO_H */
|
||||
@@ -444,6 +444,11 @@ struct TUtil {
|
||||
}
|
||||
};
|
||||
|
||||
template<>
|
||||
struct TUtil<f32> {
|
||||
static inline f32 PI() { return 3.1415927f; }
|
||||
};
|
||||
|
||||
template<>
|
||||
struct TUtil<double> {
|
||||
static inline double epsilon() { return 32.0f * FLT_EPSILON; }
|
||||
|
||||
@@ -4,6 +4,14 @@
|
||||
#include "dolphin/types.h"
|
||||
#include "utility.h"
|
||||
|
||||
template<typename T>
|
||||
struct TAngleConstant_;
|
||||
|
||||
template<>
|
||||
struct TAngleConstant_<f32> {
|
||||
static inline f32 RADIAN_DEG360() { return 6.2831855f; }
|
||||
};
|
||||
|
||||
struct TSinCosTable {
|
||||
std::pair<f32, f32> table[0x2000];
|
||||
|
||||
@@ -30,6 +38,13 @@ struct TSinCosTable {
|
||||
}
|
||||
return table[(u16)(22.755556106567383f * degree) & 0x1fffU].second;
|
||||
}
|
||||
|
||||
inline f32 sinRadian(f32 radian) {
|
||||
if (radian < 0.0f) {
|
||||
return -table[(u16)(-8192.0f / TAngleConstant_<f32>::RADIAN_DEG360() * radian) & 0x1fffU].first;
|
||||
}
|
||||
return table[(u16)(8192.0f / TAngleConstant_<f32>::RADIAN_DEG360() * radian) & 0x1fffU].first;
|
||||
}
|
||||
};
|
||||
|
||||
struct TAtanTable {
|
||||
@@ -74,4 +89,8 @@ inline f32 JMACosDegree(f32 degree) {
|
||||
return JMath::sincosTable_.cosDegree(degree);
|
||||
}
|
||||
|
||||
inline f32 JMASinRadian(f32 radian) {
|
||||
return JMath::sincosTable_.sinRadian(radian);
|
||||
}
|
||||
|
||||
#endif /* JMATRIGONOMETRIC_H */
|
||||
|
||||
Reference in New Issue
Block a user