Added music volume config

This commit is contained in:
NoHomoBoi 2020-06-11 22:39:13 -05:00
parent fe1a8a8602
commit 49dc1e3495
7 changed files with 33 additions and 7 deletions

View file

@ -105,6 +105,7 @@
#define TEXT_OPT_NEAREST _("Nearest")
#define TEXT_OPT_LINEAR _("Linear")
#define TEXT_OPT_MVOLUME _("Master Volume")
#define TEXT_OPT_TMUSIC _("Music Volume")
#define TEXT_OPT_VSYNC _("Vertical Sync")
#define TEXT_OPT_DOUBLE _("Double")
#define TEXT_RESET_WINDOW _("Reset Window")

View file

@ -15,6 +15,7 @@
#include "seq_ids.h"
#include "dialog_ids.h"
#include "level_table.h"
#include "pc/configfile.h"
#ifdef VERSION_EU
#define EU_FLOAT(x) x ## f
@ -2061,6 +2062,20 @@ void play_dialog_sound(u8 dialogID) {
#endif
}
void setBackgroundMusicVolume(f32 volume){
bool needsToUpdate = false;
for(int i = 0; i < 16; i++){
f32 currentVolume = gSequencePlayers[SEQ_PLAYER_LEVEL].channels[i]->volume;
if(volume != currentVolume){
gSequencePlayers[SEQ_PLAYER_LEVEL].channels[i]->volume = volume;
needsToUpdate = true;
}
}
if(needsToUpdate){
update_game_sound();
}
}
void play_music(u8 player, u16 seqArgs, u16 fadeTimer) {
u8 seqId = seqArgs & 0xff;
u8 priority = seqArgs >> 8;
@ -2069,11 +2084,12 @@ void play_music(u8 player, u16 seqArgs, u16 fadeTimer) {
// Except for the background music player, we don't support queued
// sequences. Just play them immediately, stopping any old sequence.
if (player != 0) {
play_sequence(player, seqId, fadeTimer);
return;
}
// Abort if the queue is already full.
if (sBackgroundMusicQueueSize == MAX_BG_MUSIC_QUEUE_SIZE) {
return;

View file

@ -37,6 +37,7 @@ void sound_banks_disable(u8 player, u16 bankMask);
void sound_banks_enable(u8 player, u16 bankMask);
void func_80320A4C(u8 bankIndex, u8 arg1);
void play_dialog_sound(u8 dialogID);
void setBackgroundMusicVolume(f32 volume);
void play_music(u8 player, u16 seqArgs, u16 fadeTimer);
void stop_background_music(u16 seqId);
void fadeout_background_music(u16 arg0, u16 fadeOut);

View file

@ -84,6 +84,7 @@ static const u8 optsVideoStr[][32] = {
static const u8 optsAudioStr[][32] = {
{ TEXT_OPT_MVOLUME },
{ TEXT_OPT_TMUSIC },
};
static const u8 optsCheatsStr[][64] = {
@ -251,6 +252,7 @@ static struct Option optsVideo[] = {
static struct Option optsAudio[] = {
DEF_OPT_SCROLL( optsAudioStr[0], &configMasterVolume, 0, MAX_VOLUME, 1 ),
DEF_OPT_SCROLL( optsAudioStr[1], &configMusicVolume, 0, 100, 1),
};
static struct Option optsCheats[] = {

View file

@ -57,6 +57,7 @@ ConfigWindow configWindow = {
};
unsigned int configFiltering = 1; // 0=force nearest, 1=linear, (TODO) 2=three-point
unsigned int configMasterVolume = MAX_VOLUME; // 0 - MAX_VOLUME
unsigned int configMusicVolume = 100;
// Keyboard mappings (VK_ values, by default keyboard/gamepad/mouse)
unsigned int configKeyA[MAX_BINDS] = { 0x0026, 0x1000, 0x1103 };
@ -105,6 +106,7 @@ static const struct ConfigOption options[] = {
{.name = "vsync", .type = CONFIG_TYPE_UINT, .uintValue = &configWindow.vsync},
{.name = "texture_filtering", .type = CONFIG_TYPE_UINT, .uintValue = &configFiltering},
{.name = "master_volume", .type = CONFIG_TYPE_UINT, .uintValue = &configMasterVolume},
{.name = "music_enabled", .type = CONFIG_TYPE_UINT, .uintValue = &configMasterVolume},
{.name = "key_a", .type = CONFIG_TYPE_BIND, .uintValue = configKeyA},
{.name = "key_b", .type = CONFIG_TYPE_BIND, .uintValue = configKeyB},
{.name = "key_start", .type = CONFIG_TYPE_BIND, .uintValue = configKeyStart},

View file

@ -21,6 +21,7 @@ typedef struct {
extern ConfigWindow configWindow;
extern unsigned int configFiltering;
extern unsigned int configMasterVolume;
extern unsigned int configMusicVolume;
extern unsigned int configKeyA[];
extern unsigned int configKeyB[];
extern unsigned int configKeyStart[];

View file

@ -67,11 +67,12 @@ void send_display_list(struct SPTask *spTask) {
#define printf
void produce_one_frame(void) {
void produce_one_frame(void) {
gfx_start_frame();
game_loop_one_iteration();
thread6_rumble_loop(NULL);
thread6_rumble_loop(NULL);
int samples_left = audio_api->buffered();
u32 num_audio_samples = samples_left < audio_api->get_desired_buffered() ? 544 : 528;
//printf("Audio samples: %d %u\n", samples_left, num_audio_samples);
@ -83,15 +84,17 @@ void produce_one_frame(void) {
u32 num_audio_samples = audio_cnt < 2 ? 528 : 544;*/
create_next_audio_buffer(audio_buffer + i * (num_audio_samples * 2), num_audio_samples);
}
//printf("Audio samples before submitting: %d\n", audio_api->buffered());
//printf("Audio samples before submitting: %d\n", audio_api->buffered());
setBackgroundMusicVolume(configMusicVolume / 100.0);
// scale by master volume (0-127)
const s32 mod = (s32)configMasterVolume;
for (u32 i = 0; i < num_audio_samples * 4; ++i)
audio_buffer[i] = ((s32)audio_buffer[i] * mod) >> VOLUME_SHIFT;
audio_buffer[i] = ((s32)audio_buffer[i] * mod) >> VOLUME_SHIFT;
audio_api->play((u8*)audio_buffer, 2 * num_audio_samples * 4);
gfx_end_frame();
}