Files
ss/include/rvl/AX/AXPB.h
T
2025-05-25 08:53:24 +02:00

288 lines
7.3 KiB
C

#ifndef RVL_SDK_AX_PB_H
#define RVL_SDK_AX_PB_H
#include "common.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* One frame contains eight bytes:
* - One for the header
* - Seven for the audio samples
*/
#define AX_ADPCM_FRAME_SIZE 8
#define AX_ADPCM_SAMPLE_BYTES_PER_FRAME (AX_ADPCM_FRAME_SIZE - 1)
// Two audio samples per byte (each nibble)
#define AX_ADPCM_SAMPLES_PER_BYTE 2
// Amount of audio samples in a frame
#define AX_ADPCM_SAMPLES_PER_FRAME (AX_ADPCM_SAMPLE_BYTES_PER_FRAME * AX_ADPCM_SAMPLES_PER_BYTE)
// Amount of nibbles in a frame
#define AX_ADPCM_NIBBLES_PER_FRAME (AX_ADPCM_FRAME_SIZE * 2)
typedef enum {
AX_VOICE_NORMAL,
AX_VOICE_STREAM
} AXVOICETYPE;
typedef enum {
AX_VOICE_STOP,
AX_VOICE_RUN
} AXVOICESTATE;
enum
{
AX_PB_OFF = 0,
AX_PB_LPF_ON = 1 << 0,
AX_PB_BIQUAD_ON = 1 << 1,
};
typedef enum {
AX_SAMPLE_FORMAT_DSP_ADPCM = 0,
AX_SAMPLE_FORMAT_PCM_S16 = 10,
AX_SAMPLE_FORMAT_PCM_S8 = 25,
} AXSAMPLETYPE;
typedef enum {
AX_SRC_TYPE_NONE,
AX_SRC_TYPE_LINEAR,
AX_SRC_TYPE_4TAP_8K,
AX_SRC_TYPE_4TAP_12K,
AX_SRC_TYPE_4TAP_16K,
AX_SRC_TYPE_4TAP_AUTO
} AXPBSRCTYPE;
typedef enum AXMixerCtrlFlags
{
AX_MIXER_CTRL_L = 1 << 0,
AX_MIXER_CTRL_R = 1 << 1,
AX_MIXER_CTRL_DELTA = 1 << 2,
AX_MIXER_CTRL_S = 1 << 3,
AX_MIXER_CTRL_DELTA_S = 1 << 4,
AX_MIXER_CTRL_A_L = 1 << 16,
AX_MIXER_CTRL_A_R = 1 << 17,
AX_MIXER_CTRL_A_DELTA = 1 << 18,
AX_MIXER_CTRL_A_S = 1 << 19,
AX_MIXER_CTRL_A_DELTA_S = 1 << 20,
AX_MIXER_CTRL_B_L = 1 << 21,
AX_MIXER_CTRL_B_R = 1 << 22,
AX_MIXER_CTRL_B_DELTA = 1 << 23,
AX_MIXER_CTRL_B_S = 1 << 24,
AX_MIXER_CTRL_B_DELTA_S = 1 << 25,
AX_MIXER_CTRL_C_L = 1 << 26,
AX_MIXER_CTRL_C_R = 1 << 27,
AX_MIXER_CTRL_C_DELTA = 1 << 28,
AX_MIXER_CTRL_C_S = 1 << 29,
AX_MIXER_CTRL_C_DELTA_S = 1 << 30,
} AXMixerCtrlFlags;
typedef enum {
AX_MIXER_CTRL_RMT_M0 = (1 << 0),
AX_MIXER_CTRL_RMT_DELTA_M0 = (1 << 1),
AX_MIXER_CTRL_RMT_A0 = (1 << 2),
AX_MIXER_CTRL_RMT_DELTA_A0 = (1 << 3),
AX_MIXER_CTRL_RMT_M1 = (1 << 4),
AX_MIXER_CTRL_RMT_DELTA_M1 = (1 << 5),
AX_MIXER_CTRL_RMT_A1 = (1 << 6),
AX_MIXER_CTRL_RMT_DELTA_A1 = (1 << 7),
AX_MIXER_CTRL_RMT_M2 = (1 << 8),
AX_MIXER_CTRL_RMT_DELTA_M2 = (1 << 9),
AX_MIXER_CTRL_RMT_A2 = (1 << 10),
AX_MIXER_CTRL_RMT_DELTA_A2 = (1 << 11),
AX_MIXER_CTRL_RMT_M3 = (1 << 12),
AX_MIXER_CTRL_RMT_DELTA_M3 = (1 << 13),
AX_MIXER_CTRL_RMT_A3 = (1 << 14),
AX_MIXER_CTRL_RMT_DELTA_A3 = (1 << 15)
};
typedef struct _AXPBMIX {
u16 vL; // at 0x0
u16 vDeltaL; // at 0x2
u16 vR; // at 0x4
u16 vDeltaR; // at 0x6
u16 vAuxAL; // at 0x8
u16 vDeltaAuxAL; // at 0xA
u16 vAuxAR; // at 0xC
u16 vDeltaAuxAR; // at 0xE
u16 vAuxBL; // at 0x10
u16 vDeltaAuxBL; // at 0x12
u16 vAuxBR; // at 0x14
u16 vDeltaAuxBR; // at 0x16
u16 vAuxCL; // at 0x18
u16 vDeltaAuxCL; // at 0x1A
u16 vAuxCR; // at 0x1C
u16 vDeltaAuxCR; // at 0x1E
u16 vS; // at 0x20
u16 vDeltaS; // at 0x22
u16 vAuxAS; // at 0x24
u16 vDeltaAuxAS; // at 0x26
u16 vAuxBS; // at 0x28
u16 vDeltaAuxBS; // at 0x2A
u16 vAuxCS; // at 0x2C
u16 vDeltaAuxCS; // at 0x2E
} AXPBMIX;
typedef struct _AXPBITD {
u16 flag; // at 0x0
u16 bufferHi; // at 0x2
u16 bufferLo; // at 0x4
u16 shiftL; // at 0x6
u16 shiftR; // at 0x8
u16 targetShiftL; // at 0xA
u16 targetShiftR; // at 0xC
} AXPBITD;
typedef struct _AXPBDPOP {
s16 aL; // at 0x0
s16 aAuxAL; // at 0x2
s16 aAuxBL; // at 0x4
s16 aAuxCL; // at 0x6
s16 aR; // at 0x8
s16 aAuxAR; // at 0xA
s16 aAuxBR; // at 0xC
s16 aAuxCR; // at 0xE
s16 aS; // at 0x10
s16 aAuxAS; // at 0x12
s16 aAuxBS; // at 0x14
s16 aAuxCS; // at 0x16
} AXPBDPOP;
typedef struct _AXPBVE {
u16 currentVolume; // at 0x0
s16 currentDelta; // at 0x2
} AXPBVE;
typedef struct _AXPBADDR {
u16 loopFlag; // at 0x0
u16 format; // at 0x2
u16 loopAddressHi; // at 0x4
u16 loopAddressLo; // at 0x6
u16 endAddressHi; // at 0x8
u16 endAddressLo; // at 0xA
u16 currentAddressHi; // at 0xC
u16 currentAddressLo; // at 0xE
} AXPBADDR;
typedef struct _AXPBADPCM {
u16 a[8][2]; // at 0x0
u16 gain; // at 0x20
u16 pred_scale; // at 0x22
u16 yn1; // at 0x24
u16 yn2; // at 0x26
} AXPBADPCM;
typedef struct _AXPBSRC {
u16 ratioHi; // at 0x0
u16 ratioLo; // at 0x2
u16 currentAddressFrac; // at 0x4
u16 last_samples[4]; // at 0x6
} AXPBSRC;
typedef struct _AXPBADPCMLOOP {
u16 loop_pred_scale; // at 0x0
u16 loop_yn1; // at 0x2
u16 loop_yn2; // at 0x4
} AXPBADPCMLOOP;
typedef struct _AXPBLPF {
u16 on; // at 0x0
u16 yn1; // at 0x2
u16 a0; // at 0x4
u16 b0; // at 0x6
} AXPBLPF;
typedef struct _AXPBBIQUAD {
u16 on; // at 0x0
u16 xn1; // at 0x2
u16 xn2; // at 0x4
u16 yn1; // at 0x6
u16 yn2; // at 0x8
u16 b0; // at 0xA
u16 b1; // at 0xC
u16 b2; // at 0xE
u16 a1; // at 0x10
u16 a2; // at 0x12
} AXPBBIQUAD;
typedef struct _AXPBRMTMIX {
u16 vMain0; // at 0x0
u16 vDeltaMain0; // at 0x2
u16 vAux0; // at 0x4
u16 vDeltaAux0; // at 0x6
u16 vMain1; // at 0x8
u16 vDeltaMain1; // at 0xA
u16 vAux1; // at 0xC
u16 vDeltaAux1; // at 0xE
u16 vMain2; // at 0x10
u16 vDeltaMain2; // at 0x12
u16 vAux2; // at 0x14
u16 vDeltaAux2; // at 0x16
u16 vMain3; // at 0x18
u16 vDeltaMain3; // at 0x1A
u16 vAux3; // at 0x1C
u16 vDeltaAux3; // at 0x1E
} AXPBRMTMIX;
typedef struct _AXPBRMTDPOP {
s16 aMain0; // at 0x0
s16 aMain1; // at 0x2
s16 aMain2; // at 0x4
s16 aMain3; // at 0x6
s16 aAux0; // at 0x8
s16 aAux1; // at 0xA
s16 aAux2; // at 0xC
s16 aAux3; // at 0xE
} AXPBRMTDPOP;
typedef struct _AXPBRMTSRC {
u16 currentAddressFrac; // at 0x0
u16 last_samples[4]; // at 0x2
} AXPBRMTSRC;
typedef union __AXPBRMTIIR {
AXPBLPF lpf;
AXPBBIQUAD biquad;
} AXPBRMTIIR;
typedef struct _AXPB {
u16 nextHi; // at 0x0
u16 nextLo; // at 0x2
u16 currHi; // at 0x4
u16 currLo; // at 0x6
u16 srcSelect; // at 0x8
u16 coefSelect; // at 0xA
u32 mixerCtrl; // at 0xC
u16 state; // at 0x10
u16 type; // at 0x12
AXPBMIX mix; // at 0x14
AXPBITD itd; // at 0x44
AXPBDPOP dpop; // at 0x52
AXPBVE ve; // at 0x6A
AXPBADDR addr; // at 0x6E
AXPBADPCM adpcm; // at 0x7E
AXPBSRC src; // at 0xA6
AXPBADPCMLOOP adpcmLoop; // at 0xB4
AXPBLPF lpf; // at 0xBA
AXPBBIQUAD biquad; // at 0xC2
u16 remote; // at 0xD6
u16 rmtMixerCtrl; // at 0xD8
AXPBRMTMIX rmtMix; // at 0xDA
AXPBRMTDPOP rmtDpop; // at 0xFA
AXPBRMTSRC rmtSrc; // at 0x10A
AXPBRMTIIR rmtIIR; // at 0x114
u8 padding[0x140 - 0x128]; // at 0x128
} AXPB;
#ifdef __cplusplus
}
#endif
#endif