typedef struct _AXPBADPCM
{
u16 a[8][2]; // coef table a1[0],a2[0],a1[1],a2[1]....
u16 gain; // Gain to apply (ADPCM: 0 PCM8: 0x0800 PCM16: 0x0100)
u16 pred_scale; // predictor / scale combination (nibbles, as in hardware)
u16 yn1; // y[n - 1]
u16 yn2; // y[n - 2]
} AXPBADPCM;
The adpcm values specify the coefficients and processing context for playback of ADPCM-encoded samples.
The decoding coefficients must be stored in the coefficient table a[][]. The initial-state values for the predictor, scale, and histories must be stored in pred_scale, yn1, and yn2. These values are provided by the GameCube's DSP ADPCM encoding tool. See "DSPADPCM" in the Nintendo Revolution Audio Programmer's Guide for more details.
Values to be stored in a[ ][ ] are stored as coef[] in the header of the output data from DSPADPCM. Here's how a[ ][ ] corresponds to coef[]:
a[0][0] = coef[0]; a[0][1] = coef[1]; a[1][0] = coef[2]; a[1][1] = coef[3]; a[2][0] = coef[4]; a[2][1] = coef[5]; a[3][0] = coef[6]; a[3][1] = coef[7]; a[4][0] = coef[8]; a[4][1] = coef[9]; a[5][0] = coef[10]; a[5][1] = coef[11]; a[6][0] = coef[12]; a[6][1] = coef[13]; a[7][0] = coef[14]; a[7][1] = coef[15];
The gain must be set to 0x0800 and all other parameters set to zero, for 16-bit PCM samples. The gain must be set to 0x0100 for 8-bit PCM. Once these parameters have been initialized, they must not be modified for the remainder of the voice's lifetime. This applies to all sample types.
Assert the AX_SYNC_USER_ADPCM bit to the axvpb.sync member to change these values.
2006/03/01 Initial version.
CONFIDENTIAL