Files
2025-05-25 08:53:24 +02:00

84 lines
2.5 KiB
C

#ifndef RVL_SDK_AX_VPB_H
#define RVL_SDK_AX_VPB_H
#include "common.h"
#include "rvl/AX/AXPB.h"
#ifdef __cplusplus
extern "C" {
#endif
#define AX_SAMPLE_RATE 32000
#define AX_VOICE_MAX 96
typedef u32 AXVPBSyncFlags;
enum AXVPBSyncFlags_et
{
AX_VPB_SYNC_FLAG_SRC_TYPE = (1 << 0),
AX_VPB_SYNC_FLAG_MIXER_CTRL = (1 << 1),
AX_VPB_SYNC_FLAG_STATE = (1 << 2),
AX_VPB_SYNC_FLAG_TYPE = (1 << 3),
AX_VPB_SYNC_FLAG_MIX = (1 << 4),
AX_VPB_SYNC_FLAG_ITD = (1 << 5),
AX_VPB_SYNC_FLAG_ITD_TARGET = (1 << 6),
AX_VPB_SYNC_FLAG_DPOP = (1 << 7),
AX_VPB_SYNC_FLAG_VE = (1 << 8),
AX_VPB_SYNC_FLAG_VE_DELTA = (1 << 9),
AX_VPB_SYNC_FLAG_ADDR = 1 << 10,
AX_VPB_SYNC_FLAG_ADDR_LOOP_FLAG = 1 << 11,
AX_VPB_SYNC_FLAG_ADDR_LOOP_ADDR = 1 << 12,
AX_VPB_SYNC_FLAG_ADDR_END_ADDR = 1 << 13,
AX_VPB_SYNC_FLAG_ADDR_CURRENT_ADDR = 1 << 14,
AX_VPB_SYNC_FLAG_ADPCM = 1 << 15,
AX_VPB_SYNC_FLAG_SRC = 1 << 16,
AX_VPB_SYNC_FLAG_SRC_RATIO = 1 << 17,
AX_VPB_SYNC_FLAG_ADPCM_LOOP = 1 << 18,
AX_VPB_SYNC_FLAG_LPF = 1 << 19,
AX_VPB_SYNC_FLAG_LPF_COEFS = 1 << 20,
AX_VPB_SYNC_FLAG_BIQUAD = 1 << 21,
AX_VPB_SYNC_FLAG_BIQUAD_COEFS = 1 << 22,
AX_VPB_SYNC_FLAG_RMT_ON = 1 << 23,
AX_VPB_SYNC_FLAG_RMT_MIXER_CTRL = 1 << 24,
AX_VPB_SYNC_FLAG_RMT_MIX = 1 << 25,
AX_VPB_SYNC_FLAG_RMT_DPOP = 1 << 26,
AX_VPB_SYNC_FLAG_RMT_SRC = 1 << 27,
AX_VPB_SYNC_FLAG_RMT_IIR = 1 << 28,
AX_VPB_SYNC_FLAG_RMT_IIR_LPF_COEFS = 1 << 29,
AX_VPB_SYNC_FLAG_RMT_IIR_BIQUAD_COEFS = 1 << 30,
AX_VPB_SYNC_FLAG_FULL_PB = 1 << 31
};
typedef void (*AXVoiceCallback)(void *voice);
typedef struct _AXVPB {
void *next; // at 0x0
void *prev; // at 0x4
void *next1; // at 0x8
u32 priority; // at 0xC
AXVoiceCallback callback; // at 0x10
u32 userContext; // at 0x14
u32 index; // at 0x18
u32 sync; // at 0x1C
u32 depop; // at 0x20
void *itdBuffer; // at 0x24
AXPB pb; // at 0x28
} AXVPB;
s32 __AXGetNumVoices(void);
void __AXServiceVPB(AXVPB *vpb);
void __AXDumpVPB(AXVPB *vpb);
void __AXSyncPBs(u32 baseCycles);
AXPB *__AXGetPBs(void);
void __AXSetPBDefault(AXVPB *vpb);
void __AXVPBInit(void);
void AXSetVoiceState(AXVPB *vpb, u16 state);
void AXSetVoiceAddr(AXVPB *vpb, AXPBADDR *addr);
void AXGetLpfCoefs(u16 freq, u16 *a, u16 *b);
void AXSetMaxDspCycles(u32 num);
s32 AXGetMaxVoices(void);
#ifdef __cplusplus
}
#endif
#endif