1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
#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
|