[Scummvm-git-logs] scummvm master -> 9e0cd0c1ade0ca2450c2b015360a5cfeb5443bee
dreammaster
paulfgilbert at gmail.com
Mon Sep 7 19:28:34 UTC 2020
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
9e0cd0c1ad NUVIE: Hook up Nuvie audio controls to ScummVM's
Commit: 9e0cd0c1ade0ca2450c2b015360a5cfeb5443bee
https://github.com/scummvm/scummvm/commit/9e0cd0c1ade0ca2450c2b015360a5cfeb5443bee
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-09-07T12:28:22-07:00
Commit Message:
NUVIE: Hook up Nuvie audio controls to ScummVM's
Changed paths:
engines/ultima/nuvie/menus/audio_dialog.cpp
engines/ultima/nuvie/nuvie.cpp
engines/ultima/nuvie/nuvie.h
engines/ultima/nuvie/sound/song_adplug.cpp
engines/ultima/nuvie/sound/sound_manager.cpp
diff --git a/engines/ultima/nuvie/menus/audio_dialog.cpp b/engines/ultima/nuvie/menus/audio_dialog.cpp
index 1cb0b81e0f..2d03448328 100644
--- a/engines/ultima/nuvie/menus/audio_dialog.cpp
+++ b/engines/ultima/nuvie/menus/audio_dialog.cpp
@@ -37,6 +37,7 @@
#include "ultima/nuvie/core/party.h"
#include "ultima/nuvie/core/converse.h"
#include "ultima/nuvie/misc/u6_misc.h"
+#include "ultima/nuvie/nuvie.h"
namespace Ultima {
namespace Nuvie {
@@ -235,7 +236,7 @@ GUI_status AudioDialog::callback(uint16 msg, GUI_CallBack *caller, void *data) {
sm->set_music_volume(musicVol);
if (sm->get_m_pCurrentSong() != NULL)
sm->get_m_pCurrentSong()->SetVolume(musicVol);
- config->set("config/audio/music_volume", musicVol);
+ config->set("config/music_volume", musicVol);
}
int sfx_selection = sfxVol_button->GetSelection();
@@ -243,12 +244,12 @@ GUI_status AudioDialog::callback(uint16 msg, GUI_CallBack *caller, void *data) {
uint8 sfxVol = sfx_selection * 25.5;
sm->set_sfx_volume(sfxVol);
// probably need to update sfx volume if we have background sfx implemented
- config->set("config/audio/sfx_volume", sfxVol);
+ config->set("config/sfx_volume", sfxVol);
}
if ((bool)music_button->GetSelection() != sm->is_music_enabled())
sm->set_music_enabled(music_button->GetSelection());
- config->set("config/audio/enable_music", music_button->GetSelection() ? "yes" : "no");
+ config->set("config/music_mute", !music_button->GetSelection());
if ((bool)sfx_button->GetSelection() != sm->is_sfx_enabled())
sm->set_sfx_enabled(sfx_button->GetSelection());
@@ -265,14 +266,14 @@ GUI_status AudioDialog::callback(uint16 msg, GUI_CallBack *caller, void *data) {
sm->stop_music_on_group_change = group_b->GetSelection();
config->set("config/audio/stop_music_on_group_change", group_b->GetSelection() ? "yes" : "no");
- config->set("config/audio/enable_sfx", sfx_button->GetSelection() ? "yes" : "no");
+ config->set("config/sfx_mute", !sfx_button->GetSelection());
if ((bool)audio_button->GetSelection() != sm->is_audio_enabled())
sm->set_audio_enabled(audio_button->GetSelection());
- config->set("config/audio/enabled", audio_button->GetSelection() ? "yes" : "no");
+ config->set("config/mute", !audio_button->GetSelection());
if (speech_b) {
bool speech_enabled = speech_b->GetSelection() ? true : false;
- config->set("config/ultima6/enable_speech", speech_b->GetSelection() ? "yes" : "no");
+ config->set("config/speech_mute", !speech_b->GetSelection());
if (speech_enabled != sm->is_speech_enabled())
sm->set_speech_enabled(speech_enabled);
}
diff --git a/engines/ultima/nuvie/nuvie.cpp b/engines/ultima/nuvie/nuvie.cpp
index bbaa5e9fed..9f15147af0 100644
--- a/engines/ultima/nuvie/nuvie.cpp
+++ b/engines/ultima/nuvie/nuvie.cpp
@@ -49,7 +49,7 @@ NuvieEngine *g_engine;
NuvieEngine::NuvieEngine(OSystem *syst, const Ultima::UltimaGameDescription *gameDesc) :
Ultima::Shared::UltimaEngine(syst, gameDesc), _config(nullptr), _savegame(nullptr),
- _screen(nullptr), _script(nullptr), _game(nullptr) {
+ _screen(nullptr), _script(nullptr), _game(nullptr), _soundManager(nullptr) {
g_engine = this;
}
@@ -144,12 +144,12 @@ bool NuvieEngine::initialize() {
if (checkDataDir() == false)
return false;
- SoundManager *sound_manager = new SoundManager(_mixer);
- sound_manager->nuvieStartup(_config);
+ _soundManager = new SoundManager(_mixer);
+ _soundManager->nuvieStartup(_config);
- _game = new Game(_config, events, _screen, gui, gameType, sound_manager);
+ _game = new Game(_config, events, _screen, gui, gameType, _soundManager);
- _script = new Script(_config, gui, sound_manager, gameType);
+ _script = new Script(_config, gui, _soundManager, gameType);
if (_script->init() == false)
return false;
@@ -230,6 +230,26 @@ bool NuvieEngine::checkDataDir() {
return true;
}
+void NuvieEngine::syncSoundSettings() {
+ Ultima::Shared::UltimaEngine::syncSoundSettings();
+ if (!_soundManager)
+ return;
+
+ _soundManager->set_audio_enabled(
+ !ConfMan.hasKey("mute") || !ConfMan.getBool("mute"));
+ _soundManager->set_sfx_enabled(
+ !ConfMan.hasKey("sfx_mute") || !ConfMan.getBool("sfx_mute"));
+ _soundManager->set_music_enabled(
+ !ConfMan.hasKey("music_mute") || !ConfMan.getBool("music_mute"));
+ _soundManager->set_speech_enabled(
+ !ConfMan.hasKey("speech_mute") || !ConfMan.getBool("speech_mute"));
+
+ _soundManager->set_sfx_volume(ConfMan.hasKey("sfx_volume") ?
+ ConfMan.getInt("sfx_volume") : 255);
+ _soundManager->set_music_volume(ConfMan.hasKey("music_volume") ?
+ ConfMan.getInt("music_volume") : 255);
+}
+
bool NuvieEngine::canLoadGameStateCurrently(bool isAutosave) {
if (_game == nullptr || !_game->isLoaded())
return false;
diff --git a/engines/ultima/nuvie/nuvie.h b/engines/ultima/nuvie/nuvie.h
index d99432a147..3614074c49 100644
--- a/engines/ultima/nuvie/nuvie.h
+++ b/engines/ultima/nuvie/nuvie.h
@@ -38,6 +38,7 @@ class Game;
class SaveGame;
class Screen;
class Script;
+class SoundManager;
class NuvieEngine : public Ultima::Shared::UltimaEngine {
private:
@@ -46,6 +47,8 @@ private:
Script *_script;
Game *_game;
SaveGame *_savegame;
+
+ SoundManager *_soundManager;
private:
void initConfig();
void assignGameConfigValues(uint8 game_type);
@@ -71,6 +74,11 @@ public:
*/
Common::Error run() override;
+ /**
+ * Synchronize sound settings
+ */
+ void syncSoundSettings() override;
+
/**
* Indicates whether a game state can be loaded.
* @param isAutosave Flags whether it's an autosave check
@@ -113,6 +121,13 @@ public:
* Quick save or load a savegame
*/
bool quickSave(int saveSlot, bool isLoad);
+
+ /**
+ * Return a reference to the sound manager
+ */
+ SoundManager *getSoundManager() const {
+ return _soundManager;
+ }
};
extern NuvieEngine *g_engine;
diff --git a/engines/ultima/nuvie/sound/song_adplug.cpp b/engines/ultima/nuvie/sound/song_adplug.cpp
index 43a37f7e2c..3a3439efa4 100644
--- a/engines/ultima/nuvie/sound/song_adplug.cpp
+++ b/engines/ultima/nuvie/sound/song_adplug.cpp
@@ -27,6 +27,7 @@
#include "ultima/nuvie/sound/adplug/u6m.h"
#include "ultima/nuvie/sound/song_adplug.h"
#include "ultima/nuvie/sound/sound_manager.h"
+#include "ultima/nuvie/nuvie.h"
namespace Ultima {
namespace Nuvie {
@@ -39,7 +40,6 @@ SongAdPlug::SongAdPlug(Audio::Mixer *m, CEmuopl *o) {
}
SongAdPlug::~SongAdPlug() {
-//delete player;
}
bool SongAdPlug::Init(const char *filename, uint16 song_num) {
@@ -54,14 +54,18 @@ bool SongAdPlug::Init(const char *filename, uint16 song_num) {
}
bool SongAdPlug::Play(bool looping) {
+ // Just in case song is already playing, stop it
+ Stop();
+
+ // Tell the mixer to play the stream
if (stream) {
- mixer->playStream(Audio::Mixer::kMusicSoundType, &handle, stream, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO);
+ byte volume = g_engine->getSoundManager()->get_music_volume();
+ mixer->playStream(Audio::Mixer::kPlainSoundType, &handle, stream, -1, volume, 0, DisposeAfterUse::NO);
}
return true;
}
bool SongAdPlug::Stop() {
-
mixer->stopHandle(handle);
stream->rewind();
return true;
@@ -72,17 +76,5 @@ bool SongAdPlug::SetVolume(uint8 volume) {
return true;
}
-/*
-bool SongAdPlug::Pause() {
- if (!Mix_PlayingMusic()) return false;
- return true;
-}
-
-bool SongAdPlug::Resume() {
- if (Mix_PlayingMusic()) return false;
- return true;
-}
-*/
-
} // End of namespace Nuvie
} // End of namespace Ultima
diff --git a/engines/ultima/nuvie/sound/sound_manager.cpp b/engines/ultima/nuvie/sound/sound_manager.cpp
index ee1639e344..417bc8cdc1 100644
--- a/engines/ultima/nuvie/sound/sound_manager.cpp
+++ b/engines/ultima/nuvie/sound/sound_manager.cpp
@@ -111,9 +111,12 @@ bool SoundManager::nuvieStartup(Configuration *config) {
Std::string music_cfg_file; //full path and filename to music.cfg
Std::string sound_dir;
Std::string sfx_style;
+ bool val;
m_Config = config;
- m_Config->value("config/audio/enabled", audio_enabled, true);
+
+ m_Config->value("config/mute", val, false);
+ audio_enabled = !val;
m_Config->value("config/GameType", game_type);
m_Config->value("config/audio/stop_music_on_group_change", stop_music_on_group_change, true);
@@ -127,15 +130,17 @@ bool SoundManager::nuvieStartup(Configuration *config) {
return false;
}*/
- m_Config->value("config/audio/enable_music", music_enabled, true);
- m_Config->value("config/audio/enable_sfx", sfx_enabled, true);
+ m_Config->value("config/music_mute", val, false);
+ music_enabled = !val;
+ m_Config->value("config/sfx_mute", val, false);
+ sfx_enabled = !val;
int volume;
- m_Config->value("config/audio/music_volume", volume, Audio::Mixer::kMaxChannelVolume);
+ m_Config->value("config/music_volume", volume, Audio::Mixer::kMaxChannelVolume);
music_volume = clamp(volume, 0, 255);
- m_Config->value("config/audio/sfx_volume", volume, Audio::Mixer::kMaxChannelVolume);
+ m_Config->value("config/sfx_volume", volume, Audio::Mixer::kMaxChannelVolume);
sfx_volume = clamp(volume, 0, 255);
config_key = config_get_game_key(config);
@@ -149,12 +154,13 @@ bool SoundManager::nuvieStartup(Configuration *config) {
config_key = config_get_game_key(config);
config_key.append("/sounddir");
config->value(config_key, sound_dir, "");
+
if (game_type == NUVIE_GAME_U6) { // FM-Towns speech
- config_key = config_get_game_key(config);
- config_key.append("/enable_speech");
- config->value(config_key, speech_enabled, true);
- } else
+ config->value("config/speech_mute", val, false);
+ speech_enabled = !val;
+ } else {
speech_enabled = false;
+ }
if (!initAudio()) {
return false;
More information about the Scummvm-git-logs
mailing list