diff options
| author | KiritoDv <kiritodev01@gmail.com> | 2024-11-30 22:46:29 -0600 |
|---|---|---|
| committer | KiritoDv <kiritodev01@gmail.com> | 2024-11-30 22:46:29 -0600 |
| commit | 1bcfb17f8b9664dbce8d232f291544e7a280bbca (patch) | |
| tree | 8d7aaaa4d8e752f38a7822bd2c9edc16d2f996e1 /src/audio | |
| parent | 5e2c338fc7de5dbeb7248bf54a13d96354922753 (diff) | |
Implemented audio sliders
Diffstat (limited to 'src/audio')
| -rw-r--r-- | src/audio/effects.c | 2 | ||||
| -rw-r--r-- | src/audio/external.c | 5 | ||||
| -rw-r--r-- | src/audio/external.h | 2 | ||||
| -rw-r--r-- | src/audio/internal.h | 1 | ||||
| -rw-r--r-- | src/audio/load.c | 6 | ||||
| -rw-r--r-- | src/audio/playback.c | 4 |
6 files changed, 19 insertions, 1 deletions
diff --git a/src/audio/effects.c b/src/audio/effects.c index 4a5c2dcc3..822ca29be 100644 --- a/src/audio/effects.c +++ b/src/audio/effects.c @@ -12,7 +12,7 @@ void sequence_channel_process_sound(struct SequenceChannel* seqChannel, s32 reca s32 i; if (seqChannel->changes.as_bitfields.volume || recalculateVolume) { - channelVolume = seqChannel->volume * seqChannel->volumeScale * seqChannel->seqPlayer->appliedFadeVolume; + channelVolume = (seqChannel->volume * (seqChannel->volumeScale * seqChannel->seqPlayer->fadeVolume)) * seqChannel->seqPlayer->gameVolume; if (seqChannel->seqPlayer->muted && (seqChannel->muteBehavior & MUTE_BEHAVIOR_SOFTEN) != 0) { channelVolume = seqChannel->seqPlayer->muteVolumeScale * channelVolume; } diff --git a/src/audio/external.c b/src/audio/external.c index 032e25c19..e840e478d 100644 --- a/src/audio/external.c +++ b/src/audio/external.c @@ -3547,6 +3547,11 @@ void func_800CB14C() { } } +void audio_set_player_volume(u8 player, f32 volume) { + gSequencePlayers[player].gameVolume = volume; + gSequencePlayers[player].recalculateVolume = 1; +} + // run audio? void func_800CB2C4() { func_800C1F8C(); diff --git a/src/audio/external.h b/src/audio/external.h index f09f456ed..01022cd8f 100644 --- a/src/audio/external.h +++ b/src/audio/external.h @@ -322,6 +322,8 @@ void func_800CB14C(void); void func_800CB2C4(void); void func_800CBC24(void); +extern void audio_set_player_volume(u8 player, f32 volume); + // This is some from other file, its definitely not part of audio's data/bss extern s8 D_801657E5; diff --git a/src/audio/internal.h b/src/audio/internal.h index 9b7fb37b4..8d0dfbc17 100644 --- a/src/audio/internal.h +++ b/src/audio/internal.h @@ -228,6 +228,7 @@ struct SequencePlayer { /*0x130, 0x13C*/ u8* bankDmaCurrMemAddr; /*0x138, 0x140*/ uintptr_t bankDmaCurrDevAddr; /*0x13C, 0x144*/ size_t bankDmaRemaining; + f32 gameVolume; }; // size = 0x140, 0x148 on EU, 0x14C on SH struct AdsrSettings { diff --git a/src/audio/load.c b/src/audio/load.c index 0a3a15536..4ed6ed5a4 100644 --- a/src/audio/load.c +++ b/src/audio/load.c @@ -5,6 +5,7 @@ #include "audio/data.h" #include "audio/heap.h" #include "audio/internal.h" +#include "audio/external.h" #include "audio/playback.h" #include "audio/synthesis.h" #include "audio/seqplayer.h" @@ -803,6 +804,11 @@ void audio_init(void) { sound_alloc_pool_init(&gUnkPool1.pool, soundAlloc(&gAudioInitPool, (u32) D_800EA5D8), (u32) D_800EA5D8); init_sequence_players(); gAudioLoadLock = 0x76557364; + + audio_set_player_volume(SEQ_PLAYER_LEVEL, CVarGetFloat("gMainMusicVolume", 1.0f)); + audio_set_player_volume(SEQ_PLAYER_ENV, CVarGetFloat("gEnvironmentVolume", 1.0f)); + audio_set_player_volume(SEQ_PLAYER_SFX, CVarGetFloat("gSFXMusicVolume", 1.0f)); + } #else #ifdef VERSION_EU diff --git a/src/audio/playback.c b/src/audio/playback.c index 671a38260..30dcb388d 100644 --- a/src/audio/playback.c +++ b/src/audio/playback.c @@ -71,6 +71,10 @@ void note_set_vel_pan_reverb(struct Note* note, f32 velocity, u8 pan, u8 reverbV velocity = 1.0f; } + float master_vol = CVarGetFloat("gGameMasterVolume", 1.0f); + volLeft *= master_vol; + volRight *= master_vol; + sub->targetVolLeft = ((s32) (velocity * volLeft * 4095.999f)); sub->targetVolRight = ((s32) (velocity * volRight * 4095.999f)); |
