Sound settings for Lure can be modified through the GMM

svn-id: r32855
This commit is contained in:
Christopher Page 2008-06-30 22:41:55 +00:00
parent 30c52e215c
commit c1ae3f7dd0
5 changed files with 37 additions and 15 deletions

View file

@ -128,7 +128,7 @@ public:
/** Run the Global Main Menu Dialog /** Run the Global Main Menu Dialog
*/ */
void mainMenuDialog(); virtual void mainMenuDialog();
/** Sync the engine's sound settings with the config manager /** Sync the engine's sound settings with the config manager
*/ */

View file

@ -246,6 +246,10 @@ void LureEngine::GUIError(const char *msg, ...) {
Engine::GUIErrorMessage(buffer); Engine::GUIErrorMessage(buffer);
} }
void LureEngine::syncSoundSettings() {
Sound.syncSounds(ConfMan.getInt("music_volume"), ConfMan.getInt("sfx_volume"));
}
Common::String *LureEngine::detectSave(int slotNumber) { Common::String *LureEngine::detectSave(int slotNumber) {
Common::ReadStream *f = this->_saveFileMan->openForLoading( Common::ReadStream *f = this->_saveFileMan->openForLoading(
generateSaveName(slotNumber)); generateSaveName(slotNumber));

View file

@ -70,6 +70,7 @@ public:
virtual int init(); virtual int init();
virtual int go(); virtual int go();
virtual void pauseEngineIntern(bool pause); virtual void pauseEngineIntern(bool pause);
virtual void syncSoundSettings();
Disk &disk() { return *_disk; } Disk &disk() { return *_disk; }

View file

@ -220,10 +220,12 @@ void SoundManager::addSound(uint8 soundIndex, bool tidyFlag) {
newEntry->channel = channelCtr; newEntry->channel = channelCtr;
newEntry->numChannels = numChannels; newEntry->numChannels = numChannels;
newEntry->flags = rec.flags; newEntry->flags = rec.flags;
if (_isRoland)
newEntry->volume = rec.volume; if (newEntry->soundNumber & 0x80)
else /* resource volumes do not seem to work well with our adlib emu */ newEntry->volume = ConfMan.getInt("music_volume");
newEntry->volume = 240; /* 255 causes clipping with adlib */ else
newEntry->volume = ConfMan.getInt("sfx_volume");
_activeSounds.push_back(SoundList::value_type(newEntry)); _activeSounds.push_back(SoundList::value_type(newEntry));
musicInterface_Play(rec.soundNumber, channelCtr, numChannels); musicInterface_Play(rec.soundNumber, channelCtr, numChannels);
@ -280,6 +282,21 @@ uint8 SoundManager::descIndexOf(uint8 soundNumber) {
return 0xff; // Couldn't find entry return 0xff; // Couldn't find entry
} }
// Used to sync the volume for all channels with the Config Manager
//
void SoundManager::syncSounds(uint8 musicVol, uint8 sfxVol) {
MusicListIterator i;
musicInterface_TidySounds();
for (i = _playingSounds.begin(); i != _playingSounds.end(); ++i) {
if ((*i)->isMusic())
(*i)->setVolume(musicVol);
else
(*i)->setVolume(sfxVol);
}
}
SoundDescResource *SoundManager::findSound(uint8 soundNumber) { SoundDescResource *SoundManager::findSound(uint8 soundNumber) {
debugC(ERROR_BASIC, kLureDebugSounds, "SoundManager::findSound soundNumber=%d", soundNumber); debugC(ERROR_BASIC, kLureDebugSounds, "SoundManager::findSound soundNumber=%d", soundNumber);
SoundListIterator i; SoundListIterator i;
@ -402,9 +419,8 @@ void SoundManager::musicInterface_Play(uint8 soundNumber, uint8 channelNumber, u
return; return;
bool isMusic = (soundNumber & 0x80) != 0; bool isMusic = (soundNumber & 0x80) != 0;
uint8 volume = isMusic ? game.musicVolume() : game.sfxVolume();
if (!game.soundFlag())
if (!game.soundFlag() || (volume == 0))
// Don't play sounds if sound is turned off // Don't play sounds if sound is turned off
return; return;
@ -576,7 +592,11 @@ MidiMusic::MidiMusic(MidiDriver *driver, ChannelEntry channels[NUM_CHANNELS],
/* 90 is power on default for midi compliant devices */ /* 90 is power on default for midi compliant devices */
_channels[_channelNumber + i].volume = 90; _channels[_channelNumber + i].volume = 90;
} }
setVolume(240); /* 255 causes clipping with mastervol 192 and adlib */
if (isMusic)
setVolume(ConfMan.getInt("music_volume"));
else
setVolume(ConfMan.getInt("sfx_volume"));
_passThrough = false; _passThrough = false;
@ -634,14 +654,9 @@ void MidiMusic::setVolume(int volume) {
_volume = volume; _volume = volume;
Game &game = Game::getReference();
volume *= _isMusic ? game.musicVolume() : game.sfxVolume();
for (int i = 0; i < _numChannels; ++i) { for (int i = 0; i < _numChannels; ++i) {
if (_channels[_channelNumber + i].midiChannel != NULL) if (_channels[_channelNumber + i].midiChannel != NULL)
_channels[_channelNumber + i].midiChannel->volume( _channels[_channelNumber + i].midiChannel->volume(volume);
_channels[_channelNumber + i].volume *
volume / 65025);
} }
} }

View file

@ -98,6 +98,7 @@ public:
uint8 channelNumber() { return _channelNumber; } uint8 channelNumber() { return _channelNumber; }
uint8 soundNumber() { return _soundNumber; } uint8 soundNumber() { return _soundNumber; }
bool isPlaying() { return _isPlaying; } bool isPlaying() { return _isPlaying; }
bool isMusic() {return _isMusic; }
}; };
class SoundManager: public Common::Singleton<SoundManager> { class SoundManager: public Common::Singleton<SoundManager> {
@ -142,6 +143,7 @@ public:
void stopSound(uint8 soundIndex); void stopSound(uint8 soundIndex);
void killSound(uint8 soundNumber); void killSound(uint8 soundNumber);
void setVolume(uint8 soundNumber, uint8 volume); void setVolume(uint8 soundNumber, uint8 volume);
void syncSounds(uint8 musicVol, uint8 sfxVol);
void tidySounds(); void tidySounds();
uint8 descIndexOf(uint8 soundNumber); uint8 descIndexOf(uint8 soundNumber);
SoundDescResource *findSound(uint8 soundNumber); SoundDescResource *findSound(uint8 soundNumber);