mirror of https://github.com/zeldaret/mm.git
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:
parent
fed7cec4ed
commit
601f44cb7f
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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[];
|
||||
|
|
|
|||
|
|
@ -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
1
spec
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 };
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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(¬e->playbackState.adsr, note->playbackState.parentLayer->channel->adsr.envelope,
|
||||
¬e->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
|
|
@ -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",),
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
Loading…
Reference in New Issue