audio_seqplayer.c OK and partial docs (#833)

* Import audio_seqplayer progress from main audio branch

* cleanup

* Better docs

* Small fix

* More

* Cleanup and update

* PR Suggestions

* PR Suggestions

* mute flags
This commit is contained in:
engineer124 2022-07-22 01:21:02 -04:00 committed by GitHub
parent fed7cec4ed
commit 601f44cb7f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 2482 additions and 266 deletions

View File

@ -3124,8 +3124,8 @@ void AudioLoad_AsyncLoadFont(s32 fontId, s32 arg1, s32 retData, OSMesgQueue* ret
u8* AudioLoad_GetFontsForSequence(s32 seqId, u32* outNumFonts);
void AudioLoad_DiscardSeqFonts(s32 seqId);
void func_8018FA60(u32 tableType, u32 id, s32 arg2, s32 arg3);
s32 AudioLoad_SyncIniPlayer(s32 playerIdx, s32 seqId, s32 arg2);
s32 AudioLoad_SyncInitSetSeqqPlayerSkipTicks(s32 playerIdx, s32 seqId, s32 skipTicks);
s32 AudioLoad_SyncInitSeqPlayer(s32 playerIndex, s32 seqId, s32 arg2);
s32 AudioLoad_SyncInitSeqPlayerSkipTicks(s32 playerIndex, s32 seqId, s32 skipTicks);
void AudioLoad_ProcessLoads(s32 resetStatus);
void AudioLoad_SetDmaHandler(DmaHandler callback);
void AudioLoad_Init(void* heap, u32 heapSize);
@ -3198,43 +3198,17 @@ void AudioEffects_SequencePlayerProcessSound(SequencePlayer* seqPlayer);
void AudioEffects_NoteVibratoUpdate(Note* note);
void AudioEffects_NoteVibratoInit(Note* note);
void AudioEffects_NotePortamentoInit(Note* note);
void AudioEffects_AdsrInit(AdsrState* adsr, AdsrEnvelope* envelope, s16* volOut);
void AudioEffects_AdsrInit(AdsrState* adsr, EnvelopePoint* envelope, s16* volOut);
f32 AudioEffects_AdsrUpdate(AdsrState* adsr);
// void func_801974D0(void);
// void func_80197538(void);
// void func_80197714(void);
// void func_80197880(void);
// void func_801979D8(void);
// void func_80197A54(void);
void AudioSeq_SequenceChannelDisable(SequenceChannel* channel);
// void func_80197B14(void);
// void func_80197C0C(void);
// void func_80197C8C(void);
void AudioSeq_SequencePlayerDisableAsFinished(SequencePlayer* seqPlayer);
void AudioSeq_SequencePlayerDisable(SequencePlayer* seqPlayer);
void AudioSeq_AudioListPushBack(AudioListItem* list, AudioListItem* item);
void* AudioSeq_AudioListPopBack(AudioListItem* list);
// void func_80197E88(void);
// void func_80197F28(void);
// void func_80197F3C(void);
// void func_80197F74(void);
// void func_80197FB4(void);
// void func_801980D0(void);
// void func_8019815C(void);
// void func_8019825C(void);
// void func_80198640(void);
// void func_80198CE0(void);
// void func_801990F4(void);
// void func_80199124(void);
// void func_80199198(void);
// void func_80199244(void);
void func_80199268(s32* param_1);
// void func_8019A0BC(void);
// void func_8019AA3C(void);
// void func_8019AAF0(void);
void AudioSeq_ProcessSequences(s32 arg0);
void AudioSeq_SkipForwardSequence(SequencePlayer* seqPlayer);
void AudioSeq_ResetSequencePlayer(SequencePlayer* seqPlayer);
void AudioSeq_InitSequencePlayerChannels(s32 playerIdx);
// void func_8019ACEC(void);
void AudioSeq_InitSequencePlayerChannels(s32 playerIndex);
void AudioSeq_InitSequencePlayers(void);
void func_8019AE40(s32 param_1, s32 param_2, u32 param_3, s32 param_4);
void func_8019AEC0(UNK_PTR param_1, UNK_PTR param_2);
@ -3356,7 +3330,7 @@ void func_801A1DB8(Vec3f* vec, u8 seqId, f32 arg2);
// void func_801A1E0C(void);
void func_801A1F00(u8 arg0, u16 seqId);
void func_801A1F88(void);
void func_801A1FB4(u8 playerIdx, Vec3f* pos, u16 seqId, f32 maxDist);
void func_801A1FB4(u8 playerIndex, Vec3f* pos, u16 seqId, f32 maxDist);
// void func_801A2090(void);
void func_801A246C(u8 param_1, u8 param_2);
// void func_801A2544(void);
@ -3474,7 +3448,7 @@ void Audio_QueueSeqCmd(u32 cmd);
// void func_801A89D0(void);
s32 func_801A8A50(s32 param1);
// void func_801A8ABC(void);
void Audio_SetVolumeScale(u8 playerIdx, u8 scaleIdx, u8 targetVol, u8 volFadeTimer);
void Audio_SetVolumeScale(u8 playerIndex, u8 scaleIndex, u8 targetVol, u8 volFadeTimer);
// void func_801A8D5C(void);
// void func_801A8E90(void);
// void func_801A9768(void);

View File

@ -1554,16 +1554,12 @@ extern s16 gHighPassFilterData[];
extern s16 gBandStopFilterData[];
extern s16 gBandPassFilterData[];
extern s16* gWaveSamples[9];
extern UNK_PTR D_801D4D98;
extern UNK_PTR D_801D4DB0;
extern f32 gBendPitchOneOctaveFrequencies[256];
// extern UNK_TYPE1 D_801D4FB4;
// extern UNK_TYPE4 gBendPitchTwoSemitonesFrequencies;
// extern UNK_TYPE4 D_801D53B4;
// extern UNK_TYPE1 gPitchFrequencies;
// extern UNK_TYPE1 gDefaultShortNoteVelocityTable;
// extern UNK_TYPE1 gDefaultShortNoteGateTimeTable;
// extern UNK_TYPE1 gDefaultEnvelope;
extern f32 gBendPitchTwoSemitonesFrequencies[];
extern f32 gPitchFrequencies[];
extern u8 gDefaultShortNoteVelocityTable[];
extern u8 gDefaultShortNoteGateTimeTable[];
extern EnvelopePoint gDefaultEnvelope[];
extern NoteSubEu gZeroNoteSub;
extern NoteSubEu gDefaultNoteSub;
extern u16 gHeadsetPanQuantization[];

View File

@ -8,9 +8,16 @@
#define TATUMS_PER_BEAT 48
#define IS_SEQUENCE_CHANNEL_VALID(ptr) ((uintptr_t)(ptr) != (uintptr_t)&gAudioContext.sequenceChannelNone)
#define SEQ_NUM_CHANNELS 16
#define MAX_CHANNELS_PER_BANK 3
#define MUTE_FLAGS_3 (1 << 3) // prevent further noteSubEus from playing
#define MUTE_FLAGS_4 (1 << 4) // stop something in seqLayer scripts
#define MUTE_FLAGS_SOFTEN (1 << 5) // lower volume, by default to half
#define MUTE_FLAGS_STOP_NOTES (1 << 6) // prevent further notes from playing
#define MUTE_FLAGS_STOP_SCRIPT (1 << 7) // stop processing sequence/channel scripts
#define AUDIO_LERPIMP(v0, v1, t) (v0 + ((v1 - v0) * t))
#define ADSR_DISABLE 0
@ -86,12 +93,12 @@ typedef enum {
} AudioCacheType;
typedef enum {
/* 0 */ LOAD_STATUS_0,
/* 1 */ LOAD_STATUS_1,
/* 2 */ LOAD_STATUS_2, // Samples/Seqplayer
/* 3 */ LOAD_STATUS_3, // Sequences
/* 4 */ LOAD_STATUS_4, // SoundFonts
/* 5 */ LOAD_STATUS_5 // Permanent
/* 0 */ LOAD_STATUS_NOT_LOADED,
/* 1 */ LOAD_STATUS_IN_PROGRESS,
/* 2 */ LOAD_STATUS_COMPLETE,
/* 3 */ LOAD_STATUS_DISCARDABLE,
/* 4 */ LOAD_STATUS_MAYBE_DISCARDABLE,
/* 5 */ LOAD_STATUS_PERMANENT
} AudioLoadStatus;
typedef s32 (*DmaHandler)(OSPiHandle* handle, OSIoMesg* mb, s32 direction);
@ -139,7 +146,7 @@ typedef struct {
typedef struct {
/* 0x0 */ s16 delay;
/* 0x2 */ s16 arg;
} AdsrEnvelope; // size = 0x4
} EnvelopePoint; // size = 0x4
typedef struct {
/* 0x00 */ u32 start;
@ -231,19 +238,19 @@ typedef struct {
/* 0x00 */ u8 loaded;
/* 0x01 */ u8 normalRangeLo;
/* 0x02 */ u8 normalRangeHi;
/* 0x03 */ u8 releaseRate;
/* 0x04 */ AdsrEnvelope* envelope;
/* 0x03 */ u8 adsrDecayIndex; // index used to obtain adsr decay rate from adsrDecayTable
/* 0x04 */ EnvelopePoint* envelope;
/* 0x08 */ SoundFontSound lowNotesSound;
/* 0x10 */ SoundFontSound normalNotesSound;
/* 0x18 */ SoundFontSound highNotesSound;
} Instrument; // size = 0x20
typedef struct {
/* 0x00 */ u8 releaseRate;
/* 0x00 */ u8 adsrDecayIndex; // index used to obtain adsr decay rate from adsrDecayTable
/* 0x01 */ u8 pan;
/* 0x02 */ u8 loaded;
/* 0x04 */ SoundFontSound sound;
/* 0x14 */ AdsrEnvelope* envelope;
/* 0x14 */ EnvelopePoint* envelope;
} Drum; // size = 0x18
typedef struct {
@ -277,11 +284,11 @@ typedef struct {
/* 0x000 */ u8 applyBend : 1;
/* 0x001 */ u8 state;
/* 0x002 */ u8 noteAllocPolicy;
/* 0x003 */ u8 muteBehavior;
/* 0x003 */ u8 muteFlags;
/* 0x004 */ u8 seqId;
/* 0x005 */ u8 defaultFont;
/* 0x006 */ u8 unk_06[1];
/* 0x007 */ s8 playerIdx;
/* 0x007 */ s8 playerIndex;
/* 0x008 */ u16 tempo; // tatums per minute
/* 0x00A */ u16 tempoAcc;
/* 0x00C */ s16 unk_0C;
@ -289,7 +296,7 @@ typedef struct {
/* 0x010 */ u16 delay;
/* 0x012 */ u16 fadeTimer;
/* 0x014 */ u16 fadeTimerUnkEu;
/* 0x016 */ u16 unk_16; // New to MM
/* 0x016 */ u16 unk_16;
union {
/* 0x018 */ u8* seqData;
/* 0x018 */ u16* seqData16;
@ -313,9 +320,9 @@ typedef struct {
} SequencePlayer; // size = 0x160
typedef struct {
/* 0x0 */ u8 releaseRate;
/* 0x0 */ u8 decayIndex; // index used to obtain adsr decay rate from adsrDecayTable
/* 0x1 */ u8 sustain;
/* 0x4 */ AdsrEnvelope* envelope;
/* 0x4 */ EnvelopePoint* envelope;
} AdsrSettings; // size = 0x8
typedef struct {
@ -337,7 +344,7 @@ typedef struct {
/* 0x10 */ f32 current;
/* 0x14 */ f32 target;
/* 0x18 */ char unk_18[4];
/* 0x1C */ AdsrEnvelope* envelope;
/* 0x1C */ EnvelopePoint* envelope;
} AdsrState; // size = 0x20
typedef struct {
@ -356,7 +363,7 @@ typedef union {
typedef struct {
/* 0x00 */ u8 reverb;
/* 0x01 */ u8 unk_1;
/* 0x01 */ u8 gain; // Increases volume by a multiplicative scaling factor. Represented as a UQ4.4 number
/* 0x02 */ u8 pan;
/* 0x03 */ u8 unk_3; // Possibly part of stereo?
/* 0x04 */ Stereo stereo;
@ -397,7 +404,7 @@ typedef struct SequenceChannel {
/* 0x01 */ u8 asByte;
} changes;
/* 0x02 */ u8 noteAllocPolicy;
/* 0x03 */ u8 muteBehavior;
/* 0x03 */ u8 muteFlags;
/* 0x04 */ u8 reverb; // or dry/wet mix
/* 0x05 */ u8 notePriority; // 0-3
/* 0x06 */ u8 someOtherPriority;
@ -406,12 +413,12 @@ typedef struct SequenceChannel {
/* 0x09 */ u8 bookOffset;
/* 0x0A */ u8 newPan;
/* 0x0B */ u8 panChannelWeight; // proportion of pan that comes from the channel (0..128)
/* 0x0C */ u8 unk_0C;
/* 0x0C */ u8 gain; // Increases volume by a multiplicative scaling factor. Represented as a UQ4.4 number
/* 0x0D */ u8 velocityRandomVariance;
/* 0x0E */ u8 gateTimeRandomVariance;
/* 0x0F */ u8 unk_0F;
/* 0x10 */ u8 unk_10; // New to MM
/* 0x11 */ u8 unk_11; // New to MM
/* 0x10 */ u8 unk_10;
/* 0x11 */ u8 unk_11;
/* 0x12 */ VibratoSubStruct vibrato;
/* 0x20 */ u16 delay;
/* 0x22 */ u16 unk_20;
@ -434,11 +441,11 @@ typedef struct SequenceChannel {
/* 0x80 */ AdsrSettings adsr;
/* 0x88 */ NotePool notePool;
/* 0xC8 */ s8 soundScriptIO[8]; // bridge between sound script and audio lib, "io ports"
/* 0xD0 */ u8* unk_D0; // New to MM
/* 0xD0 */ u8* sfxState;
/* 0xD4 */ s16* filter;
/* 0xD8 */ Stereo stereo;
/* 0xDC */ s32 unk_DC; // New to MM
/* 0xE0 */ s32 unk_E0; // New to MM
/* 0xDC */ s32 unk_DC;
/* 0xE0 */ s32 unk_E0;
} SequenceChannel; // size = 0xE4
// Might also be known as a Track, according to sm64 debug strings (?).
@ -531,7 +538,7 @@ typedef struct {
/* 0x04 */ u8 reverbVol;
/* 0x05 */ u8 numParts;
/* 0x06 */ u16 samplePosFrac;
/* 0x08 */ u16 unk_08; // New to MM
/* 0x08 */ u16 unk_08;
/* 0x0C */ s32 samplePosInt;
/* 0x10 */ NoteSynthesisBuffers* synthesisBuffers;
/* 0x14 */ s16 curVolLeft;
@ -596,7 +603,7 @@ typedef struct {
/* 0x01 */ u8 hasTwoParts : 1;
/* 0x01 */ u8 usesHeadsetPanEffects2 : 1;
} bitField1;
/* 0x02 */ u8 unk_2;
/* 0x02 */ u8 gain; // Increases volume by a multiplicative scaling factor. Represented as a UQ4.4 number
/* 0x03 */ u8 headsetPanRight;
/* 0x04 */ u8 headsetPanLeft;
/* 0x05 */ u8 reverbVol;
@ -611,8 +618,8 @@ typedef struct {
/* 0x10 */ s16* samples; // used for synthetic waves
} sound;
/* 0x14 */ s16* filter;
/* 0x18 */ u8 unk_18; // New to MM
/* 0x19 */ u8 unk_19; // New to MM
/* 0x18 */ u8 unk_18;
/* 0x19 */ u8 unk_19;
/* 0x1A */ UNK_TYPE1 pad_1A[0x6];
} NoteSubEu; // size = 0x20
@ -965,7 +972,7 @@ typedef struct {
/* 0x4448 */ volatile u8 resetStatus;
/* 0x4449 */ u8 audioResetSpecIdToLoad;
/* 0x444C */ s32 audioResetFadeOutFramesLeft;
/* 0x4450 */ f32* unk_3520; // fadeOutVelocities for ADSR
/* 0x4450 */ f32* adsrDecayTable; // A table on the audio heap that stores decay rates used for ADSR
/* 0x4454 */ u8* audioHeap;
/* 0x4458 */ size_t audioHeapSize;
/* 0x445C */ Note* notes;
@ -994,7 +1001,7 @@ typedef struct {
typedef struct {
/* 0x00 */ u8 reverbVol;
/* 0x01 */ u8 unk_1;
/* 0x01 */ u8 gain; // Increases volume by a multiplicative scaling factor. Represented as a UQ4.4 number
/* 0x02 */ u8 pan;
/* 0x03 */ u8 unk_3;
/* 0x04 */ Stereo stereo;
@ -1050,7 +1057,7 @@ typedef struct {
/* 0x218 */ u8 unk_4C;
/* 0x219 */ u8 unk_4D;
/* 0x21A */ u8 unk_4E;
/* 0x21B */ u8 unk_21B; // New to MM
/* 0x21B */ u8 unk_21B;
} unk_D_8016E750; // size = 0x21C
typedef struct {

1
spec
View File

@ -620,7 +620,6 @@ beginseg
include "build/src/code/audio/audio_playback.o"
include "build/src/code/audio/audio_effects.o"
include "build/src/code/audio/audio_seqplayer.o"
include "build/data/code/audio_seqplayer.data.o"
include "build/data/code/audio_dramStack.data.o"
include "build/asm/code/code_8019AE40.text.o" // handwritten
pad_text

View File

@ -850,11 +850,11 @@ u8 gDefaultShortNoteGateTimeTable[] = {
229, 203, 177, 151, 139, 126, 113, 100, 87, 74, 61, 48, 36, 23, 10, 0,
};
AdsrEnvelope gDefaultEnvelope[] = {
EnvelopePoint gDefaultEnvelope[] = {
{ 1, 32000 },
{ 1000, 32000 },
{ -1, 0 },
{ 0, 0 },
{ ADSR_HANG, 0 },
{ ADSR_DISABLE, 0 },
};
NoteSubEu gZeroNoteSub = { 0 };

View File

@ -7,7 +7,7 @@ void AudioEffects_SequenceChannelProcessSound(SequenceChannel* channel, s32 reca
if (channel->changes.s.volume || recalculateVolume) {
channelVolume = channel->volume * channel->volumeScale * channel->seqPlayer->appliedFadeVolume;
if (channel->seqPlayer->muted && (channel->muteBehavior & 0x20)) {
if (channel->seqPlayer->muted && (channel->muteFlags & MUTE_FLAGS_SOFTEN)) {
channelVolume = channel->seqPlayer->muteVolumeScale * channelVolume;
}
channel->appliedVolume = channelVolume * channelVolume;
@ -218,7 +218,7 @@ void AudioEffects_NotePortamentoInit(Note* note) {
note->playbackState.portamento = note->playbackState.parentLayer->portamento;
}
void AudioEffects_AdsrInit(AdsrState* adsr, AdsrEnvelope* envelope, s16* volOut) {
void AudioEffects_AdsrInit(AdsrState* adsr, EnvelopePoint* envelope, s16* volOut) {
adsr->action.asByte = 0;
adsr->delay = 0;
adsr->envelope = envelope;

View File

@ -21,45 +21,45 @@ f32 func_8018B0F0(f32 arg0) {
void func_8018B10C(void) {
s32 i;
gAudioContext.unk_3520[255] = func_8018B0F0(0.25f);
gAudioContext.unk_3520[254] = func_8018B0F0(0.33f);
gAudioContext.unk_3520[253] = func_8018B0F0(0.5f);
gAudioContext.unk_3520[252] = func_8018B0F0(0.66f);
gAudioContext.unk_3520[251] = func_8018B0F0(0.75f);
gAudioContext.adsrDecayTable[255] = func_8018B0F0(0.25f);
gAudioContext.adsrDecayTable[254] = func_8018B0F0(0.33f);
gAudioContext.adsrDecayTable[253] = func_8018B0F0(0.5f);
gAudioContext.adsrDecayTable[252] = func_8018B0F0(0.66f);
gAudioContext.adsrDecayTable[251] = func_8018B0F0(0.75f);
for (i = 128; i < 251; i++) {
gAudioContext.unk_3520[i] = func_8018B0F0(251 - i);
gAudioContext.adsrDecayTable[i] = func_8018B0F0(251 - i);
}
for (i = 16; i < 128; i++) {
gAudioContext.unk_3520[i] = func_8018B0F0(4 * (143 - i));
gAudioContext.adsrDecayTable[i] = func_8018B0F0(4 * (143 - i));
}
for (i = 1; i < 16; i++) {
gAudioContext.unk_3520[i] = func_8018B0F0(60 * (23 - i));
gAudioContext.adsrDecayTable[i] = func_8018B0F0(60 * (23 - i));
}
gAudioContext.unk_3520[0] = 0.0f;
gAudioContext.adsrDecayTable[0] = 0.0f;
}
void AudioHeap_ResetLoadStatus(void) {
s32 i;
for (i = 0; i < ARRAY_COUNT(gAudioContext.fontLoadStatus); i++) {
if (gAudioContext.fontLoadStatus[i] != LOAD_STATUS_5) {
gAudioContext.fontLoadStatus[i] = LOAD_STATUS_0;
if (gAudioContext.fontLoadStatus[i] != LOAD_STATUS_PERMANENT) {
gAudioContext.fontLoadStatus[i] = LOAD_STATUS_NOT_LOADED;
}
}
for (i = 0; i < ARRAY_COUNT(gAudioContext.sampleFontLoadStatus); i++) {
if (gAudioContext.sampleFontLoadStatus[i] != LOAD_STATUS_5) {
gAudioContext.sampleFontLoadStatus[i] = LOAD_STATUS_0;
if (gAudioContext.sampleFontLoadStatus[i] != LOAD_STATUS_PERMANENT) {
gAudioContext.sampleFontLoadStatus[i] = LOAD_STATUS_NOT_LOADED;
}
}
for (i = 0; i < ARRAY_COUNT(gAudioContext.seqLoadStatus); i++) {
if (gAudioContext.seqLoadStatus[i] != LOAD_STATUS_5) {
gAudioContext.seqLoadStatus[i] = LOAD_STATUS_0;
if (gAudioContext.seqLoadStatus[i] != LOAD_STATUS_PERMANENT) {
gAudioContext.seqLoadStatus[i] = LOAD_STATUS_NOT_LOADED;
}
}
}
@ -302,7 +302,7 @@ void AudioHeap_PopCache(s32 tableType) {
AudioHeap_DiscardFont(persistent->entries[persistent->numEntries - 1].id);
}
loadStatus[persistent->entries[persistent->numEntries - 1].id] = LOAD_STATUS_0;
loadStatus[persistent->entries[persistent->numEntries - 1].id] = LOAD_STATUS_NOT_LOADED;
persistent->numEntries--;
}
@ -409,12 +409,12 @@ void* AudioHeap_AllocCached(s32 tableType, size_t size, s32 cache, s32 id) {
}
loadStatusEntry0 =
(temporaryCache->entries[0].id == -1) ? LOAD_STATUS_0 : loadStatus[temporaryCache->entries[0].id];
(temporaryCache->entries[0].id == -1) ? LOAD_STATUS_NOT_LOADED : loadStatus[temporaryCache->entries[0].id];
loadStatusEntry1 =
(temporaryCache->entries[1].id == -1) ? LOAD_STATUS_0 : loadStatus[temporaryCache->entries[1].id];
(temporaryCache->entries[1].id == -1) ? LOAD_STATUS_NOT_LOADED : loadStatus[temporaryCache->entries[1].id];
if (tableType == FONT_TABLE) {
if (loadStatusEntry0 == LOAD_STATUS_4) {
if (loadStatusEntry0 == LOAD_STATUS_MAYBE_DISCARDABLE) {
for (i = 0; i < gAudioContext.numNotes; i++) {
if ((gAudioContext.notes[i].playbackState.fontId == temporaryCache->entries[0].id) &&
gAudioContext.notes[i].noteSubEu.bitField0.enabled) {
@ -423,12 +423,12 @@ void* AudioHeap_AllocCached(s32 tableType, size_t size, s32 cache, s32 id) {
}
if (i == gAudioContext.numNotes) {
AudioLoad_SetFontLoadStatus(temporaryCache->entries[0].id, LOAD_STATUS_3);
loadStatusEntry0 = LOAD_STATUS_3;
AudioLoad_SetFontLoadStatus(temporaryCache->entries[0].id, LOAD_STATUS_DISCARDABLE);
loadStatusEntry0 = LOAD_STATUS_DISCARDABLE;
}
}
if (loadStatusEntry1 == LOAD_STATUS_4) {
if (loadStatusEntry1 == LOAD_STATUS_MAYBE_DISCARDABLE) {
for (i = 0; i < gAudioContext.numNotes; i++) {
if ((gAudioContext.notes[i].playbackState.fontId == temporaryCache->entries[1].id) &&
gAudioContext.notes[i].noteSubEu.bitField0.enabled) {
@ -437,26 +437,26 @@ void* AudioHeap_AllocCached(s32 tableType, size_t size, s32 cache, s32 id) {
}
if (i == gAudioContext.numNotes) {
AudioLoad_SetFontLoadStatus(temporaryCache->entries[1].id, LOAD_STATUS_3);
loadStatusEntry1 = LOAD_STATUS_3;
AudioLoad_SetFontLoadStatus(temporaryCache->entries[1].id, LOAD_STATUS_DISCARDABLE);
loadStatusEntry1 = LOAD_STATUS_DISCARDABLE;
}
}
}
if (loadStatusEntry0 == LOAD_STATUS_0) {
if (loadStatusEntry0 == LOAD_STATUS_NOT_LOADED) {
temporaryCache->nextSide = 0;
} else if (loadStatusEntry1 == LOAD_STATUS_0) {
} else if (loadStatusEntry1 == LOAD_STATUS_NOT_LOADED) {
temporaryCache->nextSide = 1;
} else if ((loadStatusEntry0 == LOAD_STATUS_3) && (loadStatusEntry1 == LOAD_STATUS_3)) {
} else if ((loadStatusEntry0 == LOAD_STATUS_DISCARDABLE) && (loadStatusEntry1 == LOAD_STATUS_DISCARDABLE)) {
// Use the opposite side from last time.
} else if (loadStatusEntry0 == LOAD_STATUS_3) {
} else if (loadStatusEntry0 == LOAD_STATUS_DISCARDABLE) {
temporaryCache->nextSide = 0;
} else if (loadStatusEntry1 == LOAD_STATUS_3) {
} else if (loadStatusEntry1 == LOAD_STATUS_DISCARDABLE) {
temporaryCache->nextSide = 1;
} else {
// Check if there is a side which isn't in active use, if so, evict that one.
if (tableType == SEQUENCE_TABLE) {
if (loadStatusEntry0 == LOAD_STATUS_2) {
if (loadStatusEntry0 == LOAD_STATUS_COMPLETE) {
for (i = 0; i < gAudioContext.audioBufferParameters.numSequencePlayers; i++) {
if (gAudioContext.seqPlayers[i].enabled &&
gAudioContext.seqPlayers[i].seqId == temporaryCache->entries[0].id) {
@ -470,7 +470,7 @@ void* AudioHeap_AllocCached(s32 tableType, size_t size, s32 cache, s32 id) {
}
}
if (loadStatusEntry1 == LOAD_STATUS_2) {
if (loadStatusEntry1 == LOAD_STATUS_COMPLETE) {
for (i = 0; i < gAudioContext.audioBufferParameters.numSequencePlayers; i++) {
if (gAudioContext.seqPlayers[i].enabled &&
gAudioContext.seqPlayers[i].seqId == temporaryCache->entries[1].id) {
@ -484,7 +484,7 @@ void* AudioHeap_AllocCached(s32 tableType, size_t size, s32 cache, s32 id) {
}
}
} else if (tableType == FONT_TABLE) {
if (loadStatusEntry0 == LOAD_STATUS_2) {
if (loadStatusEntry0 == LOAD_STATUS_COMPLETE) {
for (i = 0; i < gAudioContext.numNotes; i++) {
if ((gAudioContext.notes[i].playbackState.fontId == temporaryCache->entries[0].id) &&
gAudioContext.notes[i].noteSubEu.bitField0.enabled) {
@ -497,7 +497,7 @@ void* AudioHeap_AllocCached(s32 tableType, size_t size, s32 cache, s32 id) {
}
}
if (loadStatusEntry1 == LOAD_STATUS_2) {
if (loadStatusEntry1 == LOAD_STATUS_COMPLETE) {
for (i = 0; i < gAudioContext.numNotes; i++) {
if ((gAudioContext.notes[i].playbackState.fontId == temporaryCache->entries[1].id) &&
gAudioContext.notes[i].noteSubEu.bitField0.enabled) {
@ -514,15 +514,15 @@ void* AudioHeap_AllocCached(s32 tableType, size_t size, s32 cache, s32 id) {
// No such luck. Evict the side that wasn't chosen last time, except
// if it is being loaded into.
if (temporaryCache->nextSide == 0) {
if (loadStatusEntry0 == LOAD_STATUS_1) {
if (loadStatusEntry1 == LOAD_STATUS_1) {
if (loadStatusEntry0 == LOAD_STATUS_IN_PROGRESS) {
if (loadStatusEntry1 == LOAD_STATUS_IN_PROGRESS) {
goto fail;
}
temporaryCache->nextSide = 1;
}
} else {
if (loadStatusEntry1 == LOAD_STATUS_1) {
if (loadStatusEntry0 == LOAD_STATUS_1) {
if (loadStatusEntry1 == LOAD_STATUS_IN_PROGRESS) {
if (loadStatusEntry0 == LOAD_STATUS_IN_PROGRESS) {
goto fail;
}
temporaryCache->nextSide = 0;
@ -544,7 +544,7 @@ void* AudioHeap_AllocCached(s32 tableType, size_t size, s32 cache, s32 id) {
AudioHeap_DiscardSampleBank(temporaryCache->entries[side].id);
}
loadStatus[temporaryCache->entries[side].id] = LOAD_STATUS_0;
loadStatus[temporaryCache->entries[side].id] = LOAD_STATUS_NOT_LOADED;
if (tableType == FONT_TABLE) {
AudioHeap_DiscardFont(temporaryCache->entries[side].id);
@ -564,7 +564,7 @@ void* AudioHeap_AllocCached(s32 tableType, size_t size, s32 cache, s32 id) {
AudioHeap_DiscardSampleBank(temporaryCache->entries[1].id);
}
loadStatus[temporaryCache->entries[1].id] = LOAD_STATUS_0;
loadStatus[temporaryCache->entries[1].id] = LOAD_STATUS_NOT_LOADED;
switch (tableType) {
case SEQUENCE_TABLE:
@ -594,7 +594,7 @@ void* AudioHeap_AllocCached(s32 tableType, size_t size, s32 cache, s32 id) {
AudioHeap_DiscardSampleBank(temporaryCache->entries[0].id);
}
loadStatus[temporaryCache->entries[0].id] = LOAD_STATUS_0;
loadStatus[temporaryCache->entries[0].id] = LOAD_STATUS_NOT_LOADED;
switch (tableType) {
case SEQUENCE_TABLE:
@ -1042,8 +1042,8 @@ void AudioHeap_Init(void) {
AudioHeap_AllocDmaMemoryZeroed(&gAudioContext.miscPool, gAudioContext.maxAudioCmds * sizeof(u64));
}
// Initialize unk_3520 (fadeOutVelocities for ADSR)
gAudioContext.unk_3520 = AudioHeap_Alloc(&gAudioContext.miscPool, 0x100 * sizeof(f32));
// Initialize adsrDecayTable (fadeOutVelocities for ADSR)
gAudioContext.adsrDecayTable = AudioHeap_Alloc(&gAudioContext.miscPool, 0x100 * sizeof(f32));
func_8018B10C();
// Initialize reverbs

View File

@ -29,7 +29,7 @@ typedef struct {
} AudioRelocInfo; // size = 0x18
void AudioLoad_DiscardFont(s32 fontId);
s32 AudioLoad_SyncInitSeqPlayerInternal(s32 playerIdx, s32 seqId, s32 arg2);
s32 AudioLoad_SyncInitSeqPlayerInternal(s32 playerIndex, s32 seqId, s32 arg2);
u8* AudioLoad_SyncLoadSeq(s32 seqId);
u32 AudioLoad_TrySyncLoadSampleBank(u32 sampleBankId, u32* outMedium, s32 noLoad);
SoundFontData* AudioLoad_SyncLoadFont(u32 fontId);
@ -301,9 +301,9 @@ void AudioLoad_InitSampleDmaBuffers(s32 numNotes) {
s32 AudioLoad_IsFontLoadComplete(s32 fontId) {
if (fontId == 0xFF) {
return true;
} else if (gAudioContext.fontLoadStatus[fontId] >= LOAD_STATUS_2) {
} else if (gAudioContext.fontLoadStatus[fontId] >= LOAD_STATUS_COMPLETE) {
return true;
} else if (gAudioContext.fontLoadStatus[AudioLoad_GetRealTableIndex(FONT_TABLE, fontId)] >= LOAD_STATUS_2) {
} else if (gAudioContext.fontLoadStatus[AudioLoad_GetRealTableIndex(FONT_TABLE, fontId)] >= LOAD_STATUS_COMPLETE) {
return true;
} else {
return false;
@ -313,9 +313,10 @@ s32 AudioLoad_IsFontLoadComplete(s32 fontId) {
s32 AudioLoad_IsSeqLoadComplete(s32 seqId) {
if (seqId == 0xFF) {
return true;
} else if (gAudioContext.seqLoadStatus[seqId] >= LOAD_STATUS_2) {
} else if (gAudioContext.seqLoadStatus[seqId] >= LOAD_STATUS_COMPLETE) {
return true;
} else if (gAudioContext.seqLoadStatus[AudioLoad_GetRealTableIndex(SEQUENCE_TABLE, seqId)] >= LOAD_STATUS_2) {
} else if (gAudioContext.seqLoadStatus[AudioLoad_GetRealTableIndex(SEQUENCE_TABLE, seqId)] >=
LOAD_STATUS_COMPLETE) {
return true;
} else {
return false;
@ -325,10 +326,10 @@ s32 AudioLoad_IsSeqLoadComplete(s32 seqId) {
s32 AudioLoad_IsSampleLoadComplete(s32 sampleBankId) {
if (sampleBankId == 0xFF) {
return true;
} else if (gAudioContext.sampleFontLoadStatus[sampleBankId] >= LOAD_STATUS_2) {
} else if (gAudioContext.sampleFontLoadStatus[sampleBankId] >= LOAD_STATUS_COMPLETE) {
return true;
} else if (gAudioContext.sampleFontLoadStatus[AudioLoad_GetRealTableIndex(SAMPLE_TABLE, sampleBankId)] >=
LOAD_STATUS_2) {
LOAD_STATUS_COMPLETE) {
return true;
} else {
return false;
@ -336,32 +337,32 @@ s32 AudioLoad_IsSampleLoadComplete(s32 sampleBankId) {
}
void AudioLoad_SetFontLoadStatus(s32 fontId, s32 loadStatus) {
if ((fontId != 0xFF) && (gAudioContext.fontLoadStatus[fontId] != LOAD_STATUS_5)) {
if ((fontId != 0xFF) && (gAudioContext.fontLoadStatus[fontId] != LOAD_STATUS_PERMANENT)) {
gAudioContext.fontLoadStatus[fontId] = loadStatus;
}
}
void AudioLoad_SetSeqLoadStatus(s32 seqId, s32 loadStatus) {
if ((seqId != 0xFF) && (gAudioContext.seqLoadStatus[seqId] != LOAD_STATUS_5)) {
if ((seqId != 0xFF) && (gAudioContext.seqLoadStatus[seqId] != LOAD_STATUS_PERMANENT)) {
gAudioContext.seqLoadStatus[seqId] = loadStatus;
}
}
void AudioLoad_SetSampleFontLoadStatusAndApplyCaches(s32 sampleBankId, s32 loadStatus) {
if (sampleBankId != 0xFF) {
if (gAudioContext.sampleFontLoadStatus[sampleBankId] != LOAD_STATUS_5) {
if (gAudioContext.sampleFontLoadStatus[sampleBankId] != LOAD_STATUS_PERMANENT) {
gAudioContext.sampleFontLoadStatus[sampleBankId] = loadStatus;
}
if ((gAudioContext.sampleFontLoadStatus[sampleBankId] == LOAD_STATUS_5) ||
(gAudioContext.sampleFontLoadStatus[sampleBankId] == LOAD_STATUS_2)) {
if ((gAudioContext.sampleFontLoadStatus[sampleBankId] == LOAD_STATUS_PERMANENT) ||
(gAudioContext.sampleFontLoadStatus[sampleBankId] == LOAD_STATUS_COMPLETE)) {
AudioHeap_ApplySampleBankCache(sampleBankId);
}
}
}
void AudioLoad_SetSampleFontLoadStatus(s32 sampleBankId, s32 loadStatus) {
if ((sampleBankId != 0xFF) && (gAudioContext.sampleFontLoadStatus[sampleBankId] != LOAD_STATUS_5)) {
if ((sampleBankId != 0xFF) && (gAudioContext.sampleFontLoadStatus[sampleBankId] != LOAD_STATUS_PERMANENT)) {
gAudioContext.sampleFontLoadStatus[sampleBankId] = loadStatus;
}
}
@ -510,7 +511,7 @@ void AudioLoad_DiscardSeqFonts(s32 seqId) {
fontId = AudioLoad_GetRealTableIndex(FONT_TABLE, gAudioContext.sequenceFontTable[index++]);
if (AudioHeap_SearchPermanentCache(FONT_TABLE, fontId) == NULL) {
AudioLoad_DiscardFont(fontId);
AudioLoad_SetFontLoadStatus(fontId, LOAD_STATUS_0);
AudioLoad_SetFontLoadStatus(fontId, LOAD_STATUS_NOT_LOADED);
}
}
}
@ -553,31 +554,31 @@ void func_8018FA60(u32 tableType, u32 id, s32 type, s32 data) {
}
}
s32 AudioLoad_SyncInitSeqPlayer(s32 playerIdx, s32 seqId, s32 arg2) {
s32 AudioLoad_SyncInitSeqPlayer(s32 playerIndex, s32 seqId, s32 arg2) {
if (gAudioContext.resetTimer != 0) {
return 0;
}
gAudioContext.seqPlayers[playerIdx].skipTicks = 0;
AudioLoad_SyncInitSeqPlayerInternal(playerIdx, seqId, arg2);
gAudioContext.seqPlayers[playerIndex].skipTicks = 0;
AudioLoad_SyncInitSeqPlayerInternal(playerIndex, seqId, arg2);
// Intentionally missing return. Returning the result of the above function
// call matches but is UB because it too is missing a return, and using the
// result of a non-void function that has failed to return a value is UB.
// The callers of this function do not use the return value, so it's fine.
}
s32 AudioLoad_SyncInitSeqPlayerSkipTicks(s32 playerIdx, s32 seqId, s32 skipTicks) {
s32 AudioLoad_SyncInitSeqPlayerSkipTicks(s32 playerIndex, s32 seqId, s32 skipTicks) {
if (gAudioContext.resetTimer != 0) {
return 0;
}
gAudioContext.seqPlayers[playerIdx].skipTicks = skipTicks;
AudioLoad_SyncInitSeqPlayerInternal(playerIdx, seqId, 0);
gAudioContext.seqPlayers[playerIndex].skipTicks = skipTicks;
AudioLoad_SyncInitSeqPlayerInternal(playerIndex, seqId, 0);
// Missing return, see above.
}
s32 AudioLoad_SyncInitSeqPlayerInternal(s32 playerIdx, s32 seqId, s32 arg2) {
SequencePlayer* seqPlayer = &gAudioContext.seqPlayers[playerIdx];
s32 AudioLoad_SyncInitSeqPlayerInternal(s32 playerIndex, s32 seqId, s32 arg2) {
SequencePlayer* seqPlayer = &gAudioContext.seqPlayers[playerIndex];
u8* seqData;
s32 index;
s32 numFonts;
@ -620,7 +621,7 @@ s32 AudioLoad_SyncInitSeqPlayerInternal(s32 playerIdx, s32 seqId, s32 arg2) {
seqPlayer->scriptState.depth = 0;
seqPlayer->delay = 0;
seqPlayer->finished = false;
seqPlayer->playerIdx = playerIdx;
seqPlayer->playerIndex = playerIndex;
//! @bug missing return (but the return value is not used so it's not UB)
}
@ -628,7 +629,7 @@ u8* AudioLoad_SyncLoadSeq(s32 seqId) {
s32 pad;
s32 didAllocate;
if (gAudioContext.seqLoadStatus[AudioLoad_GetRealTableIndex(SEQUENCE_TABLE, seqId)] == LOAD_STATUS_1) {
if (gAudioContext.seqLoadStatus[AudioLoad_GetRealTableIndex(SEQUENCE_TABLE, seqId)] == LOAD_STATUS_IN_PROGRESS) {
return NULL;
}
@ -649,8 +650,8 @@ u32 AudioLoad_TrySyncLoadSampleBank(u32 sampleBankId, u32* outMedium, s32 noLoad
addr = AudioLoad_SearchCaches(SAMPLE_TABLE, realTableId);
if (addr != NULL) {
if (gAudioContext.sampleFontLoadStatus[realTableId] != LOAD_STATUS_1) {
AudioLoad_SetSampleFontLoadStatus(realTableId, LOAD_STATUS_2);
if (gAudioContext.sampleFontLoadStatus[realTableId] != LOAD_STATUS_IN_PROGRESS) {
AudioLoad_SetSampleFontLoadStatus(realTableId, LOAD_STATUS_COMPLETE);
}
*outMedium = MEDIUM_RAM;
@ -682,7 +683,7 @@ SoundFontData* AudioLoad_SyncLoadFont(u32 fontId) {
AudioRelocInfo relocInfo;
s32 realFontId = AudioLoad_GetRealTableIndex(FONT_TABLE, fontId);
if (gAudioContext.fontLoadStatus[realFontId] == LOAD_STATUS_1) {
if (gAudioContext.fontLoadStatus[realFontId] == LOAD_STATUS_IN_PROGRESS) {
return NULL;
}
@ -730,7 +731,7 @@ void* AudioLoad_SyncLoad(s32 tableType, u32 id, s32* didAllocate) {
ramAddr = AudioLoad_SearchCaches(tableType, realId);
if (ramAddr != NULL) {
*didAllocate = false;
loadStatus = LOAD_STATUS_2;
loadStatus = LOAD_STATUS_COMPLETE;
} else {
table = AudioLoad_GetLoadTable(tableType);
size = table->entries[realId].size;
@ -793,7 +794,7 @@ void* AudioLoad_SyncLoad(s32 tableType, u32 id, s32* didAllocate) {
AudioLoad_SyncDma(romAddr, ramAddr, size, medium);
}
loadStatus = (cachePolicy == CACHE_LOAD_PERMANENT) ? LOAD_STATUS_5 : LOAD_STATUS_2;
loadStatus = (cachePolicy == CACHE_LOAD_PERMANENT) ? LOAD_STATUS_PERMANENT : LOAD_STATUS_COMPLETE;
}
switch (tableType) {
@ -1032,19 +1033,19 @@ void* AudioLoad_AsyncLoadInner(s32 tableType, s32 id, s32 nChunks, s32 retData,
switch (tableType) {
case SEQUENCE_TABLE:
if (gAudioContext.seqLoadStatus[realId] == LOAD_STATUS_1) {
if (gAudioContext.seqLoadStatus[realId] == LOAD_STATUS_IN_PROGRESS) {
return NULL;
}
break;
case FONT_TABLE:
if (gAudioContext.fontLoadStatus[realId] == LOAD_STATUS_1) {
if (gAudioContext.fontLoadStatus[realId] == LOAD_STATUS_IN_PROGRESS) {
return NULL;
}
break;
case SAMPLE_TABLE:
if (gAudioContext.sampleFontLoadStatus[realId] == LOAD_STATUS_1) {
if (gAudioContext.sampleFontLoadStatus[realId] == LOAD_STATUS_IN_PROGRESS) {
return NULL;
}
break;
@ -1052,8 +1053,8 @@ void* AudioLoad_AsyncLoadInner(s32 tableType, s32 id, s32 nChunks, s32 retData,
ramAddr = AudioLoad_SearchCaches(tableType, realId);
if (ramAddr != NULL) {
loadStatus = LOAD_STATUS_2;
osSendMesg(retQueue, MK_ASYNC_MSG(retData, 0, 0, LOAD_STATUS_0), OS_MESG_NOBLOCK);
loadStatus = LOAD_STATUS_COMPLETE;
osSendMesg(retQueue, MK_ASYNC_MSG(retData, 0, 0, LOAD_STATUS_NOT_LOADED), OS_MESG_NOBLOCK);
} else {
table = AudioLoad_GetLoadTable(tableType);
size = table->entries[realId].size;
@ -1061,7 +1062,7 @@ void* AudioLoad_AsyncLoadInner(s32 tableType, s32 id, s32 nChunks, s32 retData,
medium = table->entries[id].medium;
cachePolicy = table->entries[id].cachePolicy;
romAddr = table->entries[realId].romAddr;
loadStatus = LOAD_STATUS_2;
loadStatus = LOAD_STATUS_COMPLETE;
switch (cachePolicy) {
case CACHE_LOAD_PERMANENT:
@ -1069,7 +1070,7 @@ void* AudioLoad_AsyncLoadInner(s32 tableType, s32 id, s32 nChunks, s32 retData,
if (ramAddr == NULL) {
return ramAddr;
}
loadStatus = LOAD_STATUS_5;
loadStatus = LOAD_STATUS_PERMANENT;
break;
case CACHE_LOAD_PERSISTENT:
@ -1119,7 +1120,7 @@ void* AudioLoad_AsyncLoadInner(s32 tableType, s32 id, s32 nChunks, s32 retData,
MK_ASYNC_MSG(retData, tableType, realId, loadStatus));
}
loadStatus = LOAD_STATUS_1;
loadStatus = LOAD_STATUS_IN_PROGRESS;
}
switch (tableType) {

View File

@ -98,7 +98,7 @@ void AudioPlayback_InitNoteSub(Note* note, NoteSubEu* sub, NoteSubAttributes* at
sub->targetVolLeft = (s32)((vel * volLeft) * (0x1000 - 0.001f));
sub->targetVolRight = (s32)((vel * volRight) * (0x1000 - 0.001f));
sub->unk_2 = attrs->unk_1;
sub->gain = attrs->gain;
sub->filter = attrs->filter;
sub->unk_07 = attrs->unk_14;
sub->unk_0E = attrs->unk_16;
@ -125,7 +125,7 @@ void AudioPlayback_NoteSetResamplingRate(NoteSubEu* noteSubEu, f32 resamplingRat
}
void AudioPlayback_NoteInit(Note* note) {
if (note->playbackState.parentLayer->adsr.releaseRate == 0) {
if (note->playbackState.parentLayer->adsr.decayIndex == 0) {
AudioEffects_AdsrInit(&note->playbackState.adsr, note->playbackState.parentLayer->channel->adsr.envelope,
&note->playbackState.adsrVolScaleUnused);
} else {
@ -189,7 +189,7 @@ void AudioPlayback_ProcessNotes(void) {
playbackState->unk_04 = 1;
continue;
} else if (playbackState->parentLayer->channel->seqPlayer->muted &&
(playbackState->parentLayer->channel->muteBehavior & 0x40)) {
(playbackState->parentLayer->channel->muteFlags & MUTE_FLAGS_STOP_NOTES)) {
// do nothing
} else {
goto out;
@ -257,7 +257,7 @@ void AudioPlayback_ProcessNotes(void) {
subAttrs.pan = attrs->pan;
subAttrs.reverbVol = attrs->reverb;
subAttrs.stereo = attrs->stereo;
subAttrs.unk_1 = attrs->unk_1;
subAttrs.gain = attrs->gain;
subAttrs.filter = attrs->filter;
subAttrs.unk_14 = attrs->unk_4;
subAttrs.unk_16 = attrs->unk_6;
@ -290,9 +290,9 @@ void AudioPlayback_ProcessNotes(void) {
}
if (layer->unk_0A.s.bit_9 == 1) {
subAttrs.unk_1 = channel->unk_0C;
subAttrs.gain = channel->gain;
} else {
subAttrs.unk_1 = 0;
subAttrs.gain = 0;
if (1) {}
}
@ -301,7 +301,7 @@ void AudioPlayback_ProcessNotes(void) {
subAttrs.unk_16 = channel->unk_20;
bookOffset = channel->bookOffset & 0x7;
if (channel->seqPlayer->muted && (channel->muteBehavior & 8)) {
if (channel->seqPlayer->muted && (channel->muteFlags & MUTE_FLAGS_3)) {
subAttrs.frequency = 0.0f;
subAttrs.velocity = 0.0f;
}
@ -506,9 +506,9 @@ void AudioPlayback_SeqLayerDecayRelease(SequenceLayer* layer, s32 target) {
}
if (layer->unk_0A.s.bit_9 == 1) {
attrs->unk_1 = chan->unk_0C;
attrs->gain = chan->gain;
} else {
attrs->unk_1 = 0;
attrs->gain = 0;
}
attrs->filter = chan->filter;
@ -522,7 +522,7 @@ void AudioPlayback_SeqLayerDecayRelease(SequenceLayer* layer, s32 target) {
attrs->unk_6 = chan->unk_20;
attrs->unk_4 = chan->unk_0F;
if (chan->seqPlayer->muted && (chan->muteBehavior & 8)) {
if (chan->seqPlayer->muted && (chan->muteFlags & MUTE_FLAGS_3)) {
note->noteSubEu.bitField0.finished = true;
}
@ -546,10 +546,10 @@ void AudioPlayback_SeqLayerDecayRelease(SequenceLayer* layer, s32 target) {
} else {
note->playbackState.unk_04 = 1;
note->playbackState.adsr.action.s.decay = true;
if (layer->adsr.releaseRate == 0) {
note->playbackState.adsr.fadeOutVel = gAudioContext.unk_3520[layer->channel->adsr.releaseRate];
if (layer->adsr.decayIndex == 0) {
note->playbackState.adsr.fadeOutVel = gAudioContext.adsrDecayTable[layer->channel->adsr.decayIndex];
} else {
note->playbackState.adsr.fadeOutVel = gAudioContext.unk_3520[layer->adsr.releaseRate];
note->playbackState.adsr.fadeOutVel = gAudioContext.adsrDecayTable[layer->adsr.decayIndex];
}
note->playbackState.adsr.sustain =
((f32)(s32)(layer->channel->adsr.sustain) * note->playbackState.adsr.current) / 256.0f;

File diff suppressed because it is too large Load Diff

View File

@ -3767,41 +3767,41 @@
0x80197138:("AudioEffects_NotePortamentoInit",),
0x80197164:("AudioEffects_AdsrInit",),
0x80197188:("AudioEffects_AdsrUpdate",),
0x801974D0:("func_801974D0",),
0x80197538:("func_80197538",),
0x80197714:("func_80197714",),
0x80197880:("func_80197880",),
0x801979D8:("func_801979D8",),
0x80197A54:("func_80197A54",),
0x801974D0:("AudioSeq_GetScriptControlFlowArgument",),
0x80197538:("AudioSeq_HandleScriptFlowControl",),
0x80197714:("AudioSeq_InitSequenceChannel",),
0x80197880:("AudioSeq_SeqChannelSetLayer",),
0x801979D8:("AudioSeq_SeqLayerDisable",),
0x80197A54:("AudioSeq_SeqLayerFree",),
0x80197AA4:("AudioSeq_SequenceChannelDisable",),
0x80197B14:("func_80197B14",),
0x80197C0C:("func_80197C0C",),
0x80197C8C:("func_80197C8C",),
0x80197B14:("AudioSeq_SequencePlayerSetupChannels",),
0x80197C0C:("AudioSeq_SequencePlayerDisableChannels",),
0x80197C8C:("AudioSeq_SequenceChannelEnable",),
0x80197D24:("AudioSeq_SequencePlayerDisableAsFinished",),
0x80197D4C:("AudioSeq_SequencePlayerDisable",),
0x80197E08:("AudioSeq_AudioListPushBack",),
0x80197E48:("AudioSeq_AudioListPopBack",),
0x80197E88:("func_80197E88",),
0x80197F28:("func_80197F28",),
0x80197F3C:("func_80197F3C",),
0x80197F74:("func_80197F74",),
0x80197FB4:("func_80197FB4",),
0x801980D0:("func_801980D0",),
0x8019815C:("func_8019815C",),
0x8019825C:("func_8019825C",),
0x80198640:("func_80198640",),
0x80198CE0:("func_80198CE0",),
0x801990F4:("func_801990F4",),
0x80199124:("func_80199124",),
0x80199198:("func_80199198",),
0x80199244:("func_80199244",),
0x80199268:("func_80199268",),
0x8019A0BC:("func_8019A0BC",),
0x8019AA3C:("func_8019AA3C",),
0x8019AAF0:("func_8019AAF0",),
0x80197E88:("AudioSeq_InitLayerFreelist",),
0x80197F28:("AudioSeq_ScriptReadU8",),
0x80197F3C:("AudioSeq_ScriptReadS16",),
0x80197F74:("AudioSeq_ScriptReadCompressedU16",),
0x80197FB4:("AudioSeq_SeqLayerProcessScript",),
0x801980D0:("AudioSeq_SeqLayerProcessScriptStep1",),
0x8019815C:("AudioSeq_SeqLayerProcessScriptStep5",),
0x8019825C:("AudioSeq_SeqLayerProcessScriptStep2",),
0x80198640:("AudioSeq_SeqLayerProcessScriptStep4",),
0x80198CE0:("AudioSeq_SeqLayerProcessScriptStep3",),
0x801990F4:("AudioSeq_SetChannelPriorities",),
0x80199124:("AudioSeq_GetInstrument",),
0x80199198:("AudioSeq_SetInstrument",),
0x80199244:("AudioSeq_SequenceChannelSetVolume",),
0x80199268:("AudioSeq_SequenceChannelProcessScript",),
0x8019A0BC:("AudioSeq_SequencePlayerProcessSequence",),
0x8019AA3C:("AudioSeq_ProcessSequences",),
0x8019AAF0:("AudioSeq_SkipForwardSequence",),
0x8019AB40:("AudioSeq_ResetSequencePlayer",),
0x8019AC10:("AudioSeq_InitSequencePlayerChannels",),
0x8019ACEC:("func_8019ACEC",),
0x8019ACEC:("AudioSeq_InitSequencePlayer",),
0x8019ADBC:("AudioSeq_InitSequencePlayers",),
0x8019AE40:("func_8019AE40",),
0x8019AEC0:("func_8019AEC0",),

View File

@ -2252,7 +2252,7 @@
0x801D618C:("D_801D618C","UNK_PTR","",0x4),
0x801D6190:("D_801D6190","f32","",0x4),
0x801D6194:("D_801D6194","UNK_TYPE4","",0x4),
0x801D61A0:("D_801D61A0","u8","[96]",0x60),
0x801D61A0:("sSeqInstructionArgsTable","u8","[96]",0x60),
0x801D6200:("D_801D6200","UNK_TYPE1","",0x1),
0x801D6600:("D_801D6600","UNK_TYPE1","",0x1),
0x801D6608:("D_801D6608","UNK_TYPE1","",0x1),

View File

@ -3283,41 +3283,41 @@ asm/non_matchings/code/audio_effects/AudioEffects_NoteVibratoInit.s,AudioEffects
asm/non_matchings/code/audio_effects/AudioEffects_NotePortamentoInit.s,AudioEffects_NotePortamentoInit,0x80197138,0xB
asm/non_matchings/code/audio_effects/AudioEffects_AdsrInit.s,AudioEffects_AdsrInit,0x80197164,0x9
asm/non_matchings/code/audio_effects/AudioEffects_AdsrUpdate.s,AudioEffects_AdsrUpdate,0x80197188,0xD2
asm/non_matchings/code/audio_seqplayer/func_801974D0.s,func_801974D0,0x801974D0,0x1A
asm/non_matchings/code/audio_seqplayer/func_80197538.s,func_80197538,0x80197538,0x77
asm/non_matchings/code/audio_seqplayer/func_80197714.s,func_80197714,0x80197714,0x5B
asm/non_matchings/code/audio_seqplayer/func_80197880.s,func_80197880,0x80197880,0x56
asm/non_matchings/code/audio_seqplayer/func_801979D8.s,func_801979D8,0x801979D8,0x1F
asm/non_matchings/code/audio_seqplayer/func_80197A54.s,func_80197A54,0x80197A54,0x14
asm/non_matchings/code/audio_seqplayer/AudioSeq_GetScriptControlFlowArgument.s,AudioSeq_GetScriptControlFlowArgument,0x801974D0,0x1A
asm/non_matchings/code/audio_seqplayer/AudioSeq_HandleScriptFlowControl.s,AudioSeq_HandleScriptFlowControl,0x80197538,0x77
asm/non_matchings/code/audio_seqplayer/AudioSeq_InitSequenceChannel.s,AudioSeq_InitSequenceChannel,0x80197714,0x5B
asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqChannelSetLayer.s,AudioSeq_SeqChannelSetLayer,0x80197880,0x56
asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqLayerDisable.s,AudioSeq_SeqLayerDisable,0x801979D8,0x1F
asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqLayerFree.s,AudioSeq_SeqLayerFree,0x80197A54,0x14
asm/non_matchings/code/audio_seqplayer/AudioSeq_SequenceChannelDisable.s,AudioSeq_SequenceChannelDisable,0x80197AA4,0x1C
asm/non_matchings/code/audio_seqplayer/func_80197B14.s,func_80197B14,0x80197B14,0x3E
asm/non_matchings/code/audio_seqplayer/func_80197C0C.s,func_80197C0C,0x80197C0C,0x20
asm/non_matchings/code/audio_seqplayer/func_80197C8C.s,func_80197C8C,0x80197C8C,0x26
asm/non_matchings/code/audio_seqplayer/AudioSeq_SequencePlayerSetupChannels.s,AudioSeq_SequencePlayerSetupChannels,0x80197B14,0x3E
asm/non_matchings/code/audio_seqplayer/AudioSeq_SequencePlayerDisableChannels.s,AudioSeq_SequencePlayerDisableChannels,0x80197C0C,0x20
asm/non_matchings/code/audio_seqplayer/AudioSeq_SequenceChannelEnable.s,AudioSeq_SequenceChannelEnable,0x80197C8C,0x26
asm/non_matchings/code/audio_seqplayer/AudioSeq_SequencePlayerDisableAsFinished.s,AudioSeq_SequencePlayerDisableAsFinished,0x80197D24,0xA
asm/non_matchings/code/audio_seqplayer/AudioSeq_SequencePlayerDisable.s,AudioSeq_SequencePlayerDisable,0x80197D4C,0x2F
asm/non_matchings/code/audio_seqplayer/AudioSeq_AudioListPushBack.s,AudioSeq_AudioListPushBack,0x80197E08,0x10
asm/non_matchings/code/audio_seqplayer/AudioSeq_AudioListPopBack.s,AudioSeq_AudioListPopBack,0x80197E48,0x10
asm/non_matchings/code/audio_seqplayer/func_80197E88.s,func_80197E88,0x80197E88,0x28
asm/non_matchings/code/audio_seqplayer/func_80197F28.s,func_80197F28,0x80197F28,0x5
asm/non_matchings/code/audio_seqplayer/func_80197F3C.s,func_80197F3C,0x80197F3C,0xE
asm/non_matchings/code/audio_seqplayer/func_80197F74.s,func_80197F74,0x80197F74,0x10
asm/non_matchings/code/audio_seqplayer/func_80197FB4.s,func_80197FB4,0x80197FB4,0x47
asm/non_matchings/code/audio_seqplayer/func_801980D0.s,func_801980D0,0x801980D0,0x23
asm/non_matchings/code/audio_seqplayer/func_8019815C.s,func_8019815C,0x8019815C,0x40
asm/non_matchings/code/audio_seqplayer/func_8019825C.s,func_8019825C,0x8019825C,0xF9
asm/non_matchings/code/audio_seqplayer/func_80198640.s,func_80198640,0x80198640,0x1A8
asm/non_matchings/code/audio_seqplayer/func_80198CE0.s,func_80198CE0,0x80198CE0,0x105
asm/non_matchings/code/audio_seqplayer/func_801990F4.s,func_801990F4,0x801990F4,0xC
asm/non_matchings/code/audio_seqplayer/func_80199124.s,func_80199124,0x80199124,0x1D
asm/non_matchings/code/audio_seqplayer/func_80199198.s,func_80199198,0x80199198,0x2B
asm/non_matchings/code/audio_seqplayer/func_80199244.s,func_80199244,0x80199244,0x9
asm/non_matchings/code/audio_seqplayer/func_80199268.s,func_80199268,0x80199268,0x395
asm/non_matchings/code/audio_seqplayer/func_8019A0BC.s,func_8019A0BC,0x8019A0BC,0x260
asm/non_matchings/code/audio_seqplayer/func_8019AA3C.s,func_8019AA3C,0x8019AA3C,0x2D
asm/non_matchings/code/audio_seqplayer/func_8019AAF0.s,func_8019AAF0,0x8019AAF0,0x14
asm/non_matchings/code/audio_seqplayer/AudioSeq_InitLayerFreelist.s,AudioSeq_InitLayerFreelist,0x80197E88,0x28
asm/non_matchings/code/audio_seqplayer/AudioSeq_ScriptReadU8.s,AudioSeq_ScriptReadU8,0x80197F28,0x5
asm/non_matchings/code/audio_seqplayer/AudioSeq_ScriptReadS16.s,AudioSeq_ScriptReadS16,0x80197F3C,0xE
asm/non_matchings/code/audio_seqplayer/AudioSeq_ScriptReadCompressedU16.s,AudioSeq_ScriptReadCompressedU16,0x80197F74,0x10
asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqLayerProcessScript.s,AudioSeq_SeqLayerProcessScript,0x80197FB4,0x47
asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqLayerProcessScriptStep1.s,AudioSeq_SeqLayerProcessScriptStep1,0x801980D0,0x23
asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqLayerProcessScriptStep5.s,AudioSeq_SeqLayerProcessScriptStep5,0x8019815C,0x40
asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqLayerProcessScriptStep2.s,AudioSeq_SeqLayerProcessScriptStep2,0x8019825C,0xF9
asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqLayerProcessScriptStep4.s,AudioSeq_SeqLayerProcessScriptStep4,0x80198640,0x1A8
asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqLayerProcessScriptStep3.s,AudioSeq_SeqLayerProcessScriptStep3,0x80198CE0,0x105
asm/non_matchings/code/audio_seqplayer/AudioSeq_SetChannelPriorities.s,AudioSeq_SetChannelPriorities,0x801990F4,0xC
asm/non_matchings/code/audio_seqplayer/AudioSeq_GetInstrument.s,AudioSeq_GetInstrument,0x80199124,0x1D
asm/non_matchings/code/audio_seqplayer/AudioSeq_SetInstrument.s,AudioSeq_SetInstrument,0x80199198,0x2B
asm/non_matchings/code/audio_seqplayer/AudioSeq_SequenceChannelSetVolume.s,AudioSeq_SequenceChannelSetVolume,0x80199244,0x9
asm/non_matchings/code/audio_seqplayer/AudioSeq_SequenceChannelProcessScript.s,AudioSeq_SequenceChannelProcessScript,0x80199268,0x395
asm/non_matchings/code/audio_seqplayer/AudioSeq_SequencePlayerProcessSequence.s,AudioSeq_SequencePlayerProcessSequence,0x8019A0BC,0x260
asm/non_matchings/code/audio_seqplayer/AudioSeq_ProcessSequences.s,AudioSeq_ProcessSequences,0x8019AA3C,0x2D
asm/non_matchings/code/audio_seqplayer/AudioSeq_SkipForwardSequence.s,AudioSeq_SkipForwardSequence,0x8019AAF0,0x14
asm/non_matchings/code/audio_seqplayer/AudioSeq_ResetSequencePlayer.s,AudioSeq_ResetSequencePlayer,0x8019AB40,0x34
asm/non_matchings/code/audio_seqplayer/AudioSeq_InitSequencePlayerChannels.s,AudioSeq_InitSequencePlayerChannels,0x8019AC10,0x37
asm/non_matchings/code/audio_seqplayer/func_8019ACEC.s,func_8019ACEC,0x8019ACEC,0x34
asm/non_matchings/code/audio_seqplayer/AudioSeq_InitSequencePlayer.s,AudioSeq_InitSequencePlayer,0x8019ACEC,0x34
asm/non_matchings/code/audio_seqplayer/AudioSeq_InitSequencePlayers.s,AudioSeq_InitSequencePlayers,0x8019ADBC,0x21
asm/non_matchings/code/code_8019AE40/func_8019AE40.s,func_8019AE40,0x8019AE40,0x1C
asm/non_matchings/code/code_8019AEC0/func_8019AEC0.s,func_8019AEC0,0x8019AEC0,0x10

1 asm/non_matchings/code/z_en_a_keep/EnAObj_Init.s EnAObj_Init 0x800A5AC0 0x2B
3283 asm/non_matchings/code/audio_effects/AudioEffects_NotePortamentoInit.s AudioEffects_NotePortamentoInit 0x80197138 0xB
3284 asm/non_matchings/code/audio_effects/AudioEffects_AdsrInit.s AudioEffects_AdsrInit 0x80197164 0x9
3285 asm/non_matchings/code/audio_effects/AudioEffects_AdsrUpdate.s AudioEffects_AdsrUpdate 0x80197188 0xD2
3286 asm/non_matchings/code/audio_seqplayer/func_801974D0.s asm/non_matchings/code/audio_seqplayer/AudioSeq_GetScriptControlFlowArgument.s func_801974D0 AudioSeq_GetScriptControlFlowArgument 0x801974D0 0x1A
3287 asm/non_matchings/code/audio_seqplayer/func_80197538.s asm/non_matchings/code/audio_seqplayer/AudioSeq_HandleScriptFlowControl.s func_80197538 AudioSeq_HandleScriptFlowControl 0x80197538 0x77
3288 asm/non_matchings/code/audio_seqplayer/func_80197714.s asm/non_matchings/code/audio_seqplayer/AudioSeq_InitSequenceChannel.s func_80197714 AudioSeq_InitSequenceChannel 0x80197714 0x5B
3289 asm/non_matchings/code/audio_seqplayer/func_80197880.s asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqChannelSetLayer.s func_80197880 AudioSeq_SeqChannelSetLayer 0x80197880 0x56
3290 asm/non_matchings/code/audio_seqplayer/func_801979D8.s asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqLayerDisable.s func_801979D8 AudioSeq_SeqLayerDisable 0x801979D8 0x1F
3291 asm/non_matchings/code/audio_seqplayer/func_80197A54.s asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqLayerFree.s func_80197A54 AudioSeq_SeqLayerFree 0x80197A54 0x14
3292 asm/non_matchings/code/audio_seqplayer/AudioSeq_SequenceChannelDisable.s AudioSeq_SequenceChannelDisable 0x80197AA4 0x1C
3293 asm/non_matchings/code/audio_seqplayer/func_80197B14.s asm/non_matchings/code/audio_seqplayer/AudioSeq_SequencePlayerSetupChannels.s func_80197B14 AudioSeq_SequencePlayerSetupChannels 0x80197B14 0x3E
3294 asm/non_matchings/code/audio_seqplayer/func_80197C0C.s asm/non_matchings/code/audio_seqplayer/AudioSeq_SequencePlayerDisableChannels.s func_80197C0C AudioSeq_SequencePlayerDisableChannels 0x80197C0C 0x20
3295 asm/non_matchings/code/audio_seqplayer/func_80197C8C.s asm/non_matchings/code/audio_seqplayer/AudioSeq_SequenceChannelEnable.s func_80197C8C AudioSeq_SequenceChannelEnable 0x80197C8C 0x26
3296 asm/non_matchings/code/audio_seqplayer/AudioSeq_SequencePlayerDisableAsFinished.s AudioSeq_SequencePlayerDisableAsFinished 0x80197D24 0xA
3297 asm/non_matchings/code/audio_seqplayer/AudioSeq_SequencePlayerDisable.s AudioSeq_SequencePlayerDisable 0x80197D4C 0x2F
3298 asm/non_matchings/code/audio_seqplayer/AudioSeq_AudioListPushBack.s AudioSeq_AudioListPushBack 0x80197E08 0x10
3299 asm/non_matchings/code/audio_seqplayer/AudioSeq_AudioListPopBack.s AudioSeq_AudioListPopBack 0x80197E48 0x10
3300 asm/non_matchings/code/audio_seqplayer/func_80197E88.s asm/non_matchings/code/audio_seqplayer/AudioSeq_InitLayerFreelist.s func_80197E88 AudioSeq_InitLayerFreelist 0x80197E88 0x28
3301 asm/non_matchings/code/audio_seqplayer/func_80197F28.s asm/non_matchings/code/audio_seqplayer/AudioSeq_ScriptReadU8.s func_80197F28 AudioSeq_ScriptReadU8 0x80197F28 0x5
3302 asm/non_matchings/code/audio_seqplayer/func_80197F3C.s asm/non_matchings/code/audio_seqplayer/AudioSeq_ScriptReadS16.s func_80197F3C AudioSeq_ScriptReadS16 0x80197F3C 0xE
3303 asm/non_matchings/code/audio_seqplayer/func_80197F74.s asm/non_matchings/code/audio_seqplayer/AudioSeq_ScriptReadCompressedU16.s func_80197F74 AudioSeq_ScriptReadCompressedU16 0x80197F74 0x10
3304 asm/non_matchings/code/audio_seqplayer/func_80197FB4.s asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqLayerProcessScript.s func_80197FB4 AudioSeq_SeqLayerProcessScript 0x80197FB4 0x47
3305 asm/non_matchings/code/audio_seqplayer/func_801980D0.s asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqLayerProcessScriptStep1.s func_801980D0 AudioSeq_SeqLayerProcessScriptStep1 0x801980D0 0x23
3306 asm/non_matchings/code/audio_seqplayer/func_8019815C.s asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqLayerProcessScriptStep5.s func_8019815C AudioSeq_SeqLayerProcessScriptStep5 0x8019815C 0x40
3307 asm/non_matchings/code/audio_seqplayer/func_8019825C.s asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqLayerProcessScriptStep2.s func_8019825C AudioSeq_SeqLayerProcessScriptStep2 0x8019825C 0xF9
3308 asm/non_matchings/code/audio_seqplayer/func_80198640.s asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqLayerProcessScriptStep4.s func_80198640 AudioSeq_SeqLayerProcessScriptStep4 0x80198640 0x1A8
3309 asm/non_matchings/code/audio_seqplayer/func_80198CE0.s asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqLayerProcessScriptStep3.s func_80198CE0 AudioSeq_SeqLayerProcessScriptStep3 0x80198CE0 0x105
3310 asm/non_matchings/code/audio_seqplayer/func_801990F4.s asm/non_matchings/code/audio_seqplayer/AudioSeq_SetChannelPriorities.s func_801990F4 AudioSeq_SetChannelPriorities 0x801990F4 0xC
3311 asm/non_matchings/code/audio_seqplayer/func_80199124.s asm/non_matchings/code/audio_seqplayer/AudioSeq_GetInstrument.s func_80199124 AudioSeq_GetInstrument 0x80199124 0x1D
3312 asm/non_matchings/code/audio_seqplayer/func_80199198.s asm/non_matchings/code/audio_seqplayer/AudioSeq_SetInstrument.s func_80199198 AudioSeq_SetInstrument 0x80199198 0x2B
3313 asm/non_matchings/code/audio_seqplayer/func_80199244.s asm/non_matchings/code/audio_seqplayer/AudioSeq_SequenceChannelSetVolume.s func_80199244 AudioSeq_SequenceChannelSetVolume 0x80199244 0x9
3314 asm/non_matchings/code/audio_seqplayer/func_80199268.s asm/non_matchings/code/audio_seqplayer/AudioSeq_SequenceChannelProcessScript.s func_80199268 AudioSeq_SequenceChannelProcessScript 0x80199268 0x395
3315 asm/non_matchings/code/audio_seqplayer/func_8019A0BC.s asm/non_matchings/code/audio_seqplayer/AudioSeq_SequencePlayerProcessSequence.s func_8019A0BC AudioSeq_SequencePlayerProcessSequence 0x8019A0BC 0x260
3316 asm/non_matchings/code/audio_seqplayer/func_8019AA3C.s asm/non_matchings/code/audio_seqplayer/AudioSeq_ProcessSequences.s func_8019AA3C AudioSeq_ProcessSequences 0x8019AA3C 0x2D
3317 asm/non_matchings/code/audio_seqplayer/func_8019AAF0.s asm/non_matchings/code/audio_seqplayer/AudioSeq_SkipForwardSequence.s func_8019AAF0 AudioSeq_SkipForwardSequence 0x8019AAF0 0x14
3318 asm/non_matchings/code/audio_seqplayer/AudioSeq_ResetSequencePlayer.s AudioSeq_ResetSequencePlayer 0x8019AB40 0x34
3319 asm/non_matchings/code/audio_seqplayer/AudioSeq_InitSequencePlayerChannels.s AudioSeq_InitSequencePlayerChannels 0x8019AC10 0x37
3320 asm/non_matchings/code/audio_seqplayer/func_8019ACEC.s asm/non_matchings/code/audio_seqplayer/AudioSeq_InitSequencePlayer.s func_8019ACEC AudioSeq_InitSequencePlayer 0x8019ACEC 0x34
3321 asm/non_matchings/code/audio_seqplayer/AudioSeq_InitSequencePlayers.s AudioSeq_InitSequencePlayers 0x8019ADBC 0x21
3322 asm/non_matchings/code/code_8019AE40/func_8019AE40.s func_8019AE40 0x8019AE40 0x1C
3323 asm/non_matchings/code/code_8019AEC0/func_8019AEC0.s func_8019AEC0 0x8019AEC0 0x10