162 lines
4.5 KiB
C
162 lines
4.5 KiB
C
#ifndef __N_AUDIO_INT__
|
|
#define __N_AUDIO_INT__
|
|
#include <ultra64.h>
|
|
#include <n_libaudio.h>
|
|
#include "synthInternals.h"
|
|
#include <n_abi.h>
|
|
|
|
#define SAMPLES 184
|
|
#define SAMPLE184(delta) (((delta) + (SAMPLES / 2)) / SAMPLES) * SAMPLES
|
|
#define FIXED_SAMPLE SAMPLES
|
|
|
|
#define N_AL_DECODER_IN 0
|
|
#define N_AL_RESAMPLER_OUT 0
|
|
#define N_AL_TEMP_0 0
|
|
#define N_AL_DECODER_OUT 368
|
|
#define N_AL_TEMP_1 368
|
|
#define N_AL_TEMP_2 736
|
|
#define N_AL_MAIN_L_OUT 1248
|
|
#define N_AL_MAIN_R_OUT 1616
|
|
#define N_AL_AUX_L_OUT 1984
|
|
#define N_AL_AUX_R_OUT 2352
|
|
|
|
#define N_AL_DIVIDED 368
|
|
|
|
typedef struct N_ALLoadFilter_s{
|
|
u8 pad0[0xC];
|
|
ADPCM_STATE *state; //0xC
|
|
ADPCM_STATE *lstate; //0x10
|
|
ALRawLoop loop; //0x14
|
|
struct ALWaveTable_s *table; //0x20
|
|
s32 bookSize;
|
|
ALDMAproc dma;
|
|
void *dmaState;
|
|
s32 sample;
|
|
s32 lastsam;
|
|
s32 first;
|
|
s32 memin;
|
|
} N_ALLoadFilter;
|
|
|
|
typedef struct N_ALResampler_s {
|
|
//ALFilter filter;
|
|
RESAMPLE_STATE *state;
|
|
f32 ratio;
|
|
s32 upitch;
|
|
f32 delta;
|
|
s32 first;
|
|
} N_ALResampler;
|
|
|
|
typedef struct N_ALEnvMixer_s {
|
|
ENVMIX_STATE *state;
|
|
s16 pan;
|
|
s16 volume;
|
|
s16 cvolL;
|
|
s16 cvolR;
|
|
s16 dryamt;
|
|
s16 wetamt;
|
|
u16 lratl;
|
|
s16 lratm;
|
|
s16 ltgt;
|
|
u16 rratl;
|
|
s16 rratm;
|
|
s16 rtgt;
|
|
s32 delta;
|
|
s32 segEnd;
|
|
s32 first;
|
|
ALParam *ctrlList;
|
|
ALParam *ctrlTail;
|
|
ALFilter **sources;
|
|
s32 motion;
|
|
} N_ALEnvMixer;
|
|
|
|
|
|
typedef struct N_PVoice_s {
|
|
ALLink node;
|
|
struct N_ALVoice_s *vvoice;
|
|
/** ALLoadFilter *********************************/
|
|
ADPCM_STATE *dc_state;
|
|
ADPCM_STATE *dc_lstate;
|
|
ALRawLoop dc_loop;
|
|
struct ALWaveTable_s *dc_table;
|
|
s32 dc_bookSize;
|
|
ALDMAproc dc_dma;
|
|
void *dc_dmaState;
|
|
s32 dc_sample;
|
|
s32 dc_lastsam;
|
|
s32 dc_first;
|
|
s32 dc_memin;
|
|
/** ALResampler *********************************/
|
|
RESAMPLE_STATE *rs_state;
|
|
f32 rs_ratio;
|
|
s32 rs_upitch;
|
|
f32 rs_delta;
|
|
s32 rs_first;
|
|
/** ALEnvMixer *********************************/
|
|
ENVMIX_STATE *em_state;
|
|
s16 em_pan;
|
|
s16 em_volume;
|
|
s16 em_cvolL;
|
|
s16 em_cvolR;
|
|
s16 em_dryamt;
|
|
s16 em_wetamt;
|
|
u16 em_lratl;
|
|
s16 em_lratm;
|
|
s16 em_ltgt;
|
|
u16 em_rratl;
|
|
s16 em_rratm;
|
|
s16 em_rtgt;
|
|
s32 em_delta;
|
|
s32 em_segEnd;
|
|
s32 em_first;
|
|
ALParam *em_ctrlList;
|
|
ALParam *em_ctrlTail;
|
|
s32 em_motion;
|
|
s32 offset;
|
|
} N_PVoice;
|
|
|
|
#define N_AL_MAX_RSP_SAMPLES 184
|
|
|
|
|
|
typedef Acmd *(*N_ALCmdHandler)(s32, Acmd *);
|
|
|
|
typedef struct N_ALFilter_s {
|
|
struct N_ALFilter_s *source;
|
|
N_ALCmdHandler handler;
|
|
ALSetParam setParam;
|
|
s16 inp;
|
|
s16 outp;
|
|
s32 type;
|
|
} N_ALFilter;
|
|
|
|
|
|
typedef struct N_ALMainBus_s {
|
|
N_ALFilter filter;
|
|
} N_ALMainBus;
|
|
|
|
typedef struct N_ALAuxBus_s {
|
|
ALFilter filter;
|
|
s32 sourceCount;
|
|
s32 maxSources;
|
|
N_PVoice **sources;
|
|
ALFx *fx;
|
|
ALFx *fx_array[AL_MAX_AUX_BUS_SOURCES];
|
|
} N_ALAuxBus;
|
|
|
|
extern N_ALSynth *n_syn;
|
|
|
|
/*
|
|
* prototypes for private driver functions
|
|
*/
|
|
ALParam *__n_allocParam(void);
|
|
void __n_freeParam(ALParam *param);
|
|
void _n_freePVoice(N_PVoice *pvoice);
|
|
void _n_collectPVoices();
|
|
|
|
s32 _n_timeToSamples(s32 micros);
|
|
ALMicroTime _n_samplesToTime(s32 samples);
|
|
|
|
int n_alEnvmixerParam(N_PVoice *v, s32 paramId, void* param);
|
|
//n_alLoadParam
|
|
int n_alLoadParam(N_PVoice *v, s32 paramId, void* param);
|
|
#endif
|