mirror of
https://github.com/HarbourMasters/SpaghettiKart
synced 2026-06-15 22:50:01 -04:00
157 lines
4.9 KiB
C
157 lines
4.9 KiB
C
#ifndef AUDIO_HEAP_H
|
|
#define AUDIO_HEAP_H
|
|
|
|
#include <libultra/types.h>
|
|
|
|
#include "internal.h"
|
|
|
|
#define SOUND_LOAD_STATUS_NOT_LOADED 0
|
|
#define SOUND_LOAD_STATUS_IN_PROGRESS 1
|
|
#define SOUND_LOAD_STATUS_COMPLETE 2
|
|
#define SOUND_LOAD_STATUS_DISCARDABLE 3
|
|
#define SOUND_LOAD_STATUS_4 4
|
|
#define SOUND_LOAD_STATUS_5 5
|
|
|
|
#define IS_BANK_LOAD_COMPLETE(bankId) GameEngine_IsBankLoaded(bankId)
|
|
#define IS_SEQ_LOAD_COMPLETE(seqId) GameEngine_IsSequenceLoaded(seqId)
|
|
|
|
struct SoundAllocPool {
|
|
u8* start;
|
|
u8* cur;
|
|
u32 size;
|
|
s32 numAllocatedEntries;
|
|
}; // size = 0x10
|
|
|
|
struct SeqOrBankEntry {
|
|
u8* ptr;
|
|
u32 size;
|
|
s16 poolIndex;
|
|
s16 id;
|
|
}; // size = 0xC
|
|
|
|
struct PersistentPool {
|
|
/*0x00*/ u32 numEntries;
|
|
/*0x04*/ struct SoundAllocPool pool;
|
|
/*0x14*/ struct SeqOrBankEntry entries[32];
|
|
}; // size = 0x194
|
|
|
|
struct TemporaryPool {
|
|
/*EU, SH*/
|
|
/*0x00, 0x00*/ u32 nextSide;
|
|
/*0x04, */ struct SoundAllocPool pool;
|
|
/*0x04, pool.start */
|
|
/*0x08, pool.cur */
|
|
/*0x0C, 0x0C pool.size */
|
|
/*0x10, 0x10 pool.numAllocatedEntries */
|
|
/*0x14, */ struct SeqOrBankEntry entries[2];
|
|
/*0x14, 0x14 entries[0].ptr */
|
|
/*0x18, entries[0].size*/
|
|
/*0x1C, 0x1E entries[0].id */
|
|
/*0x20, 0x20 entries[1].ptr */
|
|
/*0x24, entries[1].size*/
|
|
/*0x28, 0x2A entries[1].id */
|
|
}; // size = 0x2C
|
|
|
|
struct SoundMultiPool {
|
|
/*0x000*/ struct PersistentPool persistent;
|
|
/*0x194*/ struct TemporaryPool temporary;
|
|
/* */ u32 pad2[4];
|
|
}; // size = 0x1D0
|
|
|
|
struct Unk1Pool {
|
|
struct SoundAllocPool pool;
|
|
struct SeqOrBankEntry entries[32];
|
|
};
|
|
|
|
struct UnkEntry {
|
|
s8 used;
|
|
s8 medium;
|
|
s8 bankId;
|
|
u32 pad;
|
|
u8* srcAddr;
|
|
u8* dstAddr;
|
|
u32 size;
|
|
};
|
|
|
|
struct UnkPool {
|
|
/*0x00*/ struct SoundAllocPool pool;
|
|
/*0x10*/ struct UnkEntry entries[64];
|
|
/*0x510*/ s32 numEntries;
|
|
/*0x514*/ u32 unk514;
|
|
};
|
|
|
|
struct PoolSplit {
|
|
u32 wantSeq;
|
|
u32 wantBank;
|
|
u32 wantUnused;
|
|
u32 wantCustom;
|
|
}; // size = 0x10
|
|
|
|
struct PoolSplit2 {
|
|
u32 wantPersistent;
|
|
u32 wantTemporary;
|
|
}; // size = 0x8
|
|
|
|
void reset_bank_and_seq_load_status(void);
|
|
void discard_bank(s32 bankId);
|
|
void discard_sequence(s32 seqId);
|
|
void* soundAlloc(struct SoundAllocPool* pool, u32 size);
|
|
void sound_alloc_pool_init(struct SoundAllocPool* pool, void* memAddr, u32 size);
|
|
void persistent_pool_clear(struct PersistentPool* persistent);
|
|
void temporary_pool_clear(struct TemporaryPool* temporary);
|
|
void func_800B90E0(struct SoundAllocPool* pool);
|
|
void sound_init_main_pools(s32);
|
|
void func_800B914C(struct PoolSplit*);
|
|
void seq_and_bank_pool_init(struct PoolSplit2* a);
|
|
void persistent_pools_init(struct PoolSplit* a);
|
|
void temporary_pools_init(struct PoolSplit* a);
|
|
void* alloc_bank_or_seq(struct SoundMultiPool*, s32, s32, s32, s32);
|
|
void* get_bank_or_seq(s32 poolIdx, s32 arg1, s32 id);
|
|
void* get_bank_or_seq_inner(s32 poolIdx, s32 arg1, s32 bankId);
|
|
void func_800B9BE4(f32, f32, u16*);
|
|
void decrease_reverb_gain(void);
|
|
s32 audio_shut_down_and_reset_step(void);
|
|
void audio_reset_session(void);
|
|
void* unk_pool1_lookup(s32 poolIdx, s32 id);
|
|
void func_800BA8B0(s32, s32);
|
|
|
|
extern s32 D_800EA5D0;
|
|
|
|
extern s32 gMaxAudioCmds;
|
|
extern s16 gTempoInternalToExternal;
|
|
extern f32 D_803B7178;
|
|
extern s32 gRefreshRate;
|
|
extern u32 gSampleDmaNumListItems;
|
|
extern struct AudioSessionSettingsEU gAudioSessionPresets[];
|
|
|
|
// Note: In some .asm files D_803AFBC8 has been replaced with gLeftVolRampings
|
|
// That is almost certainly incorrect, but I don't know how to fix it at this point
|
|
extern s16 gVolume; // D_803AFBC0
|
|
extern s8 gUseReverb;
|
|
extern s8 gNumSynthesisReverbs; // D_803AFBC3
|
|
extern struct NoteSubEu* gNoteSubsEu;
|
|
extern struct SoundAllocPool gAudioSessionPool; // D_803AFBC8
|
|
extern struct SoundAllocPool gAudioInitPool; // D_803AFBD8
|
|
extern struct SoundAllocPool gNotesAndBuffersPool;
|
|
extern struct SoundAllocPool gPersistentCommonPool; // D_803AFC28
|
|
extern struct SoundAllocPool gTemporaryCommonPool; // D_803AFC38
|
|
extern struct SoundMultiPool gSeqLoadedPool; // D_803AFC48
|
|
extern struct SoundMultiPool gBankLoadedPool; // D_803AFE18
|
|
extern struct SoundMultiPool gUnusedLoadedPool;
|
|
extern struct Unk1Pool gUnkPool1; // D_803B01B8
|
|
extern struct PoolSplit sSessionPoolSplit; // D_803B0348
|
|
extern struct PoolSplit2 sSeqAndBankPoolSplit; // D_803B0358
|
|
extern struct PoolSplit sPersistentCommonPoolSplit; // D_803B0360;
|
|
extern struct PoolSplit sTemporaryCommonPoolSplit; // D_803B0370;
|
|
extern struct SoundMultiPool gUnusedLoadedPool; // D_803AFFE8
|
|
extern struct SoundAllocPool gSeqAndBankPool; // D_803AFC18
|
|
extern u8 gBankLoadStatus[64]; // D_803B03C0
|
|
extern u8 gUnkLoadStatus[64];
|
|
extern u8 gSeqLoadStatus[256]; // D_803B0400
|
|
extern volatile u8 gAudioResetStatus; // D_803B0500
|
|
extern u8 gAudioResetPresetIdToLoad;
|
|
extern s32 gAudioResetFadeOutFramesLeft; // D_803B0504
|
|
extern struct Note* gNotes;
|
|
|
|
#endif // AUDIO_HEAP_H
|