SSBM Decomp
Loading...
Searching...
No Matches
synth.c File Reference
#include "synth.h"
#include "synth.static.h"
#include <math_ppc.h>
#include <dolphin/ai.h>
#include <dolphin/ar.h>
#include <dolphin/os.h>
#include <sysdolphin/baselib/debug.h>
#include <sysdolphin/baselib/devcom.h>

Data Structures

struct  SfxLoadStreamNode

Functions

static int HSD_Synth_80389334 (int sfx_id, u8 vol, u8 vol2, u8 pan, int priority, u8 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)
void HSD_SynthSFXSampleLoadCallback (int result, int length, void *addr, int cancelflag)
static void HSD_SynthSFXHeaderLoadCallback (int result, int length, void *addr, int cancelflag)
void HSD_SynthSFXLoadNewProc (void)
int HSD_SynthSFXLoad (const char *filename, int bankID, int flags, 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_SynthSFXUnloadBank_inline (AXVPB *vpb)
void HSD_SynthSFXUnloadBank (int bank_id)
void HSD_Synth_80388DC8 (int sfx_id)
void HSD_Synth_80388E08 (int sfx_id)
static void HSD_SynthSFXGroupDataReaddressCallback (void *result, int length, void *addr, int 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_SynthSFXNodegetNode (int sfx_id)
bool HSD_SynthSFXPlayWithGroup (int sfx_id, u8 vol, u8 vol2, u8 pan, int priority, u8 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_SynthSFXSetUserVol (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)
s32 HSD_Synth_8038A000 (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, int length, void *buf, bool b)
void HSD_Synth_8038AD74 (u32 offset, uintptr_t src)
void HSD_Synth_8038ADD0 (void)
void HSD_Synth_8038B120 (void)
void HSD_SynthPStreamFirstHakoHeaderCallback (void)
void HSD_SynthPStreamHeaderCallback (int arg0, int arg1, void *arg2, int cancelflag)
static void HSD_Synth_8038B5AC_inline (void)
int HSD_Synth_8038B5AC (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

void * HSD_Synth_804D7730
u32 * HSD_Synth_804D7734
u8 data_pad [0x2C] = { 0 }
u8 data_pad_2 [0x84] = { 0 }
static AXPBMIX lbl_80407FB4 = { 0 }
static AXPBSRC HSD_Synth_80407FD8 = { 1, 0, 0, { 0, 0, 0, 0 } }
static u8 lbl_8040806C []
s32 HSD_Synth_804D7764
u32 HSD_Synth_804D7770
u32 HSD_Synth_804D7774

Function Documentation

◆ HSD_Synth_80389334()

int HSD_Synth_80389334 ( int sfx_id,
u8 vol,
u8 vol2,
u8 pan,
int priority,
u8 itd_flag,
float pitch1,
float pitch2,
float mix_main,
float mix_auxA,
float mix_auxB )
static
Todo
Currently 95.4% match - register allocation shifted by 1 (r29 reuse for loop counter and computation missing)
Todo
Type pun writes ratioHi+ratioLo as u32; no union in AXPBSRC. Needed for match - AXPBSRC lacks a u32 ratio field.

<

Todo
what is going on here...

◆ HSD_AudioMalloc()

void * HSD_AudioMalloc ( size_t size)

◆ HSD_AudioFree()

void HSD_AudioFree ( void * ptr)

◆ HSD_SynthSFXSampleLoadCallback()

void HSD_SynthSFXSampleLoadCallback ( int result,
int length,
void * addr,
int cancelflag )

◆ HSD_SynthSFXHeaderLoadCallback()

void HSD_SynthSFXHeaderLoadCallback ( int result,
int length,
void * addr,
int cancelflag )
static

◆ HSD_SynthSFXLoadNewProc()

void HSD_SynthSFXLoadNewProc ( void )

◆ HSD_SynthSFXLoad()

int HSD_SynthSFXLoad ( const char * filename,
int bankID,
int flags,
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_SynthSFXUnloadBank_inline()

void HSD_SynthSFXUnloadBank_inline ( AXVPB * vpb)
inlinestatic

◆ HSD_SynthSFXUnloadBank()

void HSD_SynthSFXUnloadBank ( int bank_id)

◆ HSD_Synth_80388DC8()

void HSD_Synth_80388DC8 ( int sfx_id)

◆ HSD_Synth_80388E08()

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

◆ HSD_SynthSFXGroupDataReaddressCallback()

void HSD_SynthSFXGroupDataReaddressCallback ( void * result,
int length,
void * addr,
int 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)
Todo
Currently ~90% match - second loop uses pointer arithmetic instead of indexed store (stwx). Stack frame is 8 bytes too large.

Search HSD_Synth_804C28E0 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,
u8 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_SynthSFXSetUserVol()

void HSD_SynthSFXSetUserVol ( 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 )

◆ HSD_Synth_8038A000()

s32 HSD_Synth_8038A000 ( 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,
int length,
void * buf,
bool b )

◆ HSD_Synth_8038AD74()

void HSD_Synth_8038AD74 ( u32 offset,
uintptr_t src )

◆ HSD_Synth_8038ADD0()

void HSD_Synth_8038ADD0 ( void )

◆ HSD_Synth_8038B120()

void HSD_Synth_8038B120 ( void )

◆ HSD_SynthPStreamFirstHakoHeaderCallback()

void HSD_SynthPStreamFirstHakoHeaderCallback ( void )

◆ HSD_SynthPStreamHeaderCallback()

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

◆ HSD_Synth_8038B5AC_inline()

void HSD_Synth_8038B5AC_inline ( void )
inlinestatic

◆ HSD_Synth_8038B5AC()

int HSD_Synth_8038B5AC ( 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_804D7730

void* HSD_Synth_804D7730
extern

◆ HSD_Synth_804D7734

u32* HSD_Synth_804D7734
extern

◆ data_pad

u8 data_pad[0x2C] = { 0 }

◆ data_pad_2

u8 data_pad_2[0x84] = { 0 }

◆ 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_804D7764

s32 HSD_Synth_804D7764
extern

◆ HSD_Synth_804D7770

u32 HSD_Synth_804D7770
extern

◆ HSD_Synth_804D7774

u32 HSD_Synth_804D7774
extern