mirror of
https://github.com/zeldaret/ss
synced 2026-07-02 12:05:54 -04:00
f7884242c7
Co-authored-by: kiwi515 <49212064+kiwi515@users.noreply.github.com>
66 lines
1.7 KiB
C++
66 lines
1.7 KiB
C++
#ifndef NW4R_SND_AX_VOICE_MANAGER_H
|
|
#define NW4R_SND_AX_VOICE_MANAGER_H
|
|
|
|
/*******************************************************************************
|
|
* headers
|
|
*/
|
|
|
|
#include "common.h" // u32
|
|
|
|
#include "nw4r/snd/snd_AxVoice.h"
|
|
|
|
/*******************************************************************************
|
|
* classes and functions
|
|
*/
|
|
|
|
namespace nw4r { namespace snd { namespace detail
|
|
{
|
|
// [R89JEL]:/bin/RVL/Debug/mainD.elf:.debug::0x2adb3b
|
|
class AxVoiceManager
|
|
{
|
|
// methods
|
|
public:
|
|
// instance accessors
|
|
static AxVoiceManager &GetInstance();
|
|
|
|
// methods
|
|
void Setup(void *mem, u32 memSize);
|
|
void Shutdown();
|
|
|
|
u32 GetRequiredMemSize(int axVoiceCount);
|
|
|
|
AxVoice *AcquireAxVoice(u32 priority, AxVoice::Callback *callback,
|
|
void *callbackData);
|
|
void ReserveForFreeAxVoice(AxVoice *voice);
|
|
void FreeAxVoice(AxVoice *voice);
|
|
void FreeAllReservedAxVoice();
|
|
|
|
private:
|
|
// cdtors
|
|
AxVoiceManager();
|
|
|
|
// methods
|
|
AxVoice *Alloc();
|
|
void ReserveForFree(AxVoice *voice);
|
|
void Free(AxVoice *voice);
|
|
|
|
// static members
|
|
public:
|
|
static int const VOICE_COUNT_MARGIN = 16;
|
|
static const int VOICE_MARGIN = 16;
|
|
static const int VOICE_MAX = AX_VOICE_MAX + VOICE_MARGIN;
|
|
static const int WORK_SIZE_MAX = VOICE_MAX * sizeof(AxVoice);
|
|
|
|
// members
|
|
private:
|
|
AxVoice::LinkList mActiveVoiceList; // size 0x0c, offset 0x00
|
|
AxVoice::LinkList mFreeVoiceList; // size 0x0c, offset 0x0c
|
|
AxVoice::LinkList mFreeReservedVoiceList; // size 0x0c, offset 0x18
|
|
bool mInitialized; // size 0x01, offset 0x24
|
|
/* 3 bytes padding */
|
|
int mVoiceCount; // size 0x04, offset 0x28
|
|
}; // size 0x2c
|
|
}}} // namespace nw4r::snd::detail
|
|
|
|
#endif // NW4R_SND_AX_VOICE_MANAGER_H
|