mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2026-05-30 12:41:09 +00:00
fix audio engine crash from reloading banks that are already loaded (#1232)
* fix audio engine crash from reloading banks that are already loaded * only promote banks that are "discardable"
This commit is contained in:
parent
967d120505
commit
8da31e6199
2 changed files with 16 additions and 1 deletions
|
|
@ -228,6 +228,13 @@ void discard_bank(s32 bankId) {
|
|||
note->parentLayer->finished = TRUE;
|
||||
}
|
||||
note_disable(note);
|
||||
|
||||
// Reset sample state
|
||||
note->sound = NULL;
|
||||
note->samplePosInt = 0;
|
||||
note->samplePosFrac = 0;
|
||||
note->sampleDmaIndex = 0;
|
||||
|
||||
audio_list_remove(¬e->listItem);
|
||||
audio_list_push_back(&gNoteFreeLists.disabled, ¬e->listItem);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1591,7 +1591,15 @@ void load_sequence_internal(u32 player, u32 seqId, s32 loadAsync) {
|
|||
if (smlua_audio_utils_override(seqId, &bankId, &sequenceData)) {
|
||||
sequence_player_disable(seqPlayer);
|
||||
seqPlayer->defaultBank[0] = bankId;
|
||||
if (!bank_load_immediate(bankId, 0)) { return; }
|
||||
|
||||
// Check if the bank is already loaded in the temporary cache
|
||||
if (get_bank_or_seq(&gBankLoadedPool, 0, bankId) == NULL) {
|
||||
if (!bank_load_immediate(bankId, 0)) { return; }
|
||||
} else if (gBankLoadStatus[bankId] == SOUND_LOAD_STATUS_DISCARDABLE) {
|
||||
// This bank is still available, so just mark it as loaded again
|
||||
gBankLoadStatus[bankId] = SOUND_LOAD_STATUS_COMPLETE;
|
||||
}
|
||||
|
||||
seqPlayer->seqId = seqId;
|
||||
gSeqLoadStatus[seqId] = SOUND_LOAD_STATUS_COMPLETE;
|
||||
init_sequence_player(player);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue