tp/include/revolution/axfx.h

215 lines
6.1 KiB
C

#ifndef _REVOLUTION_AXFX_H_
#define _REVOLUTION_AXFX_H_
#include <revolution/types.h>
#include <revolution/ax.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct AXFX_REVSTD_DELAYLINE {
/* 0x00 */ s32 inPoint;
/* 0x04 */ s32 outPoint;
/* 0x08 */ s32 length;
/* 0x0C */ f32* inputs;
/* 0x10 */ f32 lastOutput;
} AXFX_REVSTD_DELAYLINE;
typedef struct AXFX_REVSTD_WORK {
/* 0x000 */ AXFX_REVSTD_DELAYLINE AP[6];
/* 0x078 */ AXFX_REVSTD_DELAYLINE C[6];
/* 0x0F0 */ f32 allPassCoeff;
/* 0x0F4 */ f32 combCoef[6];
/* 0x10C */ f32 lpLastout[3];
/* 0x118 */ f32 level;
/* 0x11C */ f32 damping;
/* 0x120 */ s32 preDelayTime;
/* 0x124 */ f32* preDelayLine[3];
/* 0x130 */ f32* preDelayPtr[3];
} AXFX_REVSTD_WORK;
typedef struct AXFX_REVERBSTD {
/* 0x000 */ AXFX_REVSTD_WORK rv;
/* 0x13C */ u8 tempDisableFX;
/* 0x140 */ f32 coloration;
/* 0x144 */ f32 mix;
/* 0x148 */ f32 time;
/* 0x14C */ f32 damping;
/* 0x150 */ f32 preDelay;
} AXFX_REVERBSTD;
typedef struct AXFX_BUFFERUPDATE {
/* 0x00 */ s32* left;
/* 0x04 */ s32* right;
/* 0x08 */ s32* surround;
} AXFX_BUFFERUPDATE;
typedef struct AXFX_BUFFERUPDATE_DPL2 {
/* 0x00 */ s32* L;
/* 0x04 */ s32* R;
/* 0x08 */ s32* Ls;
/* 0x0C */ s32* Rs;
} AXFX_BUFFERUPDATE_DPL2;
// REVHI Structs
typedef struct AXFX_REVHI_DELAYLINE {
/* 0x00 */ s32 inPoint;
/* 0x04 */ s32 outPoint;
/* 0x08 */ s32 length;
/* 0x0C */ f32* inputs;
/* 0x10 */ f32 lastOutput;
} AXFX_REVHI_DELAYLINE;
typedef struct AXFX_REVHI_WORK {
/* 0x000 */ AXFX_REVHI_DELAYLINE AP[9];
/* 0x0B4 */ AXFX_REVHI_DELAYLINE C[9];
/* 0x168 */ f32 allPassCoeff;
/* 0x16C */ f32 combCoef[9];
/* 0x190 */ f32 lpLastout[3];
/* 0x19C */ f32 level;
/* 0x1A0 */ f32 damping;
/* 0x1A4 */ s32 preDelayTime;
/* 0x1A8 */ f32 crosstalk;
/* 0x1AC */ f32* preDelayLine[3];
/* 0x1B8 */ f32* preDelayPtr[3];
} AXFX_REVHI_WORK;
typedef struct AXFX_REVHI_WORK_DPL2 {
/* 0x000 */ AXFX_REVHI_DELAYLINE AP[12];
/* 0x0F0 */ AXFX_REVHI_DELAYLINE C[12];
/* 0x1E0 */ f32 allPassCoeff;
/* 0x1E4 */ f32 combCoef[12];
/* 0x214 */ f32 lpLastout[4];
/* 0x224 */ f32 level;
/* 0x228 */ f32 damping;
/* 0x22C */ s32 preDelayTime;
/* 0x230 */ f32 crosstalk;
/* 0x234 */ f32* preDelayLine[4];
/* 0x244 */ f32* preDelayPtr[4];
} AXFX_REVHI_WORK_DPL2;
typedef struct AXFX_REVERBHI {
/* 0x000 */ AXFX_REVHI_WORK rv;
/* 0x1C4 */ u8 tempDisableFX;
/* 0x1C8 */ f32 coloration;
/* 0x1CC */ f32 mix;
/* 0x1D0 */ f32 time;
/* 0x1D4 */ f32 damping;
/* 0x1D8 */ f32 preDelay;
/* 0x1DC */ f32 crosstalk;
} AXFX_REVERBHI;
typedef struct AXFX_REVERBHI_DPL2 {
/* 0x000 */ AXFX_REVHI_WORK_DPL2 rv;
/* 0x254 */ u8 tempDisableFX;
/* 0x258 */ f32 coloration;
/* 0x25C */ f32 mix;
/* 0x260 */ f32 time;
/* 0x264 */ f32 damping;
/* 0x268 */ f32 preDelay;
} AXFX_REVERBHI_DPL2;
typedef struct AXFX_DELAY {
/* 0x00 */ u32 currentSize[3];
/* 0x0C */ u32 currentPos[3];
/* 0x18 */ u32 currentFeedback[3];
/* 0x24 */ u32 currentOutput[3];
/* 0x30 */ s32* left;
/* 0x34 */ s32* right;
/* 0x38 */ s32* sur;
/* 0x3C */ u32 delay[3];
/* 0x48 */ u32 feedback[3];
/* 0x54 */ u32 output[3];
} AXFX_DELAY;
typedef struct AXFX_CHORUS_SRCINFO {
/* 0x00 */ s32* dest;
/* 0x04 */ s32* smpBase;
/* 0x08 */ s32* old;
/* 0x0C */ u32 posLo;
/* 0x10 */ u32 posHi;
/* 0x14 */ u32 pitchLo;
/* 0x18 */ u32 pitchHi;
/* 0x1C */ u32 trigger;
/* 0x20 */ u32 target;
} AXFX_CHORUS_SRCINFO;
typedef struct AXFX_CHORUS_WORK {
/* 0x00 */ s32* lastLeft[3];
/* 0x0C */ s32* lastRight[3];
/* 0x18 */ s32* lastSur[3];
/* 0x24 */ u8 currentLast;
/* 0x28 */ s32 oldLeft[4];
/* 0x38 */ s32 oldRight[4];
/* 0x48 */ s32 oldSur[4];
/* 0x58 */ u32 currentPosLo;
/* 0x5C */ u32 currentPosHi;
/* 0x60 */ s32 pitchOffset;
/* 0x64 */ u32 pitchOffsetPeriodCount;
/* 0x68 */ u32 pitchOffsetPeriod;
/* 0x6C */ AXFX_CHORUS_SRCINFO src;
} AXFX_CHORUS_WORK;
typedef struct AXFX_CHORUS {
/* 0x00 */ AXFX_CHORUS_WORK work;
/* 0x90 */ u32 baseDelay;
/* 0x94 */ u32 variation;
/* 0x98 */ u32 period;
} AXFX_CHORUS;
typedef void* (*AXFXAllocFunc)(u32);
typedef void (*AXFXFreeFunc)(void*);
// chorus
int AXFXChorusInit(AXFX_CHORUS* c);
int AXFXChorusShutdown(AXFX_CHORUS* c);
int AXFXChorusSettings(AXFX_CHORUS* c);
void AXFXChorusCallback(AXFX_BUFFERUPDATE* bufferUpdate, AXFX_CHORUS* chorus);
// delay
void AXFXDelayCallback(AXFX_BUFFERUPDATE* bufferUpdate, AXFX_DELAY* delay);
int AXFXDelaySettings(AXFX_DELAY* delay);
int AXFXDelayInit(AXFX_DELAY* delay);
int AXFXDelayShutdown(AXFX_DELAY* delay);
// reverb_hi
void DoCrossTalk(s32* l, s32* r, f32 cross, f32 invcross);
int AXFXReverbHiInit(AXFX_REVERBHI* rev);
int AXFXReverbHiShutdown(AXFX_REVERBHI* rev);
int AXFXReverbHiSettings(AXFX_REVERBHI* rev);
// reverb_hi_4ch
int AXFXReverbHiInitDpl2(AXFX_REVERBHI_DPL2* reverb);
int AXFXReverbHiShutdownDpl2(AXFX_REVERBHI_DPL2* reverb);
int AXFXReverbHiSettingsDpl2(AXFX_REVERBHI_DPL2* rev);
void AXFXReverbHiCallbackDpl2(AXFX_BUFFERUPDATE_DPL2* bufferUpdate, AXFX_REVERBHI_DPL2* reverb);
// reverb_std
int AXFXReverbStdInit(AXFX_REVERBSTD* rev);
int AXFXReverbStdShutdown(AXFX_REVERBSTD* rev);
int AXFXReverbStdSettings(AXFX_REVERBSTD* rev);
void AXFXReverbStdCallback(AXFX_BUFFERUPDATE* bufferUpdate, AXFX_REVERBSTD* reverb);
void AXFXReverbHiCallback(void *data, void *context);
void AXGetAuxACallback(AXAuxCallback* cbOut, void** contextOut);
void AXFXSetHooks(AXFXAllocFunc alloc, AXFXFreeFunc free);
void AXFXGetHooks(AXFXAllocFunc* allocOut, AXFXFreeFunc* freeOut);
BOOL AXFXReverbHiInit(AXFX_REVERBHI* reverbHi);
BOOL AXFXReverbHiShutdown(AXFX_REVERBHI* reverbHi);
u16 AXGetAuxAReturnVolume(void);
u16 AXGetAuxBReturnVolume(void);
u16 AXGetAuxCReturnVolume(void);
void AXSetAuxAReturnVolume(u16 volume);
void AXSetAuxBReturnVolume(u16 volume);
void AXSetAuxCReturnVolume(u16 volume);
void AXSetMasterVolume(u16 volume);
u16 AXGetMasterVolume(void);
#ifdef __cplusplus
}
#endif
#endif // _REVOLUTION_AXFX_H_