diff --git a/include/functions.h b/include/functions.h index f56e20a6c9..b00e402a11 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1979,7 +1979,7 @@ void Audio_InitMesgQueues(void); void Audio_osInvalDCache(void* buf, s32 size); void Audio_osWritebackDCache(void* mem, s32 size); 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_NoteInit(Note* note); void Audio_NoteDisable(Note* note); diff --git a/include/z64audio.h b/include/z64audio.h index aa0cc9dd3c..4923303fc8 100644 --- a/include/z64audio.h +++ b/include/z64audio.h @@ -285,25 +285,25 @@ typedef struct { } AdsrState; typedef struct { - /* 0x00 */ u8 bit0 : 1; - /* 0x00 */ u8 bit1 : 1; + /* 0x00 */ u8 bit0 : 1; // unused? + /* 0x00 */ u8 bit1 : 1; // unused? /* 0x00 */ u8 bit2 : 2; /* 0x00 */ u8 strongRight : 1; /* 0x00 */ u8 strongLeft : 1; /* 0x00 */ u8 stereoHeadsetEffects : 1; /* 0x00 */ u8 usesHeadsetPanEffects : 1; -} ReverbBitsData; +} StereoData; typedef union { - /* 0x00 */ ReverbBitsData s; + /* 0x00 */ StereoData s; /* 0x00 */ u8 asByte; -} ReverbBits; +} Stereo; typedef struct { /* 0x00 */ u8 reverb; /* 0x01 */ u8 unk_1; /* 0x02 */ u8 pan; - /* 0x03 */ ReverbBits reverbBits; + /* 0x03 */ Stereo stereo; /* 0x04 */ u8 unk_4; /* 0x06 */ u16 unk_6; /* 0x08 */ f32 freqScale; @@ -374,7 +374,7 @@ typedef struct SequenceChannel { /* 0x84 */ NotePool notePool; /* 0xC4 */ s8 soundScriptIO[8]; // bridge between sound script and audio lib /* 0xCC */ s16* filter; - /* 0xD0 */ ReverbBits reverbBits; + /* 0xD0 */ Stereo stereo; } SequenceChannel; // size = 0xD4 // Also known as a Track, according to debug strings. @@ -387,7 +387,7 @@ typedef struct SequenceChannelLayer { /* 0x00 */ u8 ignoreDrumPan : 1; /* 0x00 */ u8 bit1 : 1; // "has initialized continuous notes"? /* 0x00 */ u8 notePropertiesNeedInit : 1; - /* 0x01 */ ReverbBits reverbBits; + /* 0x01 */ Stereo stereo; /* 0x02 */ u8 instOrWave; /* 0x03 */ u8 noteDuration; /* 0x04 */ u8 semitone; @@ -485,7 +485,7 @@ typedef struct { /* 0x00 */ vu8 enabled : 1; /* 0x00 */ u8 needsInit : 1; /*?0x00 */ u8 finished : 1; - /*?0x00 */ u8 envMixerNeedsInit : 1; + /* 0x00 */ u8 unused : 1; /* 0x00 */ u8 stereoStrongRight : 1; /* 0x00 */ u8 stereoStrongLeft : 1; /* 0x00 */ u8 stereoHeadsetEffects : 1; @@ -981,17 +981,17 @@ typedef struct { } AudioContext; // size = 0x6450 typedef struct { - /* 0x00 */ u8 vol; + /* 0x00 */ u8 reverbVol; /* 0x01 */ u8 unk_1; /* 0x02 */ u8 pan; - /* 0x03 */ ReverbBits reverbBits; + /* 0x03 */ Stereo stereo; /* 0x04 */ f32 frequency; /* 0x08 */ f32 velocity; /* 0x0C */ char unk_0C[0x4]; /* 0x10 */ s16* filter; /* 0x14 */ u8 unk_14; /* 0x16 */ u16 unk_16; -} Reverb; // size >= 0x18 +} NoteSubAttributes; // size = 0x18 typedef struct { /* 0x0000 */ u32 heap; diff --git a/src/code/audio_playback.c b/src/code/audio_playback.c index 17580145b1..970aaf8f2e 100644 --- a/src/code/audio_playback.c +++ b/src/code/audio_playback.c @@ -1,6 +1,6 @@ #include "global.h" -void Audio_NoteSetVelPanReverb(Note* note, NoteSubEu* sub, Reverb* reverb) { +void Audio_InitNoteSub(Note* note, NoteSubEu* sub, NoteSubAttributes* attrs) { f32 volRight, volLeft; s32 smallPanIndex; u64 pad; @@ -9,20 +9,20 @@ void Audio_NoteSetVelPanReverb(Note* note, NoteSubEu* sub, Reverb* reverb) { f32 vel; u8 pan; u8 reverbVol; - ReverbBitsData sp24; + StereoData sp24; s32 stereoHeadsetEffects = note->playbackState.stereoHeadsetEffects; - vel = reverb->velocity; - pan = reverb->pan; - reverbVol = reverb->vol; - sp24 = reverb->reverbBits.s; + vel = attrs->velocity; + pan = attrs->pan; + reverbVol = attrs->reverbVol; + sp24 = attrs->stereo.s; sub->bitField0.s = note->noteSubEu.bitField0.s; sub->bitField1.s = note->noteSubEu.bitField1.s; sub->sound.samples = note->noteSubEu.sound.samples; sub->unk_06 = note->noteSubEu.unk_06; - Audio_NoteSetResamplingRate(sub, reverb->frequency); + Audio_NoteSetResamplingRate(sub, attrs->frequency); pan &= 0x7F; @@ -94,10 +94,10 @@ void Audio_NoteSetVelPanReverb(Note* note, NoteSubEu* sub, Reverb* reverb) { sub->targetVolLeft = (s32)((vel * volLeft) * 4095.999f); sub->targetVolRight = (s32)((vel * volRight) * 4095.999f); - sub->unk_2 = reverb->unk_1; - sub->filter = reverb->filter; - sub->unk_07 = reverb->unk_14; - sub->unk_0E = reverb->unk_16; + sub->unk_2 = attrs->unk_1; + sub->filter = attrs->filter; + sub->unk_07 = attrs->unk_14; + sub->unk_0E = attrs->unk_16; sub->reverbVol = reverbVol; } @@ -154,12 +154,12 @@ void Audio_NoteDisable(Note* note) { void Audio_ProcessNotes(void) { s32 pad[2]; - NoteAttributes* attributes; + NoteAttributes* attrs; NoteSubEu* noteSubEu2; NoteSubEu* noteSubEu; Note* note; NotePlaybackState* playbackState; - Reverb reverb; + NoteSubAttributes subAttrs; u8 bookOffset; f32 scale; s32 i; @@ -248,47 +248,47 @@ void Audio_ProcessNotes(void) { scale = Audio_AdsrUpdate(&playbackState->adsr); Audio_NoteVibratoUpdate(note); - attributes = &playbackState->attributes; + attrs = &playbackState->attributes; if (playbackState->unk_04 == 1 || playbackState->unk_04 == 2) { - reverb.frequency = attributes->freqScale; - reverb.velocity = attributes->velocity; - reverb.pan = attributes->pan; - reverb.vol = attributes->reverb; - reverb.reverbBits = attributes->reverbBits; - reverb.unk_1 = attributes->unk_1; - reverb.filter = attributes->filter; - reverb.unk_14 = attributes->unk_4; - reverb.unk_16 = attributes->unk_6; + subAttrs.frequency = attrs->freqScale; + subAttrs.velocity = attrs->velocity; + subAttrs.pan = attrs->pan; + subAttrs.reverbVol = attrs->reverb; + subAttrs.stereo = attrs->stereo; + subAttrs.unk_1 = attrs->unk_1; + subAttrs.filter = attrs->filter; + subAttrs.unk_14 = attrs->unk_4; + subAttrs.unk_16 = attrs->unk_6; bookOffset = noteSubEu->bitField1.s.bookOffset; } else { SequenceChannelLayer* layer = playbackState->parentLayer; SequenceChannel* channel = layer->seqChannel; - reverb.frequency = layer->noteFreqScale; - reverb.velocity = layer->noteVelocity; - reverb.pan = layer->notePan; - if (layer->reverbBits.asByte == 0) { - reverb.reverbBits = channel->reverbBits; + subAttrs.frequency = layer->noteFreqScale; + subAttrs.velocity = layer->noteVelocity; + subAttrs.pan = layer->notePan; + if (layer->stereo.asByte == 0) { + subAttrs.stereo = channel->stereo; } else { - reverb.reverbBits = layer->reverbBits; + subAttrs.stereo = layer->stereo; } - reverb.vol = channel->reverb; - reverb.unk_1 = channel->unk_0C; - reverb.filter = channel->filter; - reverb.unk_14 = channel->unk_0F; - reverb.unk_16 = channel->unk_20; + subAttrs.reverbVol = channel->reverb; + subAttrs.unk_1 = channel->unk_0C; + subAttrs.filter = channel->filter; + subAttrs.unk_14 = channel->unk_0F; + subAttrs.unk_16 = channel->unk_20; bookOffset = channel->bookOffset & 0x7; if (channel->seqPlayer->muted && (channel->muteBehavior & 8)) { - reverb.frequency = 0.0f; - reverb.velocity = 0.0f; + subAttrs.frequency = 0.0f; + subAttrs.velocity = 0.0f; } } - reverb.frequency *= playbackState->vibratoFreqScale * playbackState->portamentoFreqScale; - reverb.frequency *= gAudioContext.audioBufferParameters.resampleRate; - reverb.velocity *= scale; - Audio_NoteSetVelPanReverb(note, noteSubEu2, &reverb); + subAttrs.frequency *= playbackState->vibratoFreqScale * playbackState->portamentoFreqScale; + subAttrs.frequency *= gAudioContext.audioBufferParameters.resampleRate; + subAttrs.velocity *= scale; + Audio_InitNoteSub(note, noteSubEu2, &subAttrs); noteSubEu->bitField1.s.bookOffset = bookOffset; skip:; } @@ -432,7 +432,7 @@ s32 func_800E7744(s32 instrument, s32 bankId, s32 instId, void* arg3) { void Audio_SeqChanLayerDecayRelease(SequenceChannelLayer* seqLayer, s32 target) { Note* note; - NoteAttributes* attributes; + NoteAttributes* attrs; SequenceChannel* chan; s32 i; @@ -447,7 +447,7 @@ void Audio_SeqChanLayerDecayRelease(SequenceChannelLayer* seqLayer, s32 target) } note = seqLayer->note; - attributes = ¬e->playbackState.attributes; + attrs = ¬e->playbackState.attributes; if (note->playbackState.wantedParentLayer == seqLayer) { 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) { - attributes->freqScale = seqLayer->noteFreqScale; - attributes->velocity = seqLayer->noteVelocity; - attributes->pan = seqLayer->notePan; + attrs->freqScale = seqLayer->noteFreqScale; + attrs->velocity = seqLayer->noteVelocity; + attrs->pan = seqLayer->notePan; if (seqLayer->seqChannel != NULL) { chan = seqLayer->seqChannel; - attributes->reverb = chan->reverb; - attributes->unk_1 = chan->unk_0C; - attributes->filter = chan->filter; + attrs->reverb = chan->reverb; + attrs->unk_1 = chan->unk_0C; + attrs->filter = chan->filter; - if (attributes->filter != NULL) { + if (attrs->filter != NULL) { 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; - attributes->unk_4 = chan->unk_0F; + attrs->unk_6 = chan->unk_20; + attrs->unk_4 = chan->unk_0F; if (chan->seqPlayer->muted && (chan->muteBehavior & 8)) { note->noteSubEu.bitField0.s.finished = true; } - if (seqLayer->reverbBits.asByte == 0) { - attributes->reverbBits = chan->reverbBits; + if (seqLayer->stereo.asByte == 0) { + attrs->stereo = chan->stereo; } else { - attributes->reverbBits = seqLayer->reverbBits; + attrs->stereo = seqLayer->stereo; } note->playbackState.priority = chan->someOtherPriority; } else { - attributes->reverbBits = seqLayer->reverbBits; + attrs->stereo = seqLayer->stereo; note->playbackState.priority = 1; } diff --git a/src/code/audio_seqplayer.c b/src/code/audio_seqplayer.c index ce96ce467c..64b8b95314 100644 --- a/src/code/audio_seqplayer.c +++ b/src/code/audio_seqplayer.c @@ -120,7 +120,7 @@ void Audio_SequenceChannelInit(SequenceChannel* seqChannel) { seqChannel->transposition = 0; seqChannel->largeNotes = false; seqChannel->bookOffset = 0; - seqChannel->reverbBits.asByte = 0; + seqChannel->stereo.asByte = 0; seqChannel->changes.asByte = 0xFF; seqChannel->scriptState.depth = 0; seqChannel->newPan = 0x40; @@ -186,7 +186,7 @@ s32 Audio_SeqChannelSetLayer(SequenceChannel* seqChannel, s32 layerIdx) { layer->ignoreDrumPan = false; layer->bit1 = false; layer->notePropertiesNeedInit = false; - layer->reverbBits.asByte = 0; + layer->stereo.asByte = 0; layer->portamento.mode = 0; layer->scriptState.depth = 0; layer->noteDuration = 0x80; @@ -587,7 +587,7 @@ s32 func_800EA0C0(SequenceChannelLayer* layer) { break; case 0xCD: - layer->reverbBits.asByte = Audio_M64ReadU8(state); + layer->stereo.asByte = Audio_M64ReadU8(state); break; case 0xCE: { @@ -1212,7 +1212,7 @@ void Audio_SequenceChannelProcessScript(SequenceChannel* channel) { } else { channel->stereoHeadsetEffects = false; } - channel->reverbBits.asByte = command & 0x7F; + channel->stereo.asByte = command & 0x7F; break; case 0xD1: command = (u8)parameters[0]; diff --git a/src/code/code_800E4FE0.c b/src/code/code_800E4FE0.c index 3d6e37cba7..b36cd0bdc2 100644 --- a/src/code/code_800E4FE0.c +++ b/src/code/code_800E4FE0.c @@ -18,7 +18,7 @@ typedef enum { CHAN_UPD_VIBE_X32, // 11 CHAN_UPD_UNK_0F, // 12 CHAN_UPD_UNK_20, // 13 - CHAN_UPD_REVERB_FLG // 14 + CHAN_UPD_STEREO // 14 } ChannelUpdateType; void func_800E6300(SequenceChannel* channel, AudioCmd* arg1); @@ -704,8 +704,8 @@ void func_800E6300(SequenceChannel* channel, AudioCmd* cmd) { case CHAN_UPD_UNK_20: channel->unk_20 = cmd->asUShort; return; - case CHAN_UPD_REVERB_FLG: - channel->reverbBits.asByte = cmd->asUbyte; + case CHAN_UPD_STEREO: + channel->stereo.asByte = cmd->asUbyte; return; } } diff --git a/src/code/code_800EC960.c b/src/code/code_800EC960.c index 1d18761b66..70d2bcd2a7 100644 --- a/src/code/code_800EC960.c +++ b/src/code/code_800EC960.c @@ -6,7 +6,7 @@ typedef struct { f32 freqScale; s8 reverb; s8 panSigned; - s8 reverbFlg; + s8 stereoBits; u8 unk_0B; u8 unk_0C; } unk_s1; @@ -2754,7 +2754,7 @@ void Audio_SetSoundProperties(u8 bankIdx, u8 entryIdx, u8 channelIdx) { s8 reverb = 0; f32 freqScale = 1.0f; s8 panSigned = 0x40; - u8 reverbFlg = 0; + u8 stereoBits = 0; u8 sp39 = 0; s8 sp38 = 0; f32 sp34; @@ -2781,17 +2781,17 @@ void Audio_SetSoundProperties(u8 bankIdx, u8 entryIdx, u8 channelIdx) { sp34 = D_801305C4[(entry->unk_26 & 0x400) >> 10]; if (!(entry->unk_26 & 0x800)) { 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) { - reverbFlg = D_8016B8B8[channelIdx].reverbFlg ^ 0x14; + stereoBits = D_8016B8B8[channelIdx].stereoBits ^ 0x14; } else { - reverbFlg = D_8016B8B8[channelIdx].reverbFlg ^ 0x18; + stereoBits = D_8016B8B8[channelIdx].stereoBits ^ 0x18; } } 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); D_8016B8B8[channelIdx].freqScale = freqScale; } - if (reverbFlg != D_8016B8B8[channelIdx].reverbFlg) { - Audio_QueueCmdS8(0xE020000 | (channelIdx << 8), reverbFlg | 0x10); - D_8016B8B8[channelIdx].reverbFlg = reverbFlg; + if (stereoBits != D_8016B8B8[channelIdx].stereoBits) { + Audio_QueueCmdS8(0xE020000 | (channelIdx << 8), stereoBits | 0x10); + D_8016B8B8[channelIdx].stereoBits = stereoBits; } if (sp39 != D_8016B8B8[channelIdx].unk_0B) { // CHAN_UPD_SCRIPT_IO (slot 3) @@ -2860,7 +2860,7 @@ void func_800F3ED4(void) { t->freqScale = 1.0f; t->reverb = 0; t->panSigned = 0x40; - t->reverbFlg = 0; + t->stereoBits = 0; t->unk_0B = 0xFF; t->unk_0C = 0xFF; }