audio: Extend the amount of notes that can play at once.

Provided by theclashingfritz
This commit is contained in:
Prince Frizzy 2022-02-15 02:06:18 -08:00 committed by MysterD
parent f565e89c68
commit bd247372ef
9 changed files with 125 additions and 100 deletions

View file

@ -10,30 +10,37 @@ extern struct OSMesgQueue OSMesgQueue3;
#ifdef VERSION_EU
struct ReverbSettingsEU sReverbSettings[] = {
{ 0x04, 0x0c, 0x2fff },
{ 0x04, 0x0a, 0x47ff },
{ 0x04, 0x10, 0x2fff },
{ 0x04, 0x0e, 0x3fff },
{ 0x04, 0x0c, 0x4fff },
{ 0x04, 0x0a, 0x37ff }
{ /*Downsample Rate*/ 0x04, /*Window Size*/ 0x0c, /*Gain*/ 0x2fff },
{ /*Downsample Rate*/ 0x04, /*Window Size*/ 0x0a, /*Gain*/ 0x47ff },
{ /*Downsample Rate*/ 0x04, /*Window Size*/ 0x10, /*Gain*/ 0x2fff },
{ /*Downsample Rate*/ 0x04, /*Window Size*/ 0x0e, /*Gain*/ 0x3fff },
{ /*Downsample Rate*/ 0x04, /*Window Size*/ 0x0c, /*Gain*/ 0x4fff },
{ /*Downsample Rate*/ 0x04, /*Window Size*/ 0x0a, /*Gain*/ 0x37ff },
};
/**
1: Frequency
2: Unk1 - Should be 1
3: Simultaneous Notes
4: Number of Reverberations
5: Unk2 - Should be 0
6: Volume
7: Unk3 - Should be 0
8: Persistent Sequence Memory
9: Persistent Bank Memory
10: Temporary Sequence Memory
11: Temporary Bank Memory
*/
struct AudioSessionSettingsEU gAudioSessionPresets[] = {
{ 0x00007d00, 0x01, 0x10, 0x01, 0x00, &sReverbSettings[0], 0x7fff, 0x0000, 0x00003a40, 0x00006d00,
0x00004400, 0x00002a00 },
{ 0x00007d00, 0x01, 0x10, 0x01, 0x00, &sReverbSettings[1], 0x7fff, 0x0000, 0x00003a40, 0x00006d00,
0x00004400, 0x00002a00 },
{ 0x00007d00, 0x01, 0x10, 0x01, 0x00, &sReverbSettings[2], 0x7fff, 0x0000, 0x00003a40, 0x00006d00,
0x00004400, 0x00002a00 },
{ 0x00007d00, 0x01, 0x10, 0x01, 0x00, &sReverbSettings[3], 0x7fff, 0x0000, 0x00003a40, 0x00006d00,
0x00004400, 0x00002a00 },
{ 0x00007d00, 0x01, 0x10, 0x01, 0x00, &sReverbSettings[4], 0x7fff, 0x0000, 0x00003a40, 0x00006d00,
0x00004400, 0x00002a00 },
{ 0x00007d00, 0x01, 0x10, 0x01, 0x00, &sReverbSettings[0], 0x7fff, 0x0000, 0x00004000, 0x00006e00,
0x00003f00, 0x00002a00 },
{ 0x00007d00, 0x01, 0x10, 0x01, 0x00, &sReverbSettings[1], 0x7fff, 0x0000, 0x00004100, 0x00006e00,
0x00004400, 0x00002a80 },
{ 0x00007d00, 0x01, 0x14, 0x01, 0x00, &sReverbSettings[5], 0x7fff, 0x0000, 0x00003500, 0x00006280,
0x00004000, 0x00001b00 }
{ /*1*/ 0x00007d00, /*2*/ 0x01, /*3*/ 0x20, /*4*/ 0x01, /*5*/ 0x00, &sReverbSettings[0], /*6*/ 0x7fff, /*7*/ 0x0000, /*8*/ 0x0000E800, /*9*/ 0x0000E800, /*10*/ 0x0000E800, /*11*/ 0x0000E800 },
{ /*1*/ 0x00007d00, /*2*/ 0x01, /*3*/ 0x20, /*4*/ 0x01, /*5*/ 0x00, &sReverbSettings[1], /*6*/ 0x7fff, /*7*/ 0x0000, /*8*/ 0x0000E800, /*9*/ 0x0000E800, /*10*/ 0x0000E800, /*11*/ 0x0000E800 },
{ /*1*/ 0x00007d00, /*2*/ 0x01, /*3*/ 0x20, /*4*/ 0x01, /*5*/ 0x00, &sReverbSettings[2], /*6*/ 0x7fff, /*7*/ 0x0000, /*8*/ 0x0000E800, /*9*/ 0x0000E800, /*10*/ 0x0000E800, /*11*/ 0x0000E800 },
{ /*1*/ 0x00007d00, /*2*/ 0x01, /*3*/ 0x20, /*4*/ 0x01, /*5*/ 0x00, &sReverbSettings[3], /*6*/ 0x7fff, /*7*/ 0x0000, /*8*/ 0x0000E800, /*9*/ 0x0000E800, /*10*/ 0x0000E800, /*11*/ 0x0000E800 },
{ /*1*/ 0x00007d00, /*2*/ 0x01, /*3*/ 0x20, /*4*/ 0x01, /*5*/ 0x00, &sReverbSettings[4], /*6*/ 0x7fff, /*7*/ 0x0000, /*8*/ 0x0000E800, /*9*/ 0x0000E800, /*10*/ 0x0000E800, /*11*/ 0x0000E800 },
{ /*1*/ 0x00007d00, /*2*/ 0x01, /*3*/ 0x20, /*4*/ 0x01, /*5*/ 0x00, &sReverbSettings[0], /*6*/ 0x7fff, /*7*/ 0x0000, /*8*/ 0x0000E800, /*9*/ 0x0000E800, /*10*/ 0x0000E800, /*11*/ 0x0000E800 },
{ /*1*/ 0x00007d00, /*2*/ 0x01, /*3*/ 0x20, /*4*/ 0x01, /*5*/ 0x00, &sReverbSettings[1], /*6*/ 0x7fff, /*7*/ 0x0000, /*8*/ 0x0000E800, /*9*/ 0x0000E800, /*10*/ 0x0000E800, /*11*/ 0x0000E800 },
{ /*1*/ 0x00007d00, /*2*/ 0x01, /*3*/ 0x28, /*4*/ 0x01, /*5*/ 0x00, &sReverbSettings[5], /*6*/ 0x7fff, /*7*/ 0x0000, /*8*/ 0x0000E800, /*9*/ 0x0000E800, /*10*/ 0x0000E800, /*11*/ 0x0000E800 },
};
#endif
@ -51,33 +58,33 @@ struct AudioSessionSettingsEU gAudioSessionPresets[] = {
#ifndef VERSION_EU
struct AudioSessionSettings gAudioSessionPresets[18] = {
#ifdef VERSION_JP
{ 32000, 16, 1, 0x0800, 0x2FFF, 0x7FFF, 0x3900, 0x6000, 0x4400, 0x2A00 },
{ 32000, 16, 1, 0x0A00, 0x47FF, 0x7FFF, 0x3900, 0x6000, 0x4400, 0x2A00 },
{ 32000, 16, 1, 0x1000, 0x2FFF, 0x7FFF, 0x3900, 0x6000, 0x4400, 0x2A00 },
{ 32000, 16, 1, 0x0E00, 0x3FFF, 0x7FFF, 0x3900, 0x6000, 0x4400, 0x2A00 },
{ 32000, 16, 1, 0x0C00, 0x4FFF, 0x7FFF, 0x3900, 0x6000, 0x4400, 0x2A00 },
{ 32000, 16, 1, 0x0800, 0x2FFF, 0x7FFF, 0x3E00, 0x6200, 0x3F00, 0x2A00 },
{ 32000, 16, 1, 0x0A00, 0x47FF, 0x7FFF, 0x3F00, 0x6200, 0x4400, 0x2A80 },
{ 32000, 20, 1, 0x0800, 0x37FF, 0x7FFF, 0x3300, 0x5500, 0x4000, 0x1B00 },
{ 32000, 32, 1, 0x0800, 0x2FFF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
{ 32000, 32, 1, 0x0A00, 0x47FF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
{ 32000, 32, 1, 0x1000, 0x2FFF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
{ 32000, 32, 1, 0x0E00, 0x3FFF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
{ 32000, 32, 1, 0x0C00, 0x4FFF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
{ 32000, 32, 1, 0x0800, 0x2FFF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
{ 32000, 32, 1, 0x0A00, 0x47FF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
{ 32000, 40, 1, 0x0800, 0x37FF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
#else
{ 32000, 16, 1, 0x0C00, 0x2FFF, 0x7FFF, 0x7400, 0xA000, 0x7400, 0x7400 },
{ 32000, 16, 1, 0x0A00, 0x47FF, 0x7FFF, 0x7400, 0xA000, 0x7400, 0x7400 },
{ 32000, 16, 1, 0x1000, 0x2FFF, 0x7FFF, 0x7400, 0xA000, 0x7400, 0x7400 },
{ 32000, 16, 1, 0x0E00, 0x3FFF, 0x7FFF, 0x7400, 0xA000, 0x7400, 0x7400 },
{ 32000, 16, 1, 0x0C00, 0x4FFF, 0x7FFF, 0x7400, 0xA000, 0x7400, 0x7400 },
{ 32000, 16, 1, 0x0C00, 0x2FFF, 0x7FFF, 0x7400, 0xA000, 0x7400, 0x7400 },
{ 32000, 16, 1, 0x0A00, 0x47FF, 0x7FFF, 0x7400, 0xA000, 0x7400, 0x7400 },
{ 32000, 20, 1, 0x0800, 0x37FF, 0x7FFF, 0x7400, 0xA000, 0x7400, 0x7400 },
{ 32000, 32, 1, 0x0C00, 0x2FFF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
{ 32000, 32, 1, 0x0A00, 0x47FF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
{ 32000, 32, 1, 0x1000, 0x2FFF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
{ 32000, 32, 1, 0x0E00, 0x3FFF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
{ 32000, 32, 1, 0x0C00, 0x4FFF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
{ 32000, 32, 1, 0x0C00, 0x2FFF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
{ 32000, 32, 1, 0x0A00, 0x47FF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
{ 32000, 40, 1, 0x0800, 0x37FF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
#endif
{ 27000, 16, 1, 0x0800, 0x2FFF, 0x7FFF, 0x7400, 0x7400, 0x7400, 0x7400 },
{ 27000, 16, 1, 0x0800, 0x3FFF, 0x7FFF, 0x7400, 0x7400, 0x7400, 0x7400 },
{ 27000, 16, 1, 0x1000, 0x2FFF, 0x7FFF, 0x7400, 0x7400, 0x7400, 0x7400 },
{ 27000, 16, 1, 0x1000, 0x3FFF, 0x7FFF, 0x7400, 0x7400, 0x7400, 0x7400 },
{ 27000, 16, 1, 0x0C00, 0x4FFF, 0x7FFF, 0x7400, 0x7400, 0x7400, 0x7400 },
{ 32000, 14, 1, 0x0800, 0x2FFF, 0x7FFF, 0x7400, 0x7400, 0x7400, 0x7400 },
{ 32000, 12, 1, 0x0800, 0x2FFF, 0x7FFF, 0x7400, 0x7400, 0x7400, 0x7400 },
{ 32000, 10, 1, 0x0800, 0x2FFF, 0x7FFF, 0x7400, 0x7400, 0x7400, 0x7400 },
{ 32000, 8, 1, 0x0800, 0x2FFF, 0x7FFF, 0x7400, 0x7400, 0x7400, 0x7400 },
{ 27000, 32, 1, 0x0800, 0x2FFF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
{ 27000, 32, 1, 0x0800, 0x3FFF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
{ 27000, 32, 1, 0x1000, 0x2FFF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
{ 27000, 32, 1, 0x1000, 0x3FFF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
{ 27000, 32, 1, 0x0C00, 0x4FFF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
{ 32000, 28, 1, 0x0800, 0x2FFF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
{ 32000, 24, 1, 0x0800, 0x2FFF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
{ 32000, 20, 1, 0x0800, 0x2FFF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
{ 32000, 16, 1, 0x0800, 0x2FFF, 0x7FFF, 0x0000E800, 0x0000E800, 0x0000E800, 0x0000E800 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};
#endif
@ -583,8 +590,8 @@ f32 gVolRampingRhs128[128] = {
s16 gTatumsPerBeat = TATUMS_PER_BEAT;
s8 gUnusedCount80333EE8 = UNUSED_COUNT_80333EE8;
s32 gAudioHeapSize = AUDIO_HEAP_SIZE;
s32 D_80333EF0 = D_80333EF0_VAL;
s32 gAudioHeapSize = DOUBLE_SIZE_ON_64_BIT(AUDIO_HEAP_SIZE);
s32 gAudioInitPoolSize = DOUBLE_SIZE_ON_64_BIT(AUDIO_INIT_POOL_SIZE);
volatile s32 gAudioLoadLock = AUDIO_LOCK_UNINITIALIZED;
#ifdef VERSION_EU

View file

@ -63,7 +63,7 @@ extern f32 gVolRampingRhs128[128];
extern s16 gTatumsPerBeat;
extern s8 gUnusedCount80333EE8;
extern s32 gAudioHeapSize;
extern s32 D_80333EF0; // amount of heap designated to gAudioInitPool, 0x2500
extern s32 gAudioInitPoolSize; // amount of heap designated to gAudioInitPool, 0x2500
extern volatile s32 gAudioLoadLock;
// .bss
@ -92,7 +92,9 @@ extern s32 gRefreshRate;
extern s16 *gAiBuffers[NUMAIBUFFERS];
extern s16 gAiBufferLengths[NUMAIBUFFERS];
#ifdef VERSION_EU
#if defined(VERSION_SH)
#define AIBUFFER_LEN 0xb00
#elif defined(VERSION_EU)
#define AIBUFFER_LEN (0xa0 * 17)
#else
#define AIBUFFER_LEN (0xa0 * 16)
@ -103,16 +105,20 @@ extern u16 gUnused80226E98[0x10];
extern u32 gAudioRandom;
//make my life easier
#ifdef VERSION_EU
#define EXT_AUDIO_HEAP_SIZE 0x27400
#define EXT_AUDIO_INIT_POOL_SIZE 0x02000
#if defined(VERSION_EU) || defined(VERSION_SH)
#define UNUSED_COUNT_80333EE8 24
#define AUDIO_HEAP_SIZE DOUBLE_SIZE_ON_64_BIT(0x2c500)
#define D_80333EF0_VAL DOUBLE_SIZE_ON_64_BIT(0x2c00)
#define AUDIO_HEAP_BASE 0x36B00
#define AUDIO_INIT_POOL_SIZE (0x2c00 + EXT_AUDIO_INIT_POOL_SIZE)
#else
#define UNUSED_COUNT_80333EE8 16
#define AUDIO_HEAP_SIZE DOUBLE_SIZE_ON_64_BIT(0x48000)
#define D_80333EF0_VAL DOUBLE_SIZE_ON_64_BIT(0x2500)
#define AUDIO_HEAP_BASE 0x31150
#define AUDIO_INIT_POOL_SIZE (0x2500 + EXT_AUDIO_INIT_POOL_SIZE)
#endif
// Normal Heap Size, Extended Heap Size, Extended Audio Init Pool Size
#define AUDIO_HEAP_SIZE (AUDIO_HEAP_BASE + EXT_AUDIO_HEAP_SIZE + EXT_AUDIO_INIT_POOL_SIZE)
#endif // AUDIO_DATA_H

View file

@ -198,38 +198,30 @@ void discard_sequence(s32 seqId) {
}
void *soundAlloc(struct SoundAllocPool *pool, u32 size) {
#ifdef VERSION_EU
#if defined(VERSION_EU) || defined(VERSION_SH)
u8 *start;
u8 *pos;
u32 alignedSize = ALIGN16(size);
start = pool->cur;
if (start + alignedSize <= pool->start + pool->size) {
bzero(start, alignedSize);
pool->cur += alignedSize;
for (pos = start; pos < pool->cur; pos++) {
*pos = 0;
}
} else {
fprintf(stderr, "soundAlloc failed: tried to alloc %u bytes (%i free)\n",
ALIGN16(size), pool->start + pool->size - pool->cur);
fprintf(stderr, "soundAlloc failed: tried to alloc %u bytes (%i free)\n", ALIGN16(size), pool->start + pool->size - pool->cur);
return NULL;
}
pool->numAllocatedEntries++;
return start;
#else
u8 *start;
s32 last;
s32 i;
u32 alignedSize = ALIGN16(size);
if ((pool->cur + ALIGN16(size) <= pool->size + pool->start)) {
start = pool->cur;
pool->cur += ALIGN16(size);
last = pool->cur - start - 1;
for (i = 0; i <= last; i++) {
start[i] = 0;
}
u8* start = pool->cur;
if ((start + alignedSize <= pool->size + pool->start)) {
bzero(start, alignedSize);
pool->cur += alignedSize;
} else {
fprintf(stderr, "soundAlloc failed: tried to alloc %u bytes (%i free)\n",
(unsigned int)ALIGN16(size), (int)(pool->start + pool->size - pool->cur));
fprintf(stderr, "soundAlloc failed: tried to alloc %u bytes (%i free)\n", (unsigned int)ALIGN16(size), (int)(pool->start + pool->size - pool->cur));
return NULL;
}
return start;
@ -237,19 +229,23 @@ void *soundAlloc(struct SoundAllocPool *pool, u32 size) {
}
void sound_alloc_pool_init(struct SoundAllocPool *pool, void *memAddr, u32 size) {
pool->cur = pool->start = (u8 *) ALIGN16((uintptr_t) memAddr);
pool->cur = pool->start = (u8*)ALIGN16((uintptr_t)memAddr);
#ifdef VERSION_SH
pool->size = size - ((uintptr_t)memAddr & 0xf);
#else
pool->size = size;
pool->unused = 0;
#endif
pool->numAllocatedEntries = 0;
}
void persistent_pool_clear(struct PersistentPool *persistent) {
persistent->pool.unused = 0;
persistent->pool.numAllocatedEntries = 0;
persistent->pool.cur = persistent->pool.start;
persistent->numEntries = 0;
}
void temporary_pool_clear(struct TemporaryPool *temporary) {
temporary->pool.unused = 0;
temporary->pool.numAllocatedEntries = 0;
temporary->pool.cur = temporary->pool.start;
temporary->nextSide = 0;
temporary->entries[0].ptr = temporary->pool.start;
@ -263,7 +259,7 @@ void temporary_pool_clear(struct TemporaryPool *temporary) {
}
void unused_803160F8(struct SoundAllocPool *pool) {
pool->unused = 0;
pool->numAllocatedEntries = 0;
pool->cur = pool->start;
}

View file

@ -18,7 +18,7 @@ struct SoundAllocPool
u8 *start;
u8 *cur;
u32 size;
s32 unused; // set to 0, never read
s32 numAllocatedEntries;
}; // size = 0x10
struct SeqOrBankEntry {

View file

@ -76,7 +76,7 @@ struct AudioBufferParametersEU gAudioBufferParameters;
s32 gAiFrequency;
#endif
u32 D_80226D68;
u32 sDmaBufSize;
s32 gMaxAudioCmds;
s32 gMaxSimultaneousNotes;
@ -299,13 +299,13 @@ void init_sample_dma_buffers(UNUSED s32 arg0) {
#endif
#ifdef VERSION_EU
D_80226D68 = 0x400;
sDmaBufSize = 0x400 * 4;
for (i = 0; i < gMaxSimultaneousNotes * 3 * gAudioBufferParameters.presetUnk4; i++) {
#else
D_80226D68 = 144 * 9;
sDmaBufSize = (144 * 9) * 4;
for (i = 0; i < gMaxSimultaneousNotes * 3; i++) {
#endif
sSampleDmas[gSampleDmaNumListItems].buffer = soundAlloc(&gNotesAndBuffersPool, D_80226D68);
sSampleDmas[gSampleDmaNumListItems].buffer = soundAlloc(&gNotesAndBuffersPool, sDmaBufSize);
if (sSampleDmas[gSampleDmaNumListItems].buffer == NULL) {
#ifdef VERSION_EU
break;
@ -317,7 +317,7 @@ void init_sample_dma_buffers(UNUSED s32 arg0) {
sSampleDmas[gSampleDmaNumListItems].sizeUnused = 0;
sSampleDmas[gSampleDmaNumListItems].unused2 = 0;
sSampleDmas[gSampleDmaNumListItems].ttl = 0;
sSampleDmas[gSampleDmaNumListItems].bufSize = D_80226D68;
sSampleDmas[gSampleDmaNumListItems].bufSize = sDmaBufSize;
gSampleDmaNumListItems++;
}
#ifndef VERSION_EU
@ -338,12 +338,12 @@ out1:
sSampleDmaListSize1 = gSampleDmaNumListItems;
#ifdef VERSION_EU
D_80226D68 = 0x200;
sDmaBufSize = 0x200 * 4;
#else
D_80226D68 = 160 * 9;
sDmaBufSize = (160 * 9) * 4;
#endif
for (i = 0; i < gMaxSimultaneousNotes; i++) {
sSampleDmas[gSampleDmaNumListItems].buffer = soundAlloc(&gNotesAndBuffersPool, D_80226D68);
sSampleDmas[gSampleDmaNumListItems].buffer = soundAlloc(&gNotesAndBuffersPool, sDmaBufSize);
if (sSampleDmas[gSampleDmaNumListItems].buffer == NULL) {
#ifdef VERSION_EU
break;
@ -355,7 +355,7 @@ out1:
sSampleDmas[gSampleDmaNumListItems].sizeUnused = 0;
sSampleDmas[gSampleDmaNumListItems].unused2 = 0;
sSampleDmas[gSampleDmaNumListItems].ttl = 0;
sSampleDmas[gSampleDmaNumListItems].bufSize = D_80226D68;
sSampleDmas[gSampleDmaNumListItems].bufSize = sDmaBufSize;
gSampleDmaNumListItems++;
}
#ifndef VERSION_EU
@ -894,7 +894,7 @@ void audio_init() {
UNUSED s8 pad[32];
u8 buf[0x10];
#endif
s32 i, j, UNUSED k;
s32 i, UNUSED j, UNUSED k;
UNUSED s32 lim1; // lim1 unused in EU
#ifdef VERSION_EU
u8 buf[0x10];
@ -949,14 +949,11 @@ void audio_init() {
gCurrAudioFrameDmaCount = 0;
gSampleDmaNumListItems = 0;
sound_init_main_pools(D_80333EF0);
sound_init_main_pools(gAudioInitPoolSize);
bzero(&gAiBuffers, sizeof(gAiBuffers));
for (i = 0; i < NUMAIBUFFERS; i++) {
gAiBuffers[i] = soundAlloc(&gAudioInitPool, AIBUFFER_LEN);
for (j = 0; j < (s32) (AIBUFFER_LEN / sizeof(s16)); j++) {
gAiBuffers[i][j] = 0;
}
}
#ifdef VERSION_EU
@ -1006,8 +1003,8 @@ void audio_init() {
// Load bank sets for each sequence (assets/bank_sets.s)
data = LOAD_DATA(gBankSetsData);
gAlBankSets = soundAlloc(&gAudioInitPool, 0x100);
audio_dma_copy_immediate((uintptr_t) data, gAlBankSets, 0x100);
gAlBankSets = soundAlloc(&gAudioInitPool, 0x800);
audio_dma_copy_immediate((uintptr_t)data, gAlBankSets, 0x800);
init_sequence_players();
gAudioLoadLock = AUDIO_LOCK_NOT_LOADING;

View file

@ -38,7 +38,7 @@ extern struct CtlEntry *gCtlEntries;
extern struct AudioBufferParametersEU gAudioBufferParameters;
#endif
extern s32 gAiFrequency;
extern u32 D_80226D68;
extern u32 sDmaBufSize;
extern s32 gMaxAudioCmds;
extern s32 gMaxSimultaneousNotes;

View file

@ -4,7 +4,11 @@
#include "audio/data.h"
ALIGNED8 u8 gDecompressionHeap[0xD000];
ALIGNED16 u8 gAudioHeap[AUDIO_HEAP_SIZE];
#if defined(VERSION_EU) || defined(VERSION_SH)
ALIGNED16 u8 gAudioHeap[DOUBLE_SIZE_ON_64_BIT(AUDIO_HEAP_SIZE) - 0x3800];
#else
ALIGNED16 u8 gAudioHeap[DOUBLE_SIZE_ON_64_BIT(AUDIO_HEAP_SIZE)];
#endif
ALIGNED8 u8 gIdleThreadStack[0x800];
ALIGNED8 u8 gThread3Stack[0x2000];

View file

@ -3,6 +3,7 @@
#include <PR/ultratypes.h>
#include "audio/data.h"
#include "game/save_file.h"
#include "game/game_init.h"

View file

@ -97,6 +97,9 @@ void packet_duplicate(struct Packet* srcPacket, struct Packet* dstPacket) {
dstPacket->levelNum = srcPacket->levelNum;
dstPacket->areaIndex = srcPacket->areaIndex;
#ifdef DEBUG
assert(srcPacket->dataLength <= PACKET_LENGTH);
#endif
memcpy(&dstPacket->buffer[0], &srcPacket->buffer[0], srcPacket->dataLength);
if (dstPacket->reliable) {
@ -127,6 +130,10 @@ void packet_set_destination(struct Packet* packet, u8 destGlobalId) {
void packet_write(struct Packet* packet, void* data, u16 length) {
if (data == NULL) { packet->error = true; return; }
#ifdef DEBUG
assert(packet->dataLength + length <= PACKET_LENGTH);
#endif
if (packet->cursor + length >= PACKET_LENGTH) {
SOFT_ASSERT(packet->cursor + length < PACKET_LENGTH);
packet->writeError = true;
@ -177,6 +184,13 @@ u8 packet_initial_read(struct Packet* packet) {
void packet_read(struct Packet* packet, void* data, u16 length) {
if (data == NULL) { packet->error = true; return; }
u16 cursor = packet->cursor;
#ifdef DEBUG
// Make sure our read doesn't read past the buffer
// and that it doesn't read past our datas end.
assert(PACKET_LENGTH >= cursor + length);
#endif
memcpy(data, &packet->buffer[cursor], length);
packet->cursor = cursor + length;
}