mirror of
https://github.com/izzy2lost/2ship2harkinian-Android.git
synced 2026-06-19 01:20:08 -07:00
Add volume slider support (#201)
* Add volume slider support * extern fix?
This commit is contained in:
@@ -6,21 +6,16 @@
|
||||
#include "UIWidgets.hpp"
|
||||
#include <unordered_map>
|
||||
#include <string>
|
||||
#include "z64.h"
|
||||
#include "2s2h/Enhancements/Enhancements.h"
|
||||
#include "HudEditor.h"
|
||||
|
||||
extern bool ShouldClearTextureCacheAtEndOfFrame;
|
||||
|
||||
extern "C" PlayState* gPlayState;
|
||||
|
||||
enum SeqPlayers {
|
||||
/* 0 */ SEQ_BGM_MAIN,
|
||||
/* 1 */ SEQ_FANFARE,
|
||||
/* 2 */ SEQ_SFX,
|
||||
/* 3 */ SEQ_BGM_SUB,
|
||||
/* 4 */ SEQ_MAX
|
||||
};
|
||||
extern "C" {
|
||||
#include "z64.h"
|
||||
#include "functions.h"
|
||||
extern PlayState* gPlayState;
|
||||
}
|
||||
|
||||
static const std::unordered_map<int32_t, const char*> textureFilteringMap = {
|
||||
{ FILTER_THREE_POINT, "Three-Point" },
|
||||
@@ -118,16 +113,19 @@ void DrawSettingsMenu() {
|
||||
UIWidgets::CVarSliderFloat("Master Volume: %.0f %%", "gSettings.Audio.MasterVolume", 0.0f, 1.0f, 1.0f, { .showButtons = false, .format = "", .isPercentage = true });
|
||||
|
||||
if (UIWidgets::CVarSliderFloat("Main Music Volume: %.0f %%", "gSettings.Audio.MainMusicVolume", 0.0f, 1.0f, 1.0f, { .showButtons = false, .format = "", .isPercentage = true })) {
|
||||
// Audio_SetGameVolume(SEQ_BGM_MAIN, CVarGetFloat("gSettings.Audio.MainMusicVolume", 1.0f));
|
||||
AudioSeq_SetPortVolumeScale(SEQ_PLAYER_BGM_MAIN, CVarGetFloat("gSettings.Audio.MainMusicVolume", 1.0f));
|
||||
}
|
||||
if (UIWidgets::CVarSliderFloat("Sub Music Volume: %.0f %%", "gSettings.Audio.SubMusicVolume", 0.0f, 1.0f, 1.0f, { .showButtons = false, .format = "", .isPercentage = true })) {
|
||||
// Audio_SetGameVolume(SEQ_BGM_SUB, CVarGetFloat("gSettings.Audio.SubMusicVolume", 1.0f));
|
||||
AudioSeq_SetPortVolumeScale(SEQ_PLAYER_BGM_SUB, CVarGetFloat("gSettings.Audio.SubMusicVolume", 1.0f));
|
||||
}
|
||||
if (UIWidgets::CVarSliderFloat("Sound Effects Volume: %.0f %%", "gSettings.Audio.SoundEffectsVolume", 0.0f, 1.0f, 1.0f, { .showButtons = false, .format = "", .isPercentage = true })) {
|
||||
// Audio_SetGameVolume(SEQ_SFX, CVarGetFloat("gSettings.Audio.SoundEffectsVolume", 1.0f));
|
||||
AudioSeq_SetPortVolumeScale(SEQ_PLAYER_SFX, CVarGetFloat("gSettings.Audio.SoundEffectsVolume", 1.0f));
|
||||
}
|
||||
if (UIWidgets::CVarSliderFloat("Fanfare Volume: %.0f %%", "gSettings.Audio.FanfareVolume", 0.0f, 1.0f, 1.0f, { .showButtons = false, .format = "", .isPercentage = true })) {
|
||||
// Audio_SetGameVolume(SEQ_FANFARE, CVarGetFloat("gSettings.Audio.FanfareVolume", 1.0f));
|
||||
AudioSeq_SetPortVolumeScale(SEQ_PLAYER_FANFARE, CVarGetFloat("gSettings.Audio.FanfareVolume", 1.0f));
|
||||
}
|
||||
if (UIWidgets::CVarSliderFloat("Ambience Volume: %.0f %%", "gSettings.Audio.AmbienceVolume", 0.0f, 1.0f, 1.0f, { .showButtons = false, .format = "", .isPercentage = true })) {
|
||||
AudioSeq_SetPortVolumeScale(SEQ_PLAYER_AMBIENCE, CVarGetFloat("gSettings.Audio.AmbienceVolume", 1.0f));
|
||||
}
|
||||
|
||||
auto currentAudioBackend = LUS::Context::GetInstance()->GetAudio()->GetAudioBackend();
|
||||
|
||||
@@ -1328,6 +1328,8 @@ void PadMgr_ThreadEntry();
|
||||
void Heaps_Alloc(void);
|
||||
// #endregion
|
||||
// #region 2S2H [Port] New methods added for porting
|
||||
void AudioSeq_SetPortVolumeScale(u8 seqPlayerIndex, f32 volume);
|
||||
float AudioSeq_GetPortVolumeScale(u8 seqPlayerIndex);
|
||||
void Graph_OpenDisps(Gfx** dispRefs, Gfx* dispVals, GraphicsContext* gfxCtx, const char* file, s32 line);
|
||||
void Graph_CloseDisps(Gfx** dispRefs, Gfx* dispVals, GraphicsContext* gfxCtx, const char* file, s32 line);
|
||||
void Lights_GlowCheckPrepare(PlayState* play);
|
||||
|
||||
@@ -253,6 +253,8 @@ typedef struct SequencePlayer {
|
||||
/* 0x0E0 */ u32 scriptCounter;
|
||||
/* 0x0E4 */ UNK_TYPE1 unk_E4[0x74]; // unused struct members for sequence/sound font dma management, according to sm64 decomp
|
||||
/* 0x158 */ s8 seqScriptIO[8];
|
||||
// #region 2S2H [Port][Audio]
|
||||
/* */ f32 portVolumeScale; // volume from the sliders in the menubar
|
||||
} SequencePlayer; // size = 0x160
|
||||
|
||||
typedef union {
|
||||
|
||||
@@ -19,7 +19,9 @@ void AudioScript_SequenceChannelProcessSound(SequenceChannel* channel, s32 recal
|
||||
s32 i;
|
||||
|
||||
if (channel->changes.s.volume || recalculateVolume) {
|
||||
channelVolume = channel->volume * channel->volumeScale * channel->seqPlayer->appliedFadeVolume;
|
||||
// 2S2H [Port][Audio] Scale volume by our sequence player volume sliders
|
||||
channelVolume = channel->volume * channel->volumeScale * channel->seqPlayer->appliedFadeVolume *
|
||||
channel->seqPlayer->portVolumeScale;
|
||||
if (channel->seqPlayer->muted && (channel->muteFlags & MUTE_FLAGS_SOFTEN)) {
|
||||
channelVolume = channelVolume * channel->seqPlayer->muteVolumeScale;
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ void AudioPlayback_InitSampleState(Note* note, NoteSampleState* sampleState, Not
|
||||
vel = 0.0f > vel ? 0.0f : vel;
|
||||
vel = 1.0f < vel ? 1.0f : vel;
|
||||
|
||||
float master_vol = CVarGetFloat("gGameMasterVolume", 1.0f);
|
||||
float master_vol = CVarGetFloat("gSettings.Audio.MasterVolume", 1.0f);
|
||||
sampleState->targetVolLeft = (s32)((vel * volLeft) * (0x1000 - 0.001f)) * master_vol;
|
||||
sampleState->targetVolRight = (s32)((vel * volRight) * (0x1000 - 0.001f)) * master_vol;
|
||||
|
||||
|
||||
@@ -927,3 +927,18 @@ void AudioSeq_ResetActiveSequencesAndVolume(void) {
|
||||
}
|
||||
AudioSeq_ResetActiveSequences();
|
||||
}
|
||||
|
||||
// #region 2S2H [Port][Audio] Setter/Getter funcs for controlling the port volume sliders for each sequence player
|
||||
void AudioSeq_SetPortVolumeScale(u8 seqPlayerIndex, f32 volume) {
|
||||
if (seqPlayerIndex >= SEQ_PLAYER_MAX) {
|
||||
return;
|
||||
}
|
||||
|
||||
gAudioCtx.seqPlayers[seqPlayerIndex].portVolumeScale = volume;
|
||||
gAudioCtx.seqPlayers[seqPlayerIndex].recalculateVolume = true;
|
||||
}
|
||||
|
||||
float AudioSeq_GetPortVolumeScale(u8 seqPlayerIndex) {
|
||||
return gAudioCtx.seqPlayers[seqPlayerIndex].portVolumeScale;
|
||||
}
|
||||
// #endregion
|
||||
|
||||
@@ -122,10 +122,11 @@ void AudioMgr_Init(AudioMgr* audioMgr, void* stack, OSPri pri, OSId id, SchedCon
|
||||
Audio_InitSound();
|
||||
osSendMesg(&audioMgr->lockQueue, OS_MESG_PTR(NULL), OS_MESG_BLOCK);
|
||||
|
||||
// Audio_SetGameVolume(SEQ_PLAYER_BGM_MAIN, CVarGetFloat("gMainMusicVolume", 1.0f));
|
||||
// Audio_SetGameVolume(SEQ_PLAYER_BGM_SUB, CVarGetFloat("gSubMusicVolume", 1.0f));
|
||||
// Audio_SetGameVolume(SEQ_PLAYER_FANFARE, CVarGetFloat("gFanfareVolume", 1.0f));
|
||||
// Audio_SetGameVolume(SEQ_PLAYER_SFX, CVarGetFloat("gSFXMusicVolume", 1.0f));
|
||||
AudioSeq_SetPortVolumeScale(SEQ_PLAYER_BGM_MAIN, CVarGetFloat("gSettings.Audio.MainMusicVolume", 1.0f));
|
||||
AudioSeq_SetPortVolumeScale(SEQ_PLAYER_BGM_SUB, CVarGetFloat("gSettings.Audio.SubMusicVolume", 1.0f));
|
||||
AudioSeq_SetPortVolumeScale(SEQ_PLAYER_SFX, CVarGetFloat("gSettings.Audio.SoundEffectsVolume", 1.0f));
|
||||
AudioSeq_SetPortVolumeScale(SEQ_PLAYER_FANFARE, CVarGetFloat("gSettings.Audio.FanfareVolume", 1.0f));
|
||||
AudioSeq_SetPortVolumeScale(SEQ_PLAYER_AMBIENCE, CVarGetFloat("gSettings.Audio.AmbienceVolume", 1.0f));
|
||||
|
||||
// osCreateThread(&audioMgr->thread, id, AudioMgr_ThreadEntry, audioMgr, stack, pri);
|
||||
// osStartThread(&audioMgr->thread);
|
||||
|
||||
Reference in New Issue
Block a user