mirror of
https://github.com/pret/pokediamond.git
synced 2026-08-06 10:43:24 -05:00
115 lines
2.2 KiB
C
115 lines
2.2 KiB
C
#ifndef GUARD_SND_EXCHANNEL_SHARED_H
|
|
#define GUARD_SND_EXCHANNEL_SHARED_H
|
|
|
|
#include "nitro/types.h"
|
|
|
|
#define SND_ENV_ATTACK 0
|
|
#define SND_ENV_DECAY 1
|
|
#define SND_ENV_SUSTAIN 2
|
|
#define SND_ENV_RELEASE 3
|
|
|
|
#define SND_CHN_TYPE_PCM 0
|
|
#define SND_CHN_TYPE_PSG 1
|
|
#define SND_CHN_TYPE_NOISE 2
|
|
|
|
#define SND_CHN_SYNC_START 0x1
|
|
#define SND_CHN_SYNC_STOP 0x2
|
|
#define SND_CHN_SYNC_TIMER 0x4
|
|
#define SND_CHN_SYNC_VOLUME 0x8
|
|
#define SND_CHN_SYNC_PAN 0x10
|
|
|
|
#define SND_LFO_PITCH 0
|
|
#define SND_LFO_VOLUME 1
|
|
#define SND_LFO_PAN 2
|
|
|
|
struct SNDWaveParam
|
|
{
|
|
u8 format; // 0x0
|
|
u8 loopEnabled; // 0x1
|
|
u16 samplerate; // 0x2
|
|
u16 timer; // 0x4
|
|
u16 loopStart; // 0x6
|
|
u32 loopLength; // 0x8
|
|
}; // size = 0xC
|
|
|
|
struct SNDLfoParam
|
|
{
|
|
u8 target; // 0x0
|
|
u8 speed; // 0x1
|
|
u8 depth; // 0x2
|
|
u8 range; // 0x3
|
|
u16 delay; // 0x4
|
|
}; // size = 0x6
|
|
|
|
struct SNDLfo
|
|
{
|
|
struct SNDLfoParam param; // 0x0
|
|
u16 delayCounter; // 0x6
|
|
u16 counter; // 0x8
|
|
}; // size = 0xA
|
|
|
|
struct SNDExChannel;
|
|
|
|
typedef void (*SNDExChannelCallback)(struct SNDExChannel *chn, int status, void *userData);
|
|
|
|
struct SNDExChannel
|
|
{
|
|
u8 id; // 0x00
|
|
u8 type; // 0x01
|
|
u8 envStatus; // 0x02
|
|
|
|
struct
|
|
{
|
|
u8 active : 1;
|
|
u8 start : 1;
|
|
u8 autoSweep : 1;
|
|
u8 syncFlag : 5;
|
|
} flags; // 0x03
|
|
|
|
u8 panRange; // 0x04
|
|
u8 rootMidiKey; // 0x05
|
|
s16 userDecay2; // 0x06
|
|
|
|
u8 midiKey; // 0x08
|
|
u8 velocity; // 0x09
|
|
s8 initPan; // 0x0A
|
|
s8 userPan; // 0x0B
|
|
|
|
s16 userDecay; // 0x0C
|
|
s16 userPitch; // 0x0E
|
|
|
|
s32 envAttenuation; // 0x10
|
|
s32 sweepCounter; // 0x14
|
|
s32 sweepLength; // 0x18
|
|
|
|
u8 envAttack; // 0x1C
|
|
u8 envSustain; // 0x1D
|
|
u16 envDecay; // 0x1E
|
|
u16 envRelease; // 0x20
|
|
u8 priority; // 0x22
|
|
u8 pan; // 0x23
|
|
u16 volume; // 0x24
|
|
u16 timer; // 0x26
|
|
|
|
struct SNDLfo lfo; // 0x28
|
|
|
|
s16 sweepPitch; // 0x32
|
|
|
|
s32 length; // 0x34
|
|
|
|
struct SNDWaveParam waveParam; // 0x38
|
|
|
|
union
|
|
{
|
|
const void *waveDataPtr;
|
|
s32 dutyCycle;
|
|
}; // 0x44
|
|
|
|
SNDExChannelCallback callback; // 0x48
|
|
void *callbackUserData; // 0x4C
|
|
|
|
struct SNDExChannel *channelLLNext; // 0x50
|
|
}; // size = 0x54
|
|
|
|
#endif // GUARD_SND_EXCHANNEL_SHARED_H
|