mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-11-25 05:25:14 +00:00
Added music volume config
This commit is contained in:
parent
fe1a8a8602
commit
49dc1e3495
7 changed files with 33 additions and 7 deletions
|
@ -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")
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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[] = {
|
||||
|
|
|
@ -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},
|
||||
|
|
|
@ -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[];
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue