mirror of https://github.com/zeldaret/mm.git
Audio_Effects OK and Documented (#549)
* Audio_Effects OK * Remove duplicate * PR Suggestion * Small cleanup * Small Touchup
This commit is contained in:
parent
332c71c9b1
commit
9e6a6eee4c
|
|
@ -3562,16 +3562,12 @@ void Audio_WritebackDCache(void* buf, size_t size);
|
|||
// void func_801964F8(void);
|
||||
// void func_801965F0(void);
|
||||
// void func_801968C4(void);
|
||||
// void func_80196A00(void);
|
||||
// void func_80196BC8(void);
|
||||
// void func_80196D20(void);
|
||||
// void func_80196D7C(void);
|
||||
// void func_80196DB4(void);
|
||||
// void func_80196FEC(void);
|
||||
// void func_80197048(void);
|
||||
// void func_80197138(void);
|
||||
// void func_80197164(void);
|
||||
// void func_80197188(void);
|
||||
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);
|
||||
f32 AudioEffects_AdsrUpdate(AdsrState* adsr);
|
||||
// void func_801974D0(void);
|
||||
// void func_80197538(void);
|
||||
// void func_80197714(void);
|
||||
|
|
@ -3583,7 +3579,7 @@ void Audio_WritebackDCache(void* buf, size_t size);
|
|||
// void func_80197C0C(void);
|
||||
// void func_80197C8C(void);
|
||||
// void func_80197D24(void);
|
||||
// void func_80197D4C(void);
|
||||
void AudioSeq_SequencePlayerDisable(SequencePlayer* seqPlayer);
|
||||
// void func_80197E08(void);
|
||||
// void func_80197E48(void);
|
||||
// void func_80197E88(void);
|
||||
|
|
|
|||
|
|
@ -1642,10 +1642,10 @@ extern MtxF gIdentityMtxF;
|
|||
// extern UNK_TYPE1 D_801D4790;
|
||||
// extern UNK_TYPE1 D_801D4990;
|
||||
// extern UNK_TYPE1 D_801D4B90;
|
||||
extern UNK_PTR D_801D4D90;
|
||||
extern s16* gWaveSamples[9];
|
||||
extern UNK_PTR D_801D4D98;
|
||||
extern UNK_PTR D_801D4DB0;
|
||||
// extern UNK_TYPE1 D_801D4DB4;
|
||||
extern f32 gBendPitchOneOctaveFrequencies[256];
|
||||
// extern UNK_TYPE1 D_801D4FB4;
|
||||
// extern UNK_TYPE4 D_801D51B4;
|
||||
// extern UNK_TYPE4 D_801D53B4;
|
||||
|
|
@ -3623,131 +3623,7 @@ extern SoundRequest D_801FE7C0[1];
|
|||
// extern UNK_TYPE1 D_80200BCC;
|
||||
// extern UNK_TYPE1 D_80200BCE;
|
||||
// extern UNK_TYPE1 D_80200BD0;
|
||||
// extern UNK_TYPE1 D_80200C70;
|
||||
// extern UNK_TYPE1 D_80200C71;
|
||||
// extern UNK_TYPE1 D_80200C76;
|
||||
// extern UNK_TYPE1 D_80200C78;
|
||||
// extern UNK_TYPE1 D_80200C7C;
|
||||
// extern UNK_TYPE1 D_80200C80;
|
||||
// extern UNK_TYPE1 D_80200C92;
|
||||
// extern UNK_TYPE1 D_80200C94;
|
||||
// extern UNK_TYPE1 D_80200C98;
|
||||
// extern UNK_TYPE1 D_80200C9A;
|
||||
// extern UNK_TYPE1 D_80200C9E;
|
||||
// extern UNK_TYPE1 D_80200CA0;
|
||||
// extern UNK_TYPE1 D_80200CF0;
|
||||
// extern UNK_TYPE1 D_80200D38;
|
||||
// extern UNK_TYPE1 D_80200D70;
|
||||
// extern UNK_TYPE1 D_802011F0;
|
||||
// extern UNK_TYPE1 D_8020178C;
|
||||
// extern UNK_TYPE1 D_802017B0;
|
||||
// extern UNK_TYPE1 D_80201D68;
|
||||
// extern UNK_TYPE1 D_80201D6C;
|
||||
// extern UNK_TYPE1 D_802023FC;
|
||||
// extern UNK_TYPE1 D_80202878;
|
||||
// extern UNK_TYPE1 D_80202880;
|
||||
// extern UNK_TYPE1 D_802028BC;
|
||||
extern OSMesgQueue D_80202980;
|
||||
// extern UNK_TYPE1 D_802029D8;
|
||||
extern OSMesgQueue D_80202AB0;
|
||||
extern OSMesg D_80202AC8[0x10];
|
||||
extern OSMesgQueue D_80202B08;
|
||||
extern OSMesg D_80202B20[0x10];
|
||||
extern OSMesgQueue D_80202B60;
|
||||
extern OSMesg D_80202B78[0x40];
|
||||
extern OSMesgQueue D_80203278;
|
||||
extern OSMesg D_80203290[1];
|
||||
// extern UNK_TYPE1 D_80203294;
|
||||
// extern UNK_TYPE1 D_802034C0;
|
||||
// extern UNK_TYPE1 D_802034C4;
|
||||
// extern UNK_TYPE1 D_802034C8;
|
||||
// extern UNK_TYPE4 D_802034D0;
|
||||
// extern UNK_TYPE1 D_802034D4;
|
||||
// extern UNK_TYPE1 D_802034D8;
|
||||
// extern UNK_TYPE1 D_802034DC;
|
||||
// extern UNK_TYPE1 D_802034E8;
|
||||
// extern UNK_TYPE2 D_802034F0;
|
||||
// extern UNK_TYPE1 D_802034F8;
|
||||
// extern UNK_TYPE1 D_802034FC;
|
||||
// extern UNK_TYPE1 D_80203500;
|
||||
// extern UNK_TYPE4 D_80203528;
|
||||
// extern UNK_TYPE1 D_8020352C;
|
||||
// extern UNK_TYPE1 D_8020352E;
|
||||
// extern UNK_TYPE1 D_80203530;
|
||||
// extern UNK_TYPE4 D_8020360C;
|
||||
// extern UNK_TYPE1 D_80203618;
|
||||
// extern UNK_TYPE1 D_8020361C;
|
||||
// extern UNK_TYPE1 D_80203620;
|
||||
// extern UNK_TYPE1 D_80203624;
|
||||
// extern UNK_TYPE1 D_80203628;
|
||||
// extern UNK_TYPE1 D_80203630;
|
||||
// extern UNK_TYPE1 D_80203640;
|
||||
// extern UNK_TYPE1 D_80203650;
|
||||
// extern UNK_TYPE1 D_80203660;
|
||||
// extern UNK_TYPE1 D_80203690;
|
||||
// extern UNK_TYPE1 D_802036A0;
|
||||
// extern UNK_TYPE1 D_802036B0;
|
||||
// extern UNK_TYPE1 D_802036C0;
|
||||
// extern UNK_TYPE1 D_802036C4;
|
||||
// extern UNK_TYPE1 D_80203794;
|
||||
// extern UNK_TYPE1 D_80203798;
|
||||
// extern UNK_TYPE1 D_802037D0;
|
||||
// extern UNK_TYPE1 D_802037D4;
|
||||
// extern UNK_TYPE1 D_802038A4;
|
||||
// extern UNK_TYPE1 D_802038A8;
|
||||
// extern UNK_TYPE1 D_802038C2;
|
||||
// extern UNK_TYPE1 D_802038CE;
|
||||
// extern UNK_TYPE1 D_802038E0;
|
||||
// extern UNK_TYPE1 D_802038E4;
|
||||
// extern UNK_TYPE1 D_80203970;
|
||||
// extern UNK_TYPE1 D_802039B4;
|
||||
// extern UNK_TYPE1 D_802039B8;
|
||||
// extern UNK_TYPE1 D_802039D2;
|
||||
// extern UNK_TYPE1 D_802039DE;
|
||||
// extern UNK_TYPE1 D_802039F0;
|
||||
// extern UNK_TYPE1 D_802039FC;
|
||||
// extern UNK_TYPE1 D_80203B80;
|
||||
// extern UNK_TYPE1 D_80203B88;
|
||||
// extern UNK_TYPE1 D_80203B90;
|
||||
// extern UNK_TYPE1 D_80204590;
|
||||
// extern UNK_TYPE1 D_80204594;
|
||||
// extern UNK_TYPE1 D_80204598;
|
||||
// extern UNK_TYPE1 D_802045A4;
|
||||
// extern UNK_TYPE1 D_80204FA4;
|
||||
// extern UNK_TYPE1 D_80204FA8;
|
||||
// extern UNK_TYPE1 D_80204FB4;
|
||||
// extern UNK_TYPE1 D_80204FB8;
|
||||
// extern UNK_TYPE1 D_80204FC0;
|
||||
// extern UNK_TYPE1 D_80204FCC;
|
||||
// extern UNK_TYPE1 D_80204FD8;
|
||||
// extern UNK_TYPE1 D_80205008;
|
||||
// extern UNK_TYPE1 D_80205038;
|
||||
// extern UNK_TYPE1 D_802050B9;
|
||||
// extern UNK_TYPE1 D_802050C0;
|
||||
// extern UNK_TYPE1 D_802050C4;
|
||||
// extern UNK_TYPE4 D_802050CC;
|
||||
// extern UNK_TYPE4 D_802050D0;
|
||||
// extern UNK_TYPE1 D_80205228;
|
||||
// extern UNK_TYPE1 D_8020522B;
|
||||
// extern UNK_TYPE1 D_80205390;
|
||||
// extern UNK_TYPE1 D_802053C8;
|
||||
// extern UNK_TYPE1 D_802057B0;
|
||||
// extern UNK_TYPE1 D_80205830;
|
||||
// extern UNK_TYPE1 D_802084B0;
|
||||
// extern UNK_TYPE1 D_80208530;
|
||||
// extern UNK_TYPE1 D_80208598;
|
||||
// extern UNK_TYPE1 D_802085A8;
|
||||
// extern UNK_TYPE1 D_802085B8;
|
||||
// extern UNK_TYPE1 D_802085C8;
|
||||
// extern UNK_TYPE1 D_802085D8;
|
||||
// extern UNK_TYPE1 D_802085F8;
|
||||
// extern UNK_TYPE1 D_802085FC;
|
||||
// extern UNK_TYPE1 D_80208604;
|
||||
// extern UNK_TYPE1 D_8020861C;
|
||||
// extern UNK_TYPE1 D_80208634;
|
||||
// extern UNK_TYPE1 D_8020864C;
|
||||
// extern UNK_TYPE1 D_80208650;
|
||||
// extern UNK_TYPE1 D_80208654;
|
||||
extern AudioContext gAudioContext; // at 0x80200C70
|
||||
// extern UNK_TYPE4 D_80208E68;
|
||||
// extern UNK_TYPE4 D_80208E6C;
|
||||
// extern UNK_TYPE4 D_80208E70;
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@
|
|||
|
||||
#define MAX_CHANNELS_PER_BANK 3
|
||||
|
||||
#define AUDIO_LERPIMP(v0, v1, t) (v0 + ((v1 - v0) * t))
|
||||
|
||||
#define ADSR_DISABLE 0
|
||||
#define ADSR_HANG -1
|
||||
#define ADSR_GOTO -2
|
||||
|
|
@ -154,10 +156,10 @@ typedef struct NotePool {
|
|||
// extrapolates exponentially in the wrong direction in that case, but that
|
||||
// doesn't prevent seqplayer from doing it, AFAICT.
|
||||
typedef struct {
|
||||
/* 0x00 */ u8 mode; // bit 0x80 denotes something; the rest are an index 0-5
|
||||
/* 0x02 */ u16 cur;
|
||||
/* 0x04 */ u16 speed;
|
||||
/* 0x08 */ f32 extent;
|
||||
/* 0x0 */ u8 mode; // bit 0x80 denotes something; the rest are an index 0-5
|
||||
/* 0x2 */ u16 cur;
|
||||
/* 0x4 */ u16 speed;
|
||||
/* 0x8 */ f32 extent;
|
||||
} Portamento; // size = 0xC
|
||||
|
||||
typedef struct {
|
||||
|
|
@ -298,7 +300,7 @@ typedef struct {
|
|||
/* 0x000 */ u8 fontDmaInProgress : 1;
|
||||
/* 0x000 */ u8 recalculateVolume : 1;
|
||||
/* 0x000 */ u8 stopScript : 1;
|
||||
/* 0x000 */ u8 unk_0b1 : 1;
|
||||
/* 0x000 */ u8 applyBend : 1;
|
||||
/* 0x001 */ u8 state;
|
||||
/* 0x002 */ u8 noteAllocPolicy;
|
||||
/* 0x003 */ u8 muteBehavior;
|
||||
|
|
@ -324,7 +326,7 @@ typedef struct {
|
|||
/* 0x028 */ f32 muteVolumeScale;
|
||||
/* 0x02C */ f32 fadeVolumeScale;
|
||||
/* 0x030 */ f32 appliedFadeVolume;
|
||||
/* 0x034 */ f32 unk_34;
|
||||
/* 0x034 */ f32 bend;
|
||||
/* 0x038 */ struct SequenceChannel* channels[16];
|
||||
/* 0x078 */ SeqScriptState scriptState;
|
||||
/* 0x094 */ u8* shortNoteVelocityTable;
|
||||
|
|
@ -402,17 +404,6 @@ typedef struct VibratoSubStruct {
|
|||
/* 0xC */ u16 vibratoDelay;
|
||||
} VibratoSubStruct; // size = 0xE
|
||||
|
||||
typedef struct SequenceChannelSubStruct {
|
||||
/* 0x0 */ u8 enabled : 1;
|
||||
/* 0x0 */ u8 finished : 1;
|
||||
/* 0x0 */ u8 stopScript : 1;
|
||||
/* 0x0 */ u8 stopSomething2 : 1; // sets SequenceLayer.stopSomething
|
||||
/* 0x0 */ u8 hasInstrument : 1;
|
||||
/* 0x0 */ u8 stereoHeadsetEffects : 1;
|
||||
/* 0x0 */ u8 largeNotes : 1; // notes specify duration and velocity
|
||||
/* 0x0 */ u8 unused : 1;
|
||||
} SequenceChannelSubStruct; // size = 0x1
|
||||
|
||||
// Also known as a SubTrack, according to sm64 debug strings.
|
||||
typedef struct SequenceChannel {
|
||||
/* 0x00 */ u8 enabled : 1;
|
||||
|
|
@ -530,7 +521,7 @@ typedef struct SequenceLayer {
|
|||
/* 0x30 */ Portamento portamento;
|
||||
/* 0x3C */ struct Note* note;
|
||||
/* 0x40 */ f32 freqScale;
|
||||
/* 0x44 */ f32 unk_34;
|
||||
/* 0x44 */ f32 bend;
|
||||
/* 0x48 */ f32 velocitySquare2;
|
||||
/* 0x4C */ f32 velocitySquare; // not sure which one of those corresponds to the sm64 original
|
||||
/* 0x50 */ f32 noteVelocity;
|
||||
|
|
|
|||
1
spec
1
spec
|
|
@ -635,7 +635,6 @@ beginseg
|
|||
include "build/data/code/code_80194790.data.o"
|
||||
include "build/src/code/audio/audio_playback.o"
|
||||
include "build/src/code/audio/audio_effects.o"
|
||||
include "build/data/code/audio_effects.data.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"
|
||||
|
|
|
|||
|
|
@ -1,21 +1,341 @@
|
|||
#include "global.h"
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_effects/func_80196A00.s")
|
||||
void AudioEffects_SequenceChannelProcessSound(SequenceChannel* channel, s32 recalculateVolume, s32 applyBend) {
|
||||
f32 channelVolume;
|
||||
f32 chanFreqScale;
|
||||
s32 i;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_effects/func_80196BC8.s")
|
||||
if (channel->changes.s.volume || recalculateVolume) {
|
||||
channelVolume = channel->volume * channel->volumeScale * channel->seqPlayer->appliedFadeVolume;
|
||||
if (channel->seqPlayer->muted && (channel->muteBehavior & 0x20)) {
|
||||
channelVolume = channel->seqPlayer->muteVolumeScale * channelVolume;
|
||||
}
|
||||
channel->appliedVolume = channelVolume * channelVolume;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_effects/func_80196D20.s")
|
||||
if (channel->changes.s.pan) {
|
||||
channel->pan = channel->newPan * channel->panChannelWeight;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_effects/func_80196D7C.s")
|
||||
chanFreqScale = channel->freqScale;
|
||||
if (applyBend) {
|
||||
chanFreqScale *= channel->seqPlayer->bend;
|
||||
channel->changes.s.freqScale = true;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_effects/func_80196DB4.s")
|
||||
for (i = 0; i < ARRAY_COUNT(channel->layers); i++) {
|
||||
SequenceLayer* layer = channel->layers[i];
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_effects/func_80196FEC.s")
|
||||
if (layer != NULL && layer->enabled && layer->note != NULL) {
|
||||
if (layer->notePropertiesNeedInit) {
|
||||
layer->noteFreqScale = layer->freqScale * chanFreqScale;
|
||||
layer->noteVelocity = layer->velocitySquare2 * channel->appliedVolume;
|
||||
layer->notePan = (channel->pan + layer->pan * (0x80 - channel->panChannelWeight)) >> 7;
|
||||
layer->notePropertiesNeedInit = false;
|
||||
} else {
|
||||
if (channel->changes.s.freqScale) {
|
||||
layer->noteFreqScale = layer->freqScale * chanFreqScale;
|
||||
}
|
||||
if (channel->changes.s.volume || recalculateVolume) {
|
||||
layer->noteVelocity = layer->velocitySquare2 * channel->appliedVolume;
|
||||
}
|
||||
if (channel->changes.s.pan) {
|
||||
layer->notePan = (channel->pan + layer->pan * (0x80 - channel->panChannelWeight)) >> 7;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
channel->changes.asByte = 0;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_effects/func_80197048.s")
|
||||
void AudioEffects_SequencePlayerProcessSound(SequencePlayer* seqPlayer) {
|
||||
s32 i;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_effects/func_80197138.s")
|
||||
if ((seqPlayer->fadeTimer != 0) && (seqPlayer->skipTicks == 0)) {
|
||||
seqPlayer->fadeVolume += seqPlayer->fadeVelocity;
|
||||
seqPlayer->recalculateVolume = true;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_effects/func_80197164.s")
|
||||
if (seqPlayer->fadeVolume > 1.0f) {
|
||||
seqPlayer->fadeVolume = 1.0f;
|
||||
}
|
||||
if (seqPlayer->fadeVolume < 0.0f) {
|
||||
seqPlayer->fadeVolume = 0.0f;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_effects/func_80197188.s")
|
||||
seqPlayer->fadeTimer--;
|
||||
if (seqPlayer->fadeTimer == 0 && seqPlayer->state == 2) {
|
||||
AudioSeq_SequencePlayerDisable(seqPlayer);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (seqPlayer->recalculateVolume) {
|
||||
seqPlayer->appliedFadeVolume = seqPlayer->fadeVolume * seqPlayer->fadeVolumeScale;
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(seqPlayer->channels); i++) {
|
||||
if (seqPlayer->channels[i]->enabled == true) {
|
||||
AudioEffects_SequenceChannelProcessSound(seqPlayer->channels[i], seqPlayer->recalculateVolume,
|
||||
seqPlayer->applyBend);
|
||||
}
|
||||
}
|
||||
|
||||
seqPlayer->recalculateVolume = false;
|
||||
}
|
||||
|
||||
f32 AudioEffects_GetPortamentoFreqScale(Portamento* portamento) {
|
||||
u32 loResCur;
|
||||
f32 portamentoFreq;
|
||||
|
||||
portamento->cur += portamento->speed;
|
||||
loResCur = (portamento->cur >> 8) & 0xFF;
|
||||
|
||||
if (loResCur >= 127) {
|
||||
loResCur = 127;
|
||||
portamento->mode = 0;
|
||||
}
|
||||
|
||||
portamentoFreq = AUDIO_LERPIMP(1.0f, gBendPitchOneOctaveFrequencies[loResCur + 128], portamento->extent);
|
||||
|
||||
return portamentoFreq;
|
||||
}
|
||||
|
||||
s16 AudioEffects_GetVibratoPitchChange(VibratoState* vib) {
|
||||
s32 index;
|
||||
|
||||
vib->time += (s32)vib->rate;
|
||||
index = (vib->time >> 10) & 0x3F;
|
||||
return vib->curve[index];
|
||||
}
|
||||
|
||||
f32 AudioEffects_GetVibratoFreqScale(VibratoState* vib) {
|
||||
static f32 activeVibratoFreqScaleSum = 0.0f;
|
||||
static s32 activeVibratoCount = 0;
|
||||
f32 pitchChange;
|
||||
f32 extent;
|
||||
f32 invExtent;
|
||||
f32 result;
|
||||
f32 scaledExtent;
|
||||
VibratoSubStruct* subVib = vib->vibSubStruct;
|
||||
|
||||
if (vib->delay != 0) {
|
||||
vib->delay--;
|
||||
return 1.0f;
|
||||
}
|
||||
|
||||
if (subVib != NULL) {
|
||||
if (vib->extentChangeTimer) {
|
||||
if (vib->extentChangeTimer == 1) {
|
||||
vib->extent = (s32)subVib->vibratoExtentTarget;
|
||||
} else {
|
||||
vib->extent += ((s32)subVib->vibratoExtentTarget - vib->extent) / (s32)vib->extentChangeTimer;
|
||||
}
|
||||
|
||||
vib->extentChangeTimer--;
|
||||
} else if (subVib->vibratoExtentTarget != (s32)vib->extent) {
|
||||
if ((vib->extentChangeTimer = subVib->vibratoExtentChangeDelay) == 0) {
|
||||
vib->extent = (s32)subVib->vibratoExtentTarget;
|
||||
}
|
||||
}
|
||||
|
||||
if (vib->rateChangeTimer) {
|
||||
if (vib->rateChangeTimer == 1) {
|
||||
vib->rate = (s32)subVib->vibratoRateTarget;
|
||||
} else {
|
||||
vib->rate += ((s32)subVib->vibratoRateTarget - vib->rate) / (s32)vib->rateChangeTimer;
|
||||
}
|
||||
|
||||
vib->rateChangeTimer--;
|
||||
} else if (subVib->vibratoRateTarget != (s32)vib->rate) {
|
||||
if ((vib->rateChangeTimer = subVib->vibratoRateChangeDelay) == 0) {
|
||||
vib->rate = (s32)subVib->vibratoRateTarget;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (vib->extent == 0.0f) {
|
||||
return 1.0f;
|
||||
}
|
||||
|
||||
pitchChange = AudioEffects_GetVibratoPitchChange(vib) + 32768.0f;
|
||||
scaledExtent = vib->extent / 4096.0f;
|
||||
extent = scaledExtent + 1.0f;
|
||||
invExtent = 1.0f / extent;
|
||||
|
||||
// inverse linear interpolation
|
||||
result = 1.0f / ((extent - invExtent) * pitchChange / 65536.0f + invExtent);
|
||||
|
||||
activeVibratoFreqScaleSum += result;
|
||||
activeVibratoCount++;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void AudioEffects_NoteVibratoUpdate(Note* note) {
|
||||
if (note->playbackState.portamento.mode != 0) {
|
||||
note->playbackState.portamentoFreqScale = AudioEffects_GetPortamentoFreqScale(¬e->playbackState.portamento);
|
||||
}
|
||||
if (note->playbackState.vibratoState.active) {
|
||||
note->playbackState.vibratoFreqScale = AudioEffects_GetVibratoFreqScale(¬e->playbackState.vibratoState);
|
||||
}
|
||||
}
|
||||
|
||||
void AudioEffects_NoteVibratoInit(Note* note) {
|
||||
NotePlaybackState* playbackState = ¬e->playbackState;
|
||||
VibratoState* vib = &playbackState->vibratoState;
|
||||
VibratoSubStruct* subVib;
|
||||
|
||||
vib->active = true;
|
||||
vib->curve = gWaveSamples[2];
|
||||
|
||||
if (playbackState->parentLayer->unk_0A.s.bit_3 == 1) {
|
||||
vib->vibSubStruct = &playbackState->parentLayer->channel->vibrato;
|
||||
} else {
|
||||
vib->vibSubStruct = &playbackState->parentLayer->vibrato;
|
||||
}
|
||||
|
||||
subVib = vib->vibSubStruct;
|
||||
|
||||
if ((vib->extentChangeTimer = subVib->vibratoExtentChangeDelay) == 0) {
|
||||
vib->extent = (s32)subVib->vibratoExtentTarget;
|
||||
} else {
|
||||
vib->extent = (s32)subVib->vibratoExtentStart;
|
||||
}
|
||||
|
||||
if ((vib->rateChangeTimer = subVib->vibratoRateChangeDelay) == 0) {
|
||||
vib->rate = (s32)subVib->vibratoRateTarget;
|
||||
} else {
|
||||
vib->rate = (s32)subVib->vibratoRateStart;
|
||||
}
|
||||
|
||||
playbackState->vibratoFreqScale = 1.0f;
|
||||
vib->time = 0;
|
||||
vib->delay = subVib->vibratoDelay;
|
||||
}
|
||||
|
||||
void AudioEffects_NotePortamentoInit(Note* note) {
|
||||
note->playbackState.portamentoFreqScale = 1.0f;
|
||||
note->playbackState.portamento = note->playbackState.parentLayer->portamento;
|
||||
}
|
||||
|
||||
void AudioEffects_AdsrInit(AdsrState* adsr, AdsrEnvelope* envelope, s16* volOut) {
|
||||
adsr->action.asByte = 0;
|
||||
adsr->delay = 0;
|
||||
adsr->envelope = envelope;
|
||||
adsr->sustain = 0.0f;
|
||||
adsr->current = 0.0f;
|
||||
adsr->velocity = 0.0f;
|
||||
// (An older versions of the audio engine used in Super Mario 64 did
|
||||
// adsr->volOut = volOut. That line and associated struct member were
|
||||
// removed, but the function parameter was forgotten and remains.)
|
||||
}
|
||||
|
||||
f32 AudioEffects_AdsrUpdate(AdsrState* adsr) {
|
||||
u8 state = adsr->action.s.state;
|
||||
|
||||
switch (state) {
|
||||
case ADSR_STATE_DISABLED:
|
||||
return 0.0f;
|
||||
|
||||
case ADSR_STATE_INITIAL:
|
||||
if (adsr->action.s.hang) {
|
||||
adsr->action.s.state = ADSR_STATE_HANG;
|
||||
break;
|
||||
}
|
||||
// fallthrough
|
||||
|
||||
case ADSR_STATE_START_LOOP:
|
||||
adsr->envIndex = 0;
|
||||
adsr->action.s.state = ADSR_STATE_LOOP;
|
||||
// fallthrough
|
||||
|
||||
retry:
|
||||
case ADSR_STATE_LOOP:
|
||||
adsr->delay = adsr->envelope[adsr->envIndex].delay;
|
||||
switch (adsr->delay) {
|
||||
case ADSR_DISABLE:
|
||||
adsr->action.s.state = ADSR_STATE_DISABLED;
|
||||
break;
|
||||
case ADSR_HANG:
|
||||
adsr->action.s.state = ADSR_STATE_HANG;
|
||||
break;
|
||||
case ADSR_GOTO:
|
||||
adsr->envIndex = adsr->envelope[adsr->envIndex].arg;
|
||||
goto retry;
|
||||
case ADSR_RESTART:
|
||||
adsr->action.s.state = ADSR_STATE_INITIAL;
|
||||
break;
|
||||
|
||||
default:
|
||||
adsr->delay *= gAudioContext.audioBufferParameters.unk_24;
|
||||
if (adsr->delay == 0) {
|
||||
adsr->delay = 1;
|
||||
}
|
||||
adsr->target = adsr->envelope[adsr->envIndex].arg / 32767.0f;
|
||||
adsr->target = adsr->target * adsr->target;
|
||||
adsr->velocity = (adsr->target - adsr->current) / adsr->delay;
|
||||
adsr->action.s.state = ADSR_STATE_FADE;
|
||||
adsr->envIndex++;
|
||||
break;
|
||||
}
|
||||
if (adsr->action.s.state != ADSR_STATE_FADE) {
|
||||
break;
|
||||
}
|
||||
// fallthrough
|
||||
|
||||
case ADSR_STATE_FADE:
|
||||
adsr->current += adsr->velocity;
|
||||
if (--adsr->delay <= 0) {
|
||||
adsr->action.s.state = ADSR_STATE_LOOP;
|
||||
}
|
||||
// fallthrough
|
||||
|
||||
case ADSR_STATE_HANG:
|
||||
break;
|
||||
|
||||
case ADSR_STATE_DECAY:
|
||||
case ADSR_STATE_RELEASE:
|
||||
adsr->current -= adsr->fadeOutVel;
|
||||
if (adsr->sustain != 0.0f && state == ADSR_STATE_DECAY) {
|
||||
if (adsr->current < adsr->sustain) {
|
||||
adsr->current = adsr->sustain;
|
||||
adsr->delay = 128;
|
||||
adsr->action.s.state = ADSR_STATE_SUSTAIN;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (adsr->current < 0.00001f) {
|
||||
adsr->current = 0.0f;
|
||||
adsr->action.s.state = ADSR_STATE_DISABLED;
|
||||
}
|
||||
break;
|
||||
|
||||
case ADSR_STATE_SUSTAIN:
|
||||
adsr->delay--;
|
||||
if (adsr->delay == 0) {
|
||||
adsr->action.s.state = ADSR_STATE_RELEASE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (adsr->action.s.decay) {
|
||||
adsr->action.s.state = ADSR_STATE_DECAY;
|
||||
adsr->action.s.decay = false;
|
||||
}
|
||||
|
||||
if (adsr->action.s.release) {
|
||||
adsr->action.s.state = ADSR_STATE_RELEASE;
|
||||
adsr->action.s.release = false;
|
||||
}
|
||||
|
||||
if (adsr->current < 0.0f) {
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
if (adsr->current > 1.0f) {
|
||||
return 1.0f;
|
||||
}
|
||||
|
||||
return adsr->current;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_seqplayer/func_80197D24.s")
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_seqplayer/func_80197D4C.s")
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_seqplayer/AudioSeq_SequencePlayerDisable.s")
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_seqplayer/func_80197E08.s")
|
||||
|
||||
|
|
|
|||
|
|
@ -3757,16 +3757,16 @@
|
|||
0x801964F8:("func_801964F8",),
|
||||
0x801965F0:("func_801965F0",),
|
||||
0x801968C4:("func_801968C4",),
|
||||
0x80196A00:("func_80196A00",),
|
||||
0x80196BC8:("func_80196BC8",),
|
||||
0x80196D20:("func_80196D20",),
|
||||
0x80196D7C:("func_80196D7C",),
|
||||
0x80196DB4:("func_80196DB4",),
|
||||
0x80196FEC:("func_80196FEC",),
|
||||
0x80197048:("func_80197048",),
|
||||
0x80197138:("func_80197138",),
|
||||
0x80197164:("func_80197164",),
|
||||
0x80197188:("func_80197188",),
|
||||
0x80196A00:("AudioEffects_SequenceChannelProcessSound",),
|
||||
0x80196BC8:("AudioEffects_SequencePlayerProcessSound",),
|
||||
0x80196D20:("AudioEffects_GetPortamentoFreqScale",),
|
||||
0x80196D7C:("AudioEffects_GetVibratoPitchChange",),
|
||||
0x80196DB4:("AudioEffects_GetVibratoFreqScale",),
|
||||
0x80196FEC:("AudioEffects_NoteVibratoUpdate",),
|
||||
0x80197048:("AudioEffects_NoteVibratoInit",),
|
||||
0x80197138:("AudioEffects_NotePortamentoInit",),
|
||||
0x80197164:("AudioEffects_AdsrInit",),
|
||||
0x80197188:("AudioEffects_AdsrUpdate",),
|
||||
0x801974D0:("func_801974D0",),
|
||||
0x80197538:("func_80197538",),
|
||||
0x80197714:("func_80197714",),
|
||||
|
|
@ -3778,7 +3778,7 @@
|
|||
0x80197C0C:("func_80197C0C",),
|
||||
0x80197C8C:("func_80197C8C",),
|
||||
0x80197D24:("func_80197D24",),
|
||||
0x80197D4C:("func_80197D4C",),
|
||||
0x80197D4C:("AudioSeq_SequencePlayerDisable",),
|
||||
0x80197E08:("func_80197E08",),
|
||||
0x80197E48:("func_80197E48",),
|
||||
0x80197E88:("func_80197E88",),
|
||||
|
|
|
|||
|
|
@ -2261,10 +2261,10 @@
|
|||
0x801D4790:("D_801D4790","UNK_TYPE1","",0x1),
|
||||
0x801D4990:("D_801D4990","UNK_TYPE1","",0x1),
|
||||
0x801D4B90:("D_801D4B90","UNK_TYPE1","",0x1),
|
||||
0x801D4D90:("D_801D4D90","UNK_PTR","",0x4),
|
||||
0x801D4D90:("gWaveSamples","UNK_PTR","",0x4),
|
||||
0x801D4D98:("D_801D4D98","UNK_PTR","",0x4),
|
||||
0x801D4DB0:("D_801D4DB0","UNK_PTR","",0x4),
|
||||
0x801D4DB4:("D_801D4DB4","f32","[256]",0x400),
|
||||
0x801D4DB4:("gBendPitchOneOctaveFrequencies","f32","[256]",0x400),
|
||||
0x801D51B4:("D_801D51B4","f32","[256]",0x400),
|
||||
0x801D55B4:("D_801D55B4","f32","[128]",0x200),
|
||||
0x801D57B4:("D_801D57B4","UNK_TYPE1","",0x1),
|
||||
|
|
@ -4420,131 +4420,7 @@
|
|||
0x80200BCC:("D_80200BCC","UNK_TYPE1","",0x1),
|
||||
0x80200BCE:("D_80200BCE","UNK_TYPE1","",0x1),
|
||||
0x80200BD0:("D_80200BD0","UNK_TYPE1","",0x1),
|
||||
0x80200C70:("D_80200C70","UNK_TYPE1","",0x1),
|
||||
0x80200C71:("D_80200C71","UNK_TYPE1","",0x1),
|
||||
0x80200C76:("D_80200C76","UNK_TYPE1","",0x1),
|
||||
0x80200C78:("D_80200C78","UNK_TYPE1","",0x1),
|
||||
0x80200C7C:("D_80200C7C","UNK_TYPE1","",0x1),
|
||||
0x80200C80:("D_80200C80","UNK_TYPE1","",0x1),
|
||||
0x80200C92:("D_80200C92","UNK_TYPE1","",0x1),
|
||||
0x80200C94:("D_80200C94","UNK_TYPE1","",0x1),
|
||||
0x80200C98:("D_80200C98","UNK_TYPE1","",0x1),
|
||||
0x80200C9A:("D_80200C9A","UNK_TYPE1","",0x1),
|
||||
0x80200C9E:("D_80200C9E","UNK_TYPE1","",0x1),
|
||||
0x80200CA0:("D_80200CA0","UNK_TYPE1","",0x1),
|
||||
0x80200CF0:("D_80200CF0","UNK_TYPE1","",0x1),
|
||||
0x80200D38:("D_80200D38","UNK_TYPE1","",0x1),
|
||||
0x80200D70:("D_80200D70","UNK_TYPE1","",0x1),
|
||||
0x802011F0:("D_802011F0","UNK_TYPE1","",0x1),
|
||||
0x8020178C:("D_8020178C","UNK_TYPE1","",0x1),
|
||||
0x802017B0:("D_802017B0","UNK_TYPE1","",0x1),
|
||||
0x80201D68:("D_80201D68","UNK_TYPE1","",0x1),
|
||||
0x80201D6C:("D_80201D6C","UNK_TYPE1","",0x1),
|
||||
0x802023FC:("D_802023FC","UNK_TYPE1","",0x1),
|
||||
0x80202878:("D_80202878","UNK_TYPE1","",0x1),
|
||||
0x80202880:("D_80202880","UNK_TYPE1","",0x1),
|
||||
0x802028BC:("D_802028BC","UNK_TYPE1","",0x1),
|
||||
0x80202980:("D_80202980","OSMesgQueue","",0x18),
|
||||
0x802029D8:("D_802029D8","UNK_TYPE1","",0x1),
|
||||
0x80202AB0:("D_80202AB0","OSMesgQueue","",0x18),
|
||||
0x80202AC8:("D_80202AC8","OSMesg","[16]",0x40),
|
||||
0x80202B08:("D_80202B08","OSMesgQueue","",0x18),
|
||||
0x80202B20:("D_80202B20","OSMesg","[16]",0x40),
|
||||
0x80202B60:("D_80202B60","OSMesgQueue","",0x18),
|
||||
0x80202B78:("D_80202B78","OSMesg","[64]",0x100),
|
||||
0x80203278:("D_80203278","OSMesgQueue","",0x18),
|
||||
0x80203290:("D_80203290","OSMesg","[1]",0x4),
|
||||
0x80203294:("D_80203294","UNK_TYPE1","",0x1),
|
||||
0x802034C0:("D_802034C0","UNK_TYPE1","",0x1),
|
||||
0x802034C4:("D_802034C4","UNK_TYPE1","",0x1),
|
||||
0x802034C8:("D_802034C8","UNK_TYPE1","",0x1),
|
||||
0x802034D0:("D_802034D0","UNK_TYPE4","",0x4),
|
||||
0x802034D4:("D_802034D4","UNK_TYPE1","",0x1),
|
||||
0x802034D8:("D_802034D8","UNK_TYPE1","",0x1),
|
||||
0x802034DC:("D_802034DC","UNK_TYPE1","",0x1),
|
||||
0x802034E8:("D_802034E8","UNK_TYPE1","",0x1),
|
||||
0x802034F0:("D_802034F0","UNK_TYPE2","",0x2),
|
||||
0x802034F8:("D_802034F8","UNK_TYPE1","",0x1),
|
||||
0x802034FC:("D_802034FC","UNK_TYPE1","",0x1),
|
||||
0x80203500:("D_80203500","UNK_TYPE1","",0x1),
|
||||
0x80203528:("D_80203528","UNK_TYPE4","",0x4),
|
||||
0x8020352C:("D_8020352C","UNK_TYPE1","",0x1),
|
||||
0x8020352E:("D_8020352E","UNK_TYPE1","",0x1),
|
||||
0x80203530:("D_80203530","UNK_TYPE1","",0x1),
|
||||
0x8020360C:("D_8020360C","UNK_TYPE4","",0x4),
|
||||
0x80203618:("D_80203618","UNK_TYPE1","",0x1),
|
||||
0x8020361C:("D_8020361C","UNK_TYPE1","",0x1),
|
||||
0x80203620:("D_80203620","UNK_TYPE1","",0x1),
|
||||
0x80203624:("D_80203624","UNK_TYPE1","",0x1),
|
||||
0x80203628:("D_80203628","UNK_TYPE1","",0x1),
|
||||
0x80203630:("D_80203630","UNK_TYPE1","",0x1),
|
||||
0x80203640:("D_80203640","UNK_TYPE1","",0x1),
|
||||
0x80203650:("D_80203650","UNK_TYPE1","",0x1),
|
||||
0x80203660:("D_80203660","UNK_TYPE1","",0x1),
|
||||
0x80203690:("D_80203690","UNK_TYPE1","",0x1),
|
||||
0x802036A0:("D_802036A0","UNK_TYPE1","",0x1),
|
||||
0x802036B0:("D_802036B0","UNK_TYPE1","",0x1),
|
||||
0x802036C0:("D_802036C0","UNK_TYPE1","",0x1),
|
||||
0x802036C4:("D_802036C4","UNK_TYPE1","",0x1),
|
||||
0x80203794:("D_80203794","UNK_TYPE1","",0x1),
|
||||
0x80203798:("D_80203798","UNK_TYPE1","",0x1),
|
||||
0x802037D0:("D_802037D0","UNK_TYPE1","",0x1),
|
||||
0x802037D4:("D_802037D4","UNK_TYPE1","",0x1),
|
||||
0x802038A4:("D_802038A4","UNK_TYPE1","",0x1),
|
||||
0x802038A8:("D_802038A8","UNK_TYPE1","",0x1),
|
||||
0x802038C2:("D_802038C2","UNK_TYPE1","",0x1),
|
||||
0x802038CE:("D_802038CE","UNK_TYPE1","",0x1),
|
||||
0x802038E0:("D_802038E0","UNK_TYPE1","",0x1),
|
||||
0x802038E4:("D_802038E4","UNK_TYPE1","",0x1),
|
||||
0x80203970:("D_80203970","UNK_TYPE1","",0x1),
|
||||
0x802039B4:("D_802039B4","UNK_TYPE1","",0x1),
|
||||
0x802039B8:("D_802039B8","UNK_TYPE1","",0x1),
|
||||
0x802039D2:("D_802039D2","UNK_TYPE1","",0x1),
|
||||
0x802039DE:("D_802039DE","UNK_TYPE1","",0x1),
|
||||
0x802039F0:("D_802039F0","UNK_TYPE1","",0x1),
|
||||
0x802039FC:("D_802039FC","UNK_TYPE1","",0x1),
|
||||
0x80203B80:("D_80203B80","UNK_TYPE1","",0x1),
|
||||
0x80203B88:("D_80203B88","UNK_TYPE1","",0x1),
|
||||
0x80203B90:("D_80203B90","UNK_TYPE1","",0x1),
|
||||
0x80204590:("D_80204590","UNK_TYPE1","",0x1),
|
||||
0x80204594:("D_80204594","UNK_TYPE1","",0x1),
|
||||
0x80204598:("D_80204598","UNK_TYPE1","",0x1),
|
||||
0x802045A4:("D_802045A4","UNK_TYPE1","",0x1),
|
||||
0x80204FA4:("D_80204FA4","UNK_TYPE1","",0x1),
|
||||
0x80204FA8:("D_80204FA8","UNK_TYPE1","",0x1),
|
||||
0x80204FB4:("D_80204FB4","UNK_TYPE1","",0x1),
|
||||
0x80204FB8:("D_80204FB8","UNK_TYPE1","",0x1),
|
||||
0x80204FC0:("D_80204FC0","UNK_TYPE1","",0x1),
|
||||
0x80204FCC:("D_80204FCC","UNK_TYPE1","",0x1),
|
||||
0x80204FD8:("D_80204FD8","UNK_TYPE1","",0x1),
|
||||
0x80205008:("D_80205008","UNK_TYPE1","",0x1),
|
||||
0x80205038:("D_80205038","UNK_TYPE1","",0x1),
|
||||
0x802050B9:("D_802050B9","UNK_TYPE1","",0x1),
|
||||
0x802050C0:("D_802050C0","UNK_TYPE1","",0x1),
|
||||
0x802050C4:("D_802050C4","UNK_TYPE1","",0x1),
|
||||
0x802050CC:("D_802050CC","UNK_TYPE4","",0x4),
|
||||
0x802050D0:("D_802050D0","UNK_TYPE4","",0x4),
|
||||
0x80205228:("D_80205228","UNK_TYPE1","",0x1),
|
||||
0x8020522B:("D_8020522B","UNK_TYPE1","",0x1),
|
||||
0x80205390:("D_80205390","UNK_TYPE1","",0x1),
|
||||
0x802053C8:("D_802053C8","UNK_TYPE1","",0x1),
|
||||
0x802057B0:("D_802057B0","UNK_TYPE1","",0x1),
|
||||
0x80205830:("D_80205830","UNK_TYPE1","",0x1),
|
||||
0x802084B0:("D_802084B0","UNK_TYPE1","",0x1),
|
||||
0x80208530:("D_80208530","UNK_TYPE1","",0x1),
|
||||
0x80208598:("D_80208598","UNK_TYPE1","",0x1),
|
||||
0x802085A8:("D_802085A8","UNK_TYPE1","",0x1),
|
||||
0x802085B8:("D_802085B8","UNK_TYPE1","",0x1),
|
||||
0x802085C8:("D_802085C8","UNK_TYPE1","",0x1),
|
||||
0x802085D8:("D_802085D8","UNK_TYPE1","",0x1),
|
||||
0x802085F8:("D_802085F8","UNK_TYPE1","",0x1),
|
||||
0x802085FC:("D_802085FC","UNK_TYPE1","",0x1),
|
||||
0x80208604:("D_80208604","UNK_TYPE1","",0x1),
|
||||
0x8020861C:("D_8020861C","UNK_TYPE1","",0x1),
|
||||
0x80208634:("D_80208634","UNK_TYPE1","",0x1),
|
||||
0x8020864C:("D_8020864C","UNK_TYPE1","",0x1),
|
||||
0x80208650:("D_80208650","UNK_TYPE1","",0x1),
|
||||
0x80208654:("D_80208654","UNK_TYPE1","",0x1),
|
||||
0x80200C70:("gAudioContext","AudioContext","",0x81F8),
|
||||
0x80208E68:("D_80208E68","UNK_TYPE4","",0x4),
|
||||
0x80208E6C:("D_80208E6C","UNK_TYPE4","",0x4),
|
||||
0x80208E70:("D_80208E70","UNK_TYPE4","",0x4),
|
||||
|
|
|
|||
|
|
@ -3275,16 +3275,16 @@ asm/non_matchings/code/audio_playback/func_80196494.s,func_80196494,0x80196494,0
|
|||
asm/non_matchings/code/audio_playback/func_801964F8.s,func_801964F8,0x801964F8,0x3E
|
||||
asm/non_matchings/code/audio_playback/func_801965F0.s,func_801965F0,0x801965F0,0xB5
|
||||
asm/non_matchings/code/audio_playback/func_801968C4.s,func_801968C4,0x801968C4,0x4F
|
||||
asm/non_matchings/code/audio_effects/func_80196A00.s,func_80196A00,0x80196A00,0x72
|
||||
asm/non_matchings/code/audio_effects/func_80196BC8.s,func_80196BC8,0x80196BC8,0x56
|
||||
asm/non_matchings/code/audio_effects/func_80196D20.s,func_80196D20,0x80196D20,0x17
|
||||
asm/non_matchings/code/audio_effects/func_80196D7C.s,func_80196D7C,0x80196D7C,0xE
|
||||
asm/non_matchings/code/audio_effects/func_80196DB4.s,func_80196DB4,0x80196DB4,0x8E
|
||||
asm/non_matchings/code/audio_effects/func_80196FEC.s,func_80196FEC,0x80196FEC,0x17
|
||||
asm/non_matchings/code/audio_effects/func_80197048.s,func_80197048,0x80197048,0x3C
|
||||
asm/non_matchings/code/audio_effects/func_80197138.s,func_80197138,0x80197138,0xB
|
||||
asm/non_matchings/code/audio_effects/func_80197164.s,func_80197164,0x80197164,0x9
|
||||
asm/non_matchings/code/audio_effects/func_80197188.s,func_80197188,0x80197188,0xD2
|
||||
asm/non_matchings/code/audio_effects/AudioEffects_SequenceChannelProcessSound.s,AudioEffects_SequenceChannelProcessSound,0x80196A00,0x72
|
||||
asm/non_matchings/code/audio_effects/AudioEffects_SequencePlayerProcessSound.s,AudioEffects_SequencePlayerProcessSound,0x80196BC8,0x56
|
||||
asm/non_matchings/code/audio_effects/AudioEffects_GetPortamentoFreqScale.s,AudioEffects_GetPortamentoFreqScale,0x80196D20,0x17
|
||||
asm/non_matchings/code/audio_effects/AudioEffects_GetVibratoPitchChange.s,AudioEffects_GetVibratoPitchChange,0x80196D7C,0xE
|
||||
asm/non_matchings/code/audio_effects/AudioEffects_GetVibratoFreqScale.s,AudioEffects_GetVibratoFreqScale,0x80196DB4,0x8E
|
||||
asm/non_matchings/code/audio_effects/AudioEffects_NoteVibratoUpdate.s,AudioEffects_NoteVibratoUpdate,0x80196FEC,0x17
|
||||
asm/non_matchings/code/audio_effects/AudioEffects_NoteVibratoInit.s,AudioEffects_NoteVibratoInit,0x80197048,0x3C
|
||||
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
|
||||
|
|
@ -3296,7 +3296,7 @@ asm/non_matchings/code/audio_seqplayer/func_80197B14.s,func_80197B14,0x80197B14,
|
|||
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/func_80197D24.s,func_80197D24,0x80197D24,0xA
|
||||
asm/non_matchings/code/audio_seqplayer/func_80197D4C.s,func_80197D4C,0x80197D4C,0x2F
|
||||
asm/non_matchings/code/audio_seqplayer/AudioSeq_SequencePlayerDisable.s,AudioSeq_SequencePlayerDisable,0x80197D4C,0x2F
|
||||
asm/non_matchings/code/audio_seqplayer/func_80197E08.s,func_80197E08,0x80197E08,0x10
|
||||
asm/non_matchings/code/audio_seqplayer/func_80197E48.s,func_80197E48,0x80197E48,0x10
|
||||
asm/non_matchings/code/audio_seqplayer/func_80197E88.s,func_80197E88,0x80197E88,0x28
|
||||
|
|
|
|||
|
Loading…
Reference in New Issue