SSBM Decomp
Loading...
Searching...
No Matches
synth.c File Reference
#include "synth.h"
#include <math.h>
#include <placeholder.h>
#include <string.h>
#include "debug.h"
#include "devcom.h"
#include <dolphin/ai.h>
#include <dolphin/ar.h>
#include <dolphin/ax.h>
#include <dolphin/os.h>

Data Structures

struct  HSD_SynthSFXGroup
 Named after the assertion text pooled in this TU's .data. More...
struct  HSD_SynthSFXNode
struct  HSD_SynthSFXNode::HSD_SynthSFXNode_user_vol
union  HSD_SynthSFXNode::HSD_SynthSFXNode_user_vol::HSD_SynthSFXNode_user_vol_x8
struct  HSD_Synth_804C2A60_t
struct  voicelist_1784_t
struct  pstHakoHeader_t
struct  SfxLoadStreamNode
struct  foo

Macros

#define USERVOL_NUM   2
#define HSD_SYNTHSFXGROUP_MAX   0x100
#define SFX_VOICE(i)

Functions

static int HSD_Synth_80389334 (int sfx_id, u8 vol, u8 vol2, u8 pan, int priority, int itd_flag, float pitch1, float pitch2, float mix_main, float mix_auxA, float mix_auxB)
void * HSD_AudioMalloc (size_t size)
void HSD_AudioFree (void *ptr)
static s32 SfxLoadStreamDataSize (s32 size)
static void HSD_SynthSFXSampleLoadCallback (int result, uintptr_t args, void *addr, bool cancelflag)
static void HSD_SynthSFXHeaderLoadCallback (int result, uintptr_t args, void *addr, bool cancelflag)
void HSD_SynthSFXLoadNewProc (void)
int HSD_SynthSFXLoad (const char *filename, int bankID, void(*cb)(int, int), int mode)
void HSD_SynthSFXWaitForLoadCompletion (void(*callback)(void))
int HSD_SynthSFXGetPendingLoadCount (void)
int HSD_SynthSFXCancelLoad (int entrynum)
void HSD_SynthSFXAllocateBank (int size)
static void HSD_SynthSFXGroupDataUnlink (AXVPB *vpb)
void HSD_SynthSFXUnloadBank (int bank_id)
void HSD_SynthSFXDataUnlink (int sfx_id)
void HSD_SynthSFXGroupDataRemove (int sfx_id)
static void HSD_SynthSFXGroupDataReaddressCallback (int result, uintptr_t args, void *addr, bool cancelflag)
void HSD_SynthSFXGroupDataReaddress (AXVPB *arg0, void *callback)
void HSD_SynthSFXBankDeflag (int bank_id)
void HSD_SynthSFXBankDeflagSync (void)
u32 HSD_SynthGetSoundMode (void)
void HSD_SynthSetSoundMode (int mode)
void HSD_SynthSFXStopNode (struct HSD_SynthSFXNode *node)
void dropcallback (void *dropped)
static struct HSD_SynthSFXNode * getNode (int sfx_id)
bool HSD_SynthSFXPlayWithGroup (int sfx_id, u8 vol, u8 vol2, u8 pan, int priority, int itd_flag, int group, f32 pitch1, f32 pitch2, f32 mix_main, f32 mix_auxA, f32 mix_auxB)
static void freeVoices (struct HSD_SynthSFXNode *node)
void HSD_SynthSFXKeyOff (int id)
static void stopRange (size_t lo, size_t hi)
void HSD_SynthSFXStopRange (int bank_id)
void HSD_SynthSFXPause (int sfx_id)
void HSD_SynthSFXResume (int sfx_id)
int HSD_SynthSFXCheck (int sfx_id)
void HSD_SynthSFXSetVolumeFade (int sfx_id, u8 vol, int flag)
void HSD_SynthSFXSetPan (int sfx_id, u8 vol)
void HSD_SynthSFXSetMix (int sfx_id, float mix_main, float mix_auxA, float mix_auxB)
void HSD_SynthSFXUpdatePitch (struct HSD_SynthSFXNode *node)
void HSD_SynthSFXSetPitchRatio (int sfx_id, int flag, float ratio)
void HSD_SynthSFXSetPriority (int id, int prio)
static int user_vol_dst_offset (int k)
static int user_vol_src_offset (int k)
s32 HSD_SynthSFXVolumeEnvelope (void)
void HSD_SynthSFXUpdateVolume (struct HSD_SynthSFXNode *node)
static void my_memzero (void *dst_raw, size_t size)
void HSD_SynthSFXUpdateMix (struct HSD_SynthSFXNode *node, int interpolate)
static void updateAllVolume (u32 mask)
void HSD_SynthSFXUpdateAllVolume (int vol, u16 fade_frames, int channel)
void HSD_SynthSFXSetDriverInactivatedCallback (UNK_T callback)
void HSD_SynthSFXSetDriverMasterClockCallback (UNK_T callback)
void HSD_SynthSFXSetDriverPauseCallback (void(*callback)(s32))
void HSD_SynthCallback (void)
void HSD_SynthResetStreamCounters (int result, uintptr_t args, void *buf, bool b)
void HSD_SynthPStreamHakoHeaderCallback (int dcReq, uintptr_t src, void *buf, bool cancelflag)
static void HSD_SynthPStreamMasterClockCallback_inline (u32 pos)
void HSD_SynthPStreamMasterClockCallback (void)
void HSD_SynthPStreamFirstHakoDataCallback (void)
void HSD_SynthPStreamFirstHakoHeaderCallback (int dcReq, uintptr_t args, void *buf, bool cancelflag)
void HSD_SynthPStreamHeaderCallback (int arg0, uintptr_t arg1, void *arg2, bool cancelflag)
static void HSD_SynthPStreamStart_inline (void)
int HSD_SynthPStreamStart (int entrynum, u8 vol, u8 vol2, int channel)
void HSD_SynthStreamSetVolume (f32 volume)
void HSD_SynthInit (int dsp_size, int voices, int stream_size, int bank_size)

Variables

OSHeapHandle HSD_Synth_804D6018 = -1
 audio heap
static AXVPB * voicelist [0x100/4]
static void * hsd_SynthSFXDataHash [0x80/4]
static struct HSD_Synth_804C2A60_t HSD_Synth_804C2A60 [6]
static u32 hsd_SynthSFXLoadBuf [0x20/4]
static AXVPB * HSD_Synth_804C2AE0 [0x80/4]
static int hsd_SynthSFXBank [0x80/4]
static int hsd_SynthSFXBankHead [0x84/4]
static struct HSD_SynthSFXNode hsd_SynthSFXNodes [0x40]
static struct voicelist_1784_t voicelist_1784 [0xC0/0xC]
static int voicelist_1844 [HSD_SYNTHSFXGROUP_MAX]
static u8 lbl_804C4524 [0x1C]
static struct pstHakoHeader_t pstHakoHeader [3]
static int HSD_Synth_804D7720
static int hsd_SynthSFXBankNum
static u32 hsd_SynthSFXBankAREnd
static volatile int HSD_Synth_804D772C
static struct SfxLoadStreamNode * HSD_Synth_804D7730
static u32 * HSD_Synth_804D7734
static int HSD_Synth_804D7738
static volatile int sfxGroupDataReaddressCounter
static void(* driverInactivatedCallback )(int)
static void(* driverMasterClockCallback )(int)
static void(* driverPauseCallback )(s32)
static struct HSD_SynthSFXNode * HSD_Synth_804D774C
static int HSD_Synth_804D7750
static u32 HSD_Synth_804D7754
static u32 HSD_Synth_804D7758
static int HSD_Synth_804D775C
static int HSD_Synth_804D7760
static s32 HSD_Synth_804D7764
static u32 HSD_Synth_804D7768
static u32 HSD_Synth_804D776C
static u32 HSD_Synth_804D7770
static u32 HSD_Synth_804D7774
static volatile u8 HSD_Synth_804D7778
static s32 HSD_Synth_804D777C
static u32 HSD_Synth_804D7780
static u32 HSD_Synth_804D7784
static int HSD_Synth_804D6028 [2] = { 0 }
static float HSD_Synth_804D6030 = 1.0f
static AXPBMIX lbl_80407FB4 = { 0 }
static AXPBSRC HSD_Synth_80407FD8 = { 1, 0, 0, { 0, 0, 0, 0 } }
static u8 lbl_8040806C []
static u8 HSD_Synth_804080FC [0x44] = { 0 }

Macro Definition Documentation

◆ USERVOL_NUM

#define USERVOL_NUM   2

◆ HSD_SYNTHSFXGROUP_MAX

#define HSD_SYNTHSFXGROUP_MAX   0x100

◆ SFX_VOICE

#define SFX_VOICE ( i)
Value:
((struct foo*) ((u8*) sfx_entry + (i) * 0x40))
unsigned char u8
Definition types.h:5
Definition synth.c:609
Remarks
The per-voice blocks of an SFX entry are 0x40 apart, which is less than the AX structures they carry.

Function Documentation

◆ HSD_Synth_80389334()

int HSD_Synth_80389334 ( int sfx_id,
u8 vol,
u8 vol2,
u8 pan,
int priority,
int itd_flag,
float pitch1,
float pitch2,
float mix_main,
float mix_auxA,
float mix_auxB )
static

◆ HSD_AudioMalloc()

void * HSD_AudioMalloc ( size_t size)

◆ HSD_AudioFree()

void HSD_AudioFree ( void * ptr)

◆ SfxLoadStreamDataSize()

s32 SfxLoadStreamDataSize ( s32 size)
inlinestatic

◆ HSD_SynthSFXSampleLoadCallback()

void HSD_SynthSFXSampleLoadCallback ( int result,
uintptr_t args,
void * addr,
bool cancelflag )
static

◆ HSD_SynthSFXHeaderLoadCallback()

void HSD_SynthSFXHeaderLoadCallback ( int result,
uintptr_t args,
void * addr,
bool cancelflag )
static

◆ HSD_SynthSFXLoadNewProc()

void HSD_SynthSFXLoadNewProc ( void )

◆ HSD_SynthSFXLoad()

int HSD_SynthSFXLoad ( const char * filename,
int bankID,
void(* cb )(int, int),
int mode )

◆ HSD_SynthSFXWaitForLoadCompletion()

void HSD_SynthSFXWaitForLoadCompletion ( void(* callback )(void))

◆ HSD_SynthSFXGetPendingLoadCount()

int HSD_SynthSFXGetPendingLoadCount ( void )

◆ HSD_SynthSFXCancelLoad()

int HSD_SynthSFXCancelLoad ( int entrynum)

◆ HSD_SynthSFXAllocateBank()

void HSD_SynthSFXAllocateBank ( int size)

◆ HSD_SynthSFXGroupDataUnlink()

void HSD_SynthSFXGroupDataUnlink ( AXVPB * vpb)
static

◆ HSD_SynthSFXUnloadBank()

void HSD_SynthSFXUnloadBank ( int bank_id)

◆ HSD_SynthSFXDataUnlink()

void HSD_SynthSFXDataUnlink ( int sfx_id)

◆ HSD_SynthSFXGroupDataRemove()

void HSD_SynthSFXGroupDataRemove ( int sfx_id)
Todo
AXVPB prev must be a signed int type, not a pointer

◆ HSD_SynthSFXGroupDataReaddressCallback()

void HSD_SynthSFXGroupDataReaddressCallback ( int result,
uintptr_t args,
void * addr,
bool cancelflag )
static

◆ HSD_SynthSFXGroupDataReaddress()

void HSD_SynthSFXGroupDataReaddress ( AXVPB * arg0,
void * callback )

◆ HSD_SynthSFXBankDeflag()

void HSD_SynthSFXBankDeflag ( int bank_id)

◆ HSD_SynthSFXBankDeflagSync()

void HSD_SynthSFXBankDeflagSync ( void )

◆ HSD_SynthGetSoundMode()

u32 HSD_SynthGetSoundMode ( void )

◆ HSD_SynthSetSoundMode()

void HSD_SynthSetSoundMode ( int mode)

◆ HSD_SynthSFXStopNode()

void HSD_SynthSFXStopNode ( struct HSD_SynthSFXNode * node)

◆ dropcallback()

void dropcallback ( void * dropped)

Search voicelist queue for this voice and remove it

Secondary voice - follow to primary node

◆ getNode()

struct HSD_SynthSFXNode * getNode ( int sfx_id)
inlinestatic

◆ HSD_SynthSFXPlayWithGroup()

bool HSD_SynthSFXPlayWithGroup ( int sfx_id,
u8 vol,
u8 vol2,
u8 pan,
int priority,
int itd_flag,
int group,
f32 pitch1,
f32 pitch2,
f32 mix_main,
f32 mix_auxA,
f32 mix_auxB )

◆ freeVoices()

void freeVoices ( struct HSD_SynthSFXNode * node)
inlinestatic

◆ HSD_SynthSFXKeyOff()

void HSD_SynthSFXKeyOff ( int id)

◆ stopRange()

void stopRange ( size_t lo,
size_t hi )
inlinestatic

◆ HSD_SynthSFXStopRange()

void HSD_SynthSFXStopRange ( int bank_id)

◆ HSD_SynthSFXPause()

void HSD_SynthSFXPause ( int sfx_id)

◆ HSD_SynthSFXResume()

void HSD_SynthSFXResume ( int sfx_id)

◆ HSD_SynthSFXCheck()

int HSD_SynthSFXCheck ( int sfx_id)

◆ HSD_SynthSFXSetVolumeFade()

void HSD_SynthSFXSetVolumeFade ( int sfx_id,
u8 vol,
int flag )

◆ HSD_SynthSFXSetPan()

void HSD_SynthSFXSetPan ( int sfx_id,
u8 vol )

◆ HSD_SynthSFXSetMix()

void HSD_SynthSFXSetMix ( int sfx_id,
float mix_main,
float mix_auxA,
float mix_auxB )

◆ HSD_SynthSFXUpdatePitch()

void HSD_SynthSFXUpdatePitch ( struct HSD_SynthSFXNode * node)

◆ HSD_SynthSFXSetPitchRatio()

void HSD_SynthSFXSetPitchRatio ( int sfx_id,
int flag,
float ratio )

◆ HSD_SynthSFXSetPriority()

void HSD_SynthSFXSetPriority ( int id,
int prio )

◆ user_vol_dst_offset()

int user_vol_dst_offset ( int k)
inlinestatic

◆ user_vol_src_offset()

int user_vol_src_offset ( int k)
inlinestatic

◆ HSD_SynthSFXVolumeEnvelope()

s32 HSD_SynthSFXVolumeEnvelope ( void )

◆ HSD_SynthSFXUpdateVolume()

void HSD_SynthSFXUpdateVolume ( struct HSD_SynthSFXNode * node)

◆ my_memzero()

void my_memzero ( void * dst_raw,
size_t size )
inlinestatic

◆ HSD_SynthSFXUpdateMix()

void HSD_SynthSFXUpdateMix ( struct HSD_SynthSFXNode * node,
int interpolate )

◆ updateAllVolume()

void updateAllVolume ( u32 mask)
inlinestatic

◆ HSD_SynthSFXUpdateAllVolume()

void HSD_SynthSFXUpdateAllVolume ( int vol,
u16 fade_frames,
int channel )

◆ HSD_SynthSFXSetDriverInactivatedCallback()

void HSD_SynthSFXSetDriverInactivatedCallback ( UNK_T callback)

◆ HSD_SynthSFXSetDriverMasterClockCallback()

void HSD_SynthSFXSetDriverMasterClockCallback ( UNK_T callback)

◆ HSD_SynthSFXSetDriverPauseCallback()

void HSD_SynthSFXSetDriverPauseCallback ( void(* callback )(s32))

◆ HSD_SynthCallback()

void HSD_SynthCallback ( void )

◆ HSD_SynthResetStreamCounters()

void HSD_SynthResetStreamCounters ( int result,
uintptr_t args,
void * buf,
bool b )

◆ HSD_SynthPStreamHakoHeaderCallback()

void HSD_SynthPStreamHakoHeaderCallback ( int dcReq,
uintptr_t src,
void * buf,
bool cancelflag )

◆ HSD_SynthPStreamMasterClockCallback_inline()

void HSD_SynthPStreamMasterClockCallback_inline ( u32 pos)
inlinestatic

◆ HSD_SynthPStreamMasterClockCallback()

void HSD_SynthPStreamMasterClockCallback ( void )

◆ HSD_SynthPStreamFirstHakoDataCallback()

void HSD_SynthPStreamFirstHakoDataCallback ( void )

◆ HSD_SynthPStreamFirstHakoHeaderCallback()

void HSD_SynthPStreamFirstHakoHeaderCallback ( int dcReq,
uintptr_t args,
void * buf,
bool cancelflag )

◆ HSD_SynthPStreamHeaderCallback()

void HSD_SynthPStreamHeaderCallback ( int arg0,
uintptr_t arg1,
void * arg2,
bool cancelflag )

◆ HSD_SynthPStreamStart_inline()

void HSD_SynthPStreamStart_inline ( void )
inlinestatic

◆ HSD_SynthPStreamStart()

int HSD_SynthPStreamStart ( int entrynum,
u8 vol,
u8 vol2,
int channel )

◆ HSD_SynthStreamSetVolume()

void HSD_SynthStreamSetVolume ( f32 volume)

◆ HSD_SynthInit()

void HSD_SynthInit ( int dsp_size,
int voices,
int stream_size,
int bank_size )

Loop unrolled to match original binary (loop version adds 8 bytes to stack frame due to compiler allocating space for the counter)

Variable Documentation

◆ HSD_Synth_804D6018

OSHeapHandle HSD_Synth_804D6018 = -1

audio heap

◆ voicelist

AXVPB* voicelist[0x100/4]
static

◆ hsd_SynthSFXDataHash

void* hsd_SynthSFXDataHash[0x80/4]
static

◆ HSD_Synth_804C2A60

struct HSD_Synth_804C2A60_t HSD_Synth_804C2A60[6]
static

◆ hsd_SynthSFXLoadBuf

u32 hsd_SynthSFXLoadBuf[0x20/4]
static

◆ HSD_Synth_804C2AE0

AXVPB* HSD_Synth_804C2AE0[0x80/4]
static

◆ hsd_SynthSFXBank

int hsd_SynthSFXBank[0x80/4]
static

◆ hsd_SynthSFXBankHead

int hsd_SynthSFXBankHead[0x84/4]
static

◆ hsd_SynthSFXNodes

struct HSD_SynthSFXNode hsd_SynthSFXNodes[0x40]
static

◆ voicelist_1784

struct voicelist_1784_t voicelist_1784[0xC0 / 0xC]
static

◆ voicelist_1844

int voicelist_1844[HSD_SYNTHSFXGROUP_MAX]
static

◆ lbl_804C4524

u8 lbl_804C4524[0x1C]
static

◆ pstHakoHeader

struct pstHakoHeader_t pstHakoHeader[3]
static

◆ HSD_Synth_804D7720

int HSD_Synth_804D7720
static

◆ hsd_SynthSFXBankNum

int hsd_SynthSFXBankNum
static

◆ hsd_SynthSFXBankAREnd

u32 hsd_SynthSFXBankAREnd
static

◆ HSD_Synth_804D772C

volatile int HSD_Synth_804D772C
static

◆ HSD_Synth_804D7730

struct SfxLoadStreamNode* HSD_Synth_804D7730
static

◆ HSD_Synth_804D7734

u32* HSD_Synth_804D7734
static

◆ HSD_Synth_804D7738

int HSD_Synth_804D7738
static

◆ sfxGroupDataReaddressCounter

volatile int sfxGroupDataReaddressCounter
static

◆ driverInactivatedCallback

void(* driverInactivatedCallback) (int) ( int )
static

◆ driverMasterClockCallback

void(* driverMasterClockCallback) (int) ( int )
static

◆ driverPauseCallback

void(* driverPauseCallback) (s32) ( s32 )
static

◆ HSD_Synth_804D774C

struct HSD_SynthSFXNode* HSD_Synth_804D774C
static

◆ HSD_Synth_804D7750

int HSD_Synth_804D7750
static

◆ HSD_Synth_804D7754

u32 HSD_Synth_804D7754
static

◆ HSD_Synth_804D7758

u32 HSD_Synth_804D7758
static

◆ HSD_Synth_804D775C

int HSD_Synth_804D775C
static

◆ HSD_Synth_804D7760

int HSD_Synth_804D7760
static

◆ HSD_Synth_804D7764

s32 HSD_Synth_804D7764
static

◆ HSD_Synth_804D7768

u32 HSD_Synth_804D7768
static

◆ HSD_Synth_804D776C

u32 HSD_Synth_804D776C
static

◆ HSD_Synth_804D7770

u32 HSD_Synth_804D7770
static

◆ HSD_Synth_804D7774

u32 HSD_Synth_804D7774
static

◆ HSD_Synth_804D7778

volatile u8 HSD_Synth_804D7778
static

◆ HSD_Synth_804D777C

s32 HSD_Synth_804D777C
static

◆ HSD_Synth_804D7780

u32 HSD_Synth_804D7780
static

◆ HSD_Synth_804D7784

u32 HSD_Synth_804D7784
static

◆ HSD_Synth_804D6028

int HSD_Synth_804D6028[2] = { 0 }
static

◆ HSD_Synth_804D6030

float HSD_Synth_804D6030 = 1.0f
static

◆ lbl_80407FB4

AXPBMIX lbl_80407FB4 = { 0 }
static

◆ HSD_Synth_80407FD8

AXPBSRC HSD_Synth_80407FD8 = { 1, 0, 0, { 0, 0, 0, 0 } }
static

◆ lbl_8040806C

u8 lbl_8040806C[]
static
Initial value:
= {
0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04,
0x05, 0x05, 0x06, 0x06, 0x07, 0x07, 0x08, 0x08, 0x09, 0x09, 0x0A, 0x0A,
0x0B, 0x0B, 0x0C, 0x0C, 0x0D, 0x0D, 0x0E, 0x0E, 0x0F, 0x0F, 0x10, 0x10,
0x11, 0x11, 0x12, 0x12, 0x13, 0x13, 0x14, 0x14, 0x15, 0x15, 0x16, 0x16,
0x16, 0x17, 0x17, 0x17, 0x17, 0x18, 0x18, 0x18, 0x18, 0x19, 0x19, 0x19,
0x19, 0x19, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B,
0x1B, 0x1B, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1D,
0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1E, 0x1E, 0x1E, 0x1E,
0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
}

◆ HSD_Synth_804080FC

u8 HSD_Synth_804080FC[0x44] = { 0 }
static
Remarks
Nothing in the DOL references this; it is recovered from the tail of this TU's .data.