1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-08-09 08:20:17 +00:00

Reverb and ReverbBits have nothing to do with reverbs

This commit is contained in:
zelda2774 2021-08-26 00:16:39 +02:00
parent 1b057824f7
commit 65f324c3c9
6 changed files with 88 additions and 88 deletions

View file

@ -1979,7 +1979,7 @@ void Audio_InitMesgQueues(void);
void Audio_osInvalDCache(void* buf, s32 size); void Audio_osInvalDCache(void* buf, s32 size);
void Audio_osWritebackDCache(void* mem, s32 size); void Audio_osWritebackDCache(void* mem, s32 size);
s32 osAiSetNextBuffer(void*, u32); s32 osAiSetNextBuffer(void*, u32);
void Audio_NoteSetVelPanReverb(Note* note, NoteSubEu* sub, Reverb* reverb); void Audio_InitNoteSub(Note* note, NoteSubEu* sub, NoteSubAttributes* attrs);
void Audio_NoteSetResamplingRate(NoteSubEu* noteSubEu, f32 resamplingRateInput); void Audio_NoteSetResamplingRate(NoteSubEu* noteSubEu, f32 resamplingRateInput);
void Audio_NoteInit(Note* note); void Audio_NoteInit(Note* note);
void Audio_NoteDisable(Note* note); void Audio_NoteDisable(Note* note);

View file

@ -285,25 +285,25 @@ typedef struct {
} AdsrState; } AdsrState;
typedef struct { typedef struct {
/* 0x00 */ u8 bit0 : 1; /* 0x00 */ u8 bit0 : 1; // unused?
/* 0x00 */ u8 bit1 : 1; /* 0x00 */ u8 bit1 : 1; // unused?
/* 0x00 */ u8 bit2 : 2; /* 0x00 */ u8 bit2 : 2;
/* 0x00 */ u8 strongRight : 1; /* 0x00 */ u8 strongRight : 1;
/* 0x00 */ u8 strongLeft : 1; /* 0x00 */ u8 strongLeft : 1;
/* 0x00 */ u8 stereoHeadsetEffects : 1; /* 0x00 */ u8 stereoHeadsetEffects : 1;
/* 0x00 */ u8 usesHeadsetPanEffects : 1; /* 0x00 */ u8 usesHeadsetPanEffects : 1;
} ReverbBitsData; } StereoData;
typedef union { typedef union {
/* 0x00 */ ReverbBitsData s; /* 0x00 */ StereoData s;
/* 0x00 */ u8 asByte; /* 0x00 */ u8 asByte;
} ReverbBits; } Stereo;
typedef struct { typedef struct {
/* 0x00 */ u8 reverb; /* 0x00 */ u8 reverb;
/* 0x01 */ u8 unk_1; /* 0x01 */ u8 unk_1;
/* 0x02 */ u8 pan; /* 0x02 */ u8 pan;
/* 0x03 */ ReverbBits reverbBits; /* 0x03 */ Stereo stereo;
/* 0x04 */ u8 unk_4; /* 0x04 */ u8 unk_4;
/* 0x06 */ u16 unk_6; /* 0x06 */ u16 unk_6;
/* 0x08 */ f32 freqScale; /* 0x08 */ f32 freqScale;
@ -374,7 +374,7 @@ typedef struct SequenceChannel {
/* 0x84 */ NotePool notePool; /* 0x84 */ NotePool notePool;
/* 0xC4 */ s8 soundScriptIO[8]; // bridge between sound script and audio lib /* 0xC4 */ s8 soundScriptIO[8]; // bridge between sound script and audio lib
/* 0xCC */ s16* filter; /* 0xCC */ s16* filter;
/* 0xD0 */ ReverbBits reverbBits; /* 0xD0 */ Stereo stereo;
} SequenceChannel; // size = 0xD4 } SequenceChannel; // size = 0xD4
// Also known as a Track, according to debug strings. // Also known as a Track, according to debug strings.
@ -387,7 +387,7 @@ typedef struct SequenceChannelLayer {
/* 0x00 */ u8 ignoreDrumPan : 1; /* 0x00 */ u8 ignoreDrumPan : 1;
/* 0x00 */ u8 bit1 : 1; // "has initialized continuous notes"? /* 0x00 */ u8 bit1 : 1; // "has initialized continuous notes"?
/* 0x00 */ u8 notePropertiesNeedInit : 1; /* 0x00 */ u8 notePropertiesNeedInit : 1;
/* 0x01 */ ReverbBits reverbBits; /* 0x01 */ Stereo stereo;
/* 0x02 */ u8 instOrWave; /* 0x02 */ u8 instOrWave;
/* 0x03 */ u8 noteDuration; /* 0x03 */ u8 noteDuration;
/* 0x04 */ u8 semitone; /* 0x04 */ u8 semitone;
@ -485,7 +485,7 @@ typedef struct {
/* 0x00 */ vu8 enabled : 1; /* 0x00 */ vu8 enabled : 1;
/* 0x00 */ u8 needsInit : 1; /* 0x00 */ u8 needsInit : 1;
/*?0x00 */ u8 finished : 1; /*?0x00 */ u8 finished : 1;
/*?0x00 */ u8 envMixerNeedsInit : 1; /* 0x00 */ u8 unused : 1;
/* 0x00 */ u8 stereoStrongRight : 1; /* 0x00 */ u8 stereoStrongRight : 1;
/* 0x00 */ u8 stereoStrongLeft : 1; /* 0x00 */ u8 stereoStrongLeft : 1;
/* 0x00 */ u8 stereoHeadsetEffects : 1; /* 0x00 */ u8 stereoHeadsetEffects : 1;
@ -981,17 +981,17 @@ typedef struct {
} AudioContext; // size = 0x6450 } AudioContext; // size = 0x6450
typedef struct { typedef struct {
/* 0x00 */ u8 vol; /* 0x00 */ u8 reverbVol;
/* 0x01 */ u8 unk_1; /* 0x01 */ u8 unk_1;
/* 0x02 */ u8 pan; /* 0x02 */ u8 pan;
/* 0x03 */ ReverbBits reverbBits; /* 0x03 */ Stereo stereo;
/* 0x04 */ f32 frequency; /* 0x04 */ f32 frequency;
/* 0x08 */ f32 velocity; /* 0x08 */ f32 velocity;
/* 0x0C */ char unk_0C[0x4]; /* 0x0C */ char unk_0C[0x4];
/* 0x10 */ s16* filter; /* 0x10 */ s16* filter;
/* 0x14 */ u8 unk_14; /* 0x14 */ u8 unk_14;
/* 0x16 */ u16 unk_16; /* 0x16 */ u16 unk_16;
} Reverb; // size >= 0x18 } NoteSubAttributes; // size = 0x18
typedef struct { typedef struct {
/* 0x0000 */ u32 heap; /* 0x0000 */ u32 heap;

View file

@ -1,6 +1,6 @@
#include "global.h" #include "global.h"
void Audio_NoteSetVelPanReverb(Note* note, NoteSubEu* sub, Reverb* reverb) { void Audio_InitNoteSub(Note* note, NoteSubEu* sub, NoteSubAttributes* attrs) {
f32 volRight, volLeft; f32 volRight, volLeft;
s32 smallPanIndex; s32 smallPanIndex;
u64 pad; u64 pad;
@ -9,20 +9,20 @@ void Audio_NoteSetVelPanReverb(Note* note, NoteSubEu* sub, Reverb* reverb) {
f32 vel; f32 vel;
u8 pan; u8 pan;
u8 reverbVol; u8 reverbVol;
ReverbBitsData sp24; StereoData sp24;
s32 stereoHeadsetEffects = note->playbackState.stereoHeadsetEffects; s32 stereoHeadsetEffects = note->playbackState.stereoHeadsetEffects;
vel = reverb->velocity; vel = attrs->velocity;
pan = reverb->pan; pan = attrs->pan;
reverbVol = reverb->vol; reverbVol = attrs->reverbVol;
sp24 = reverb->reverbBits.s; sp24 = attrs->stereo.s;
sub->bitField0.s = note->noteSubEu.bitField0.s; sub->bitField0.s = note->noteSubEu.bitField0.s;
sub->bitField1.s = note->noteSubEu.bitField1.s; sub->bitField1.s = note->noteSubEu.bitField1.s;
sub->sound.samples = note->noteSubEu.sound.samples; sub->sound.samples = note->noteSubEu.sound.samples;
sub->unk_06 = note->noteSubEu.unk_06; sub->unk_06 = note->noteSubEu.unk_06;
Audio_NoteSetResamplingRate(sub, reverb->frequency); Audio_NoteSetResamplingRate(sub, attrs->frequency);
pan &= 0x7F; pan &= 0x7F;
@ -94,10 +94,10 @@ void Audio_NoteSetVelPanReverb(Note* note, NoteSubEu* sub, Reverb* reverb) {
sub->targetVolLeft = (s32)((vel * volLeft) * 4095.999f); sub->targetVolLeft = (s32)((vel * volLeft) * 4095.999f);
sub->targetVolRight = (s32)((vel * volRight) * 4095.999f); sub->targetVolRight = (s32)((vel * volRight) * 4095.999f);
sub->unk_2 = reverb->unk_1; sub->unk_2 = attrs->unk_1;
sub->filter = reverb->filter; sub->filter = attrs->filter;
sub->unk_07 = reverb->unk_14; sub->unk_07 = attrs->unk_14;
sub->unk_0E = reverb->unk_16; sub->unk_0E = attrs->unk_16;
sub->reverbVol = reverbVol; sub->reverbVol = reverbVol;
} }
@ -154,12 +154,12 @@ void Audio_NoteDisable(Note* note) {
void Audio_ProcessNotes(void) { void Audio_ProcessNotes(void) {
s32 pad[2]; s32 pad[2];
NoteAttributes* attributes; NoteAttributes* attrs;
NoteSubEu* noteSubEu2; NoteSubEu* noteSubEu2;
NoteSubEu* noteSubEu; NoteSubEu* noteSubEu;
Note* note; Note* note;
NotePlaybackState* playbackState; NotePlaybackState* playbackState;
Reverb reverb; NoteSubAttributes subAttrs;
u8 bookOffset; u8 bookOffset;
f32 scale; f32 scale;
s32 i; s32 i;
@ -248,47 +248,47 @@ void Audio_ProcessNotes(void) {
scale = Audio_AdsrUpdate(&playbackState->adsr); scale = Audio_AdsrUpdate(&playbackState->adsr);
Audio_NoteVibratoUpdate(note); Audio_NoteVibratoUpdate(note);
attributes = &playbackState->attributes; attrs = &playbackState->attributes;
if (playbackState->unk_04 == 1 || playbackState->unk_04 == 2) { if (playbackState->unk_04 == 1 || playbackState->unk_04 == 2) {
reverb.frequency = attributes->freqScale; subAttrs.frequency = attrs->freqScale;
reverb.velocity = attributes->velocity; subAttrs.velocity = attrs->velocity;
reverb.pan = attributes->pan; subAttrs.pan = attrs->pan;
reverb.vol = attributes->reverb; subAttrs.reverbVol = attrs->reverb;
reverb.reverbBits = attributes->reverbBits; subAttrs.stereo = attrs->stereo;
reverb.unk_1 = attributes->unk_1; subAttrs.unk_1 = attrs->unk_1;
reverb.filter = attributes->filter; subAttrs.filter = attrs->filter;
reverb.unk_14 = attributes->unk_4; subAttrs.unk_14 = attrs->unk_4;
reverb.unk_16 = attributes->unk_6; subAttrs.unk_16 = attrs->unk_6;
bookOffset = noteSubEu->bitField1.s.bookOffset; bookOffset = noteSubEu->bitField1.s.bookOffset;
} else { } else {
SequenceChannelLayer* layer = playbackState->parentLayer; SequenceChannelLayer* layer = playbackState->parentLayer;
SequenceChannel* channel = layer->seqChannel; SequenceChannel* channel = layer->seqChannel;
reverb.frequency = layer->noteFreqScale; subAttrs.frequency = layer->noteFreqScale;
reverb.velocity = layer->noteVelocity; subAttrs.velocity = layer->noteVelocity;
reverb.pan = layer->notePan; subAttrs.pan = layer->notePan;
if (layer->reverbBits.asByte == 0) { if (layer->stereo.asByte == 0) {
reverb.reverbBits = channel->reverbBits; subAttrs.stereo = channel->stereo;
} else { } else {
reverb.reverbBits = layer->reverbBits; subAttrs.stereo = layer->stereo;
} }
reverb.vol = channel->reverb; subAttrs.reverbVol = channel->reverb;
reverb.unk_1 = channel->unk_0C; subAttrs.unk_1 = channel->unk_0C;
reverb.filter = channel->filter; subAttrs.filter = channel->filter;
reverb.unk_14 = channel->unk_0F; subAttrs.unk_14 = channel->unk_0F;
reverb.unk_16 = channel->unk_20; subAttrs.unk_16 = channel->unk_20;
bookOffset = channel->bookOffset & 0x7; bookOffset = channel->bookOffset & 0x7;
if (channel->seqPlayer->muted && (channel->muteBehavior & 8)) { if (channel->seqPlayer->muted && (channel->muteBehavior & 8)) {
reverb.frequency = 0.0f; subAttrs.frequency = 0.0f;
reverb.velocity = 0.0f; subAttrs.velocity = 0.0f;
} }
} }
reverb.frequency *= playbackState->vibratoFreqScale * playbackState->portamentoFreqScale; subAttrs.frequency *= playbackState->vibratoFreqScale * playbackState->portamentoFreqScale;
reverb.frequency *= gAudioContext.audioBufferParameters.resampleRate; subAttrs.frequency *= gAudioContext.audioBufferParameters.resampleRate;
reverb.velocity *= scale; subAttrs.velocity *= scale;
Audio_NoteSetVelPanReverb(note, noteSubEu2, &reverb); Audio_InitNoteSub(note, noteSubEu2, &subAttrs);
noteSubEu->bitField1.s.bookOffset = bookOffset; noteSubEu->bitField1.s.bookOffset = bookOffset;
skip:; skip:;
} }
@ -432,7 +432,7 @@ s32 func_800E7744(s32 instrument, s32 bankId, s32 instId, void* arg3) {
void Audio_SeqChanLayerDecayRelease(SequenceChannelLayer* seqLayer, s32 target) { void Audio_SeqChanLayerDecayRelease(SequenceChannelLayer* seqLayer, s32 target) {
Note* note; Note* note;
NoteAttributes* attributes; NoteAttributes* attrs;
SequenceChannel* chan; SequenceChannel* chan;
s32 i; s32 i;
@ -447,7 +447,7 @@ void Audio_SeqChanLayerDecayRelease(SequenceChannelLayer* seqLayer, s32 target)
} }
note = seqLayer->note; note = seqLayer->note;
attributes = &note->playbackState.attributes; attrs = &note->playbackState.attributes;
if (note->playbackState.wantedParentLayer == seqLayer) { if (note->playbackState.wantedParentLayer == seqLayer) {
note->playbackState.wantedParentLayer = NO_LAYER; note->playbackState.wantedParentLayer = NO_LAYER;
@ -463,37 +463,37 @@ void Audio_SeqChanLayerDecayRelease(SequenceChannelLayer* seqLayer, s32 target)
} }
if (note->playbackState.adsr.action.s.state != ADSR_STATE_DECAY) { if (note->playbackState.adsr.action.s.state != ADSR_STATE_DECAY) {
attributes->freqScale = seqLayer->noteFreqScale; attrs->freqScale = seqLayer->noteFreqScale;
attributes->velocity = seqLayer->noteVelocity; attrs->velocity = seqLayer->noteVelocity;
attributes->pan = seqLayer->notePan; attrs->pan = seqLayer->notePan;
if (seqLayer->seqChannel != NULL) { if (seqLayer->seqChannel != NULL) {
chan = seqLayer->seqChannel; chan = seqLayer->seqChannel;
attributes->reverb = chan->reverb; attrs->reverb = chan->reverb;
attributes->unk_1 = chan->unk_0C; attrs->unk_1 = chan->unk_0C;
attributes->filter = chan->filter; attrs->filter = chan->filter;
if (attributes->filter != NULL) { if (attrs->filter != NULL) {
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
attributes->filterBuf[i] = attributes->filter[i]; attrs->filterBuf[i] = attrs->filter[i];
} }
attributes->filter = attributes->filterBuf; attrs->filter = attrs->filterBuf;
} }
attributes->unk_6 = chan->unk_20; attrs->unk_6 = chan->unk_20;
attributes->unk_4 = chan->unk_0F; attrs->unk_4 = chan->unk_0F;
if (chan->seqPlayer->muted && (chan->muteBehavior & 8)) { if (chan->seqPlayer->muted && (chan->muteBehavior & 8)) {
note->noteSubEu.bitField0.s.finished = true; note->noteSubEu.bitField0.s.finished = true;
} }
if (seqLayer->reverbBits.asByte == 0) { if (seqLayer->stereo.asByte == 0) {
attributes->reverbBits = chan->reverbBits; attrs->stereo = chan->stereo;
} else { } else {
attributes->reverbBits = seqLayer->reverbBits; attrs->stereo = seqLayer->stereo;
} }
note->playbackState.priority = chan->someOtherPriority; note->playbackState.priority = chan->someOtherPriority;
} else { } else {
attributes->reverbBits = seqLayer->reverbBits; attrs->stereo = seqLayer->stereo;
note->playbackState.priority = 1; note->playbackState.priority = 1;
} }

View file

@ -120,7 +120,7 @@ void Audio_SequenceChannelInit(SequenceChannel* seqChannel) {
seqChannel->transposition = 0; seqChannel->transposition = 0;
seqChannel->largeNotes = false; seqChannel->largeNotes = false;
seqChannel->bookOffset = 0; seqChannel->bookOffset = 0;
seqChannel->reverbBits.asByte = 0; seqChannel->stereo.asByte = 0;
seqChannel->changes.asByte = 0xFF; seqChannel->changes.asByte = 0xFF;
seqChannel->scriptState.depth = 0; seqChannel->scriptState.depth = 0;
seqChannel->newPan = 0x40; seqChannel->newPan = 0x40;
@ -186,7 +186,7 @@ s32 Audio_SeqChannelSetLayer(SequenceChannel* seqChannel, s32 layerIdx) {
layer->ignoreDrumPan = false; layer->ignoreDrumPan = false;
layer->bit1 = false; layer->bit1 = false;
layer->notePropertiesNeedInit = false; layer->notePropertiesNeedInit = false;
layer->reverbBits.asByte = 0; layer->stereo.asByte = 0;
layer->portamento.mode = 0; layer->portamento.mode = 0;
layer->scriptState.depth = 0; layer->scriptState.depth = 0;
layer->noteDuration = 0x80; layer->noteDuration = 0x80;
@ -587,7 +587,7 @@ s32 func_800EA0C0(SequenceChannelLayer* layer) {
break; break;
case 0xCD: case 0xCD:
layer->reverbBits.asByte = Audio_M64ReadU8(state); layer->stereo.asByte = Audio_M64ReadU8(state);
break; break;
case 0xCE: { case 0xCE: {
@ -1212,7 +1212,7 @@ void Audio_SequenceChannelProcessScript(SequenceChannel* channel) {
} else { } else {
channel->stereoHeadsetEffects = false; channel->stereoHeadsetEffects = false;
} }
channel->reverbBits.asByte = command & 0x7F; channel->stereo.asByte = command & 0x7F;
break; break;
case 0xD1: case 0xD1:
command = (u8)parameters[0]; command = (u8)parameters[0];

View file

@ -18,7 +18,7 @@ typedef enum {
CHAN_UPD_VIBE_X32, // 11 CHAN_UPD_VIBE_X32, // 11
CHAN_UPD_UNK_0F, // 12 CHAN_UPD_UNK_0F, // 12
CHAN_UPD_UNK_20, // 13 CHAN_UPD_UNK_20, // 13
CHAN_UPD_REVERB_FLG // 14 CHAN_UPD_STEREO // 14
} ChannelUpdateType; } ChannelUpdateType;
void func_800E6300(SequenceChannel* channel, AudioCmd* arg1); void func_800E6300(SequenceChannel* channel, AudioCmd* arg1);
@ -704,8 +704,8 @@ void func_800E6300(SequenceChannel* channel, AudioCmd* cmd) {
case CHAN_UPD_UNK_20: case CHAN_UPD_UNK_20:
channel->unk_20 = cmd->asUShort; channel->unk_20 = cmd->asUShort;
return; return;
case CHAN_UPD_REVERB_FLG: case CHAN_UPD_STEREO:
channel->reverbBits.asByte = cmd->asUbyte; channel->stereo.asByte = cmd->asUbyte;
return; return;
} }
} }

View file

@ -6,7 +6,7 @@ typedef struct {
f32 freqScale; f32 freqScale;
s8 reverb; s8 reverb;
s8 panSigned; s8 panSigned;
s8 reverbFlg; s8 stereoBits;
u8 unk_0B; u8 unk_0B;
u8 unk_0C; u8 unk_0C;
} unk_s1; } unk_s1;
@ -2754,7 +2754,7 @@ void Audio_SetSoundProperties(u8 bankIdx, u8 entryIdx, u8 channelIdx) {
s8 reverb = 0; s8 reverb = 0;
f32 freqScale = 1.0f; f32 freqScale = 1.0f;
s8 panSigned = 0x40; s8 panSigned = 0x40;
u8 reverbFlg = 0; u8 stereoBits = 0;
u8 sp39 = 0; u8 sp39 = 0;
s8 sp38 = 0; s8 sp38 = 0;
f32 sp34; f32 sp34;
@ -2781,17 +2781,17 @@ void Audio_SetSoundProperties(u8 bankIdx, u8 entryIdx, u8 channelIdx) {
sp34 = D_801305C4[(entry->unk_26 & 0x400) >> 10]; sp34 = D_801305C4[(entry->unk_26 & 0x400) >> 10];
if (!(entry->unk_26 & 0x800)) { if (!(entry->unk_26 & 0x800)) {
if (*entry->posZ < sp34) { if (*entry->posZ < sp34) {
reverbFlg = 0x10; stereoBits = 0x10;
} }
if ((D_8016B8B8[channelIdx].reverbFlg ^ reverbFlg) & 0x10) { if ((D_8016B8B8[channelIdx].stereoBits ^ stereoBits) & 0x10) {
if (panSigned < 0x40) { if (panSigned < 0x40) {
reverbFlg = D_8016B8B8[channelIdx].reverbFlg ^ 0x14; stereoBits = D_8016B8B8[channelIdx].stereoBits ^ 0x14;
} else { } else {
reverbFlg = D_8016B8B8[channelIdx].reverbFlg ^ 0x18; stereoBits = D_8016B8B8[channelIdx].stereoBits ^ 0x18;
} }
} else { } else {
reverbFlg = D_8016B8B8[channelIdx].reverbFlg; stereoBits = D_8016B8B8[channelIdx].stereoBits;
} }
} }
} }
@ -2828,9 +2828,9 @@ void Audio_SetSoundProperties(u8 bankIdx, u8 entryIdx, u8 channelIdx) {
Audio_QueueCmdF32(0x4020000 | (channelIdx << 8), freqScale); Audio_QueueCmdF32(0x4020000 | (channelIdx << 8), freqScale);
D_8016B8B8[channelIdx].freqScale = freqScale; D_8016B8B8[channelIdx].freqScale = freqScale;
} }
if (reverbFlg != D_8016B8B8[channelIdx].reverbFlg) { if (stereoBits != D_8016B8B8[channelIdx].stereoBits) {
Audio_QueueCmdS8(0xE020000 | (channelIdx << 8), reverbFlg | 0x10); Audio_QueueCmdS8(0xE020000 | (channelIdx << 8), stereoBits | 0x10);
D_8016B8B8[channelIdx].reverbFlg = reverbFlg; D_8016B8B8[channelIdx].stereoBits = stereoBits;
} }
if (sp39 != D_8016B8B8[channelIdx].unk_0B) { if (sp39 != D_8016B8B8[channelIdx].unk_0B) {
// CHAN_UPD_SCRIPT_IO (slot 3) // CHAN_UPD_SCRIPT_IO (slot 3)
@ -2860,7 +2860,7 @@ void func_800F3ED4(void) {
t->freqScale = 1.0f; t->freqScale = 1.0f;
t->reverb = 0; t->reverb = 0;
t->panSigned = 0x40; t->panSigned = 0x40;
t->reverbFlg = 0; t->stereoBits = 0;
t->unk_0B = 0xFF; t->unk_0B = 0xFF;
t->unk_0C = 0xFF; t->unk_0C = 0xFF;
} }