TOUCHE: Add generic music functions to wrap MidiPlayer usages.

This is a precursor to adding code within these functions to select
between MIDI and external digital music files.
This commit is contained in:
D G Turner 2012-12-12 17:02:59 +00:00
parent 344d6bc2da
commit 8b379a5718
4 changed files with 42 additions and 11 deletions

View File

@ -260,7 +260,7 @@ void ToucheEngine::redrawMenu(void *menu) {
Graphics::drawRect(_offscreenBuffer, kScreenWidth, 106, 118, 340, 164, 0xF9, 0xF7);
switch (menuData->mode) {
case kMenuSettingsMode:
drawVolumeSlideBar(_offscreenBuffer, kScreenWidth, _midiPlayer->getVolume());
drawVolumeSlideBar(_offscreenBuffer, kScreenWidth, getMusicVolume());
menuData->buttonsTable[5].data = 0;
menuData->buttonsTable[6].data = 0;
menuData->buttonsTable[7].data = 0;
@ -307,10 +307,10 @@ void ToucheEngine::handleMenuAction(void *menu, int actionId) {
_talkTextMode = kTalkModeVoiceAndText;
break;
case kActionLowerVolume:
_midiPlayer->adjustVolume(-16);
adjustMusicVolume(-16);
break;
case kActionUpperVolume:
_midiPlayer->adjustVolume(+16);
adjustMusicVolume(+16);
break;
case kActionScrollUpSaves:
--_saveLoadCurrentPage;

View File

@ -610,10 +610,7 @@ void ToucheEngine::res_stopSound() {
void ToucheEngine::res_loadMusic(int num) {
debugC(9, kDebugResource, "ToucheEngine::res_loadMusic() num=%d", num);
uint32 size;
const uint32 offs = res_getDataOffset(kResourceTypeMusic, num, &size);
_fData.seek(offs);
_midiPlayer->play(_fData, size, true);
startMusic(num);
}
void ToucheEngine::res_loadSpeech(int num) {

View File

@ -100,7 +100,7 @@ Common::Error ToucheEngine::run() {
setupOpcodes();
_midiPlayer = new MidiPlayer;
initMusic();
// Setup mixer
syncSoundSettings();
@ -120,7 +120,7 @@ Common::Error ToucheEngine::run() {
}
void ToucheEngine::restart() {
_midiPlayer->stop();
stopMusic();
_gameState = kGameStateGameLoop;
_displayQuitDialog = false;
@ -216,7 +216,7 @@ void ToucheEngine::readConfigurationSettings() {
_talkTextMode = kTalkModeVoiceOnly;
}
}
_midiPlayer->setVolume(ConfMan.getInt("music_volume"));
setMusicVolume(ConfMan.getInt("music_volume"));
}
void ToucheEngine::writeConfigurationSettings() {
@ -234,7 +234,7 @@ void ToucheEngine::writeConfigurationSettings() {
ConfMan.setBool("subtitles", true);
break;
}
ConfMan.setInt("music_volume", _midiPlayer->getVolume());
ConfMan.setInt("music_volume", getMusicVolume());
ConfMan.flushToDisk();
}
@ -3307,4 +3307,31 @@ bool ToucheEngine::canSaveGameStateCurrently() {
return _gameState == kGameStateGameLoop && _flagsTable[618] == 0 && !_hideInventoryTexts;
}
void ToucheEngine::initMusic() {
_midiPlayer = new MidiPlayer;
}
void ToucheEngine::startMusic(int num) {
uint32 size;
const uint32 offs = res_getDataOffset(kResourceTypeMusic, num, &size);
_fData.seek(offs);
_midiPlayer->play(_fData, size, true);
}
void ToucheEngine::stopMusic() {
_midiPlayer->stop();
}
int ToucheEngine::getMusicVolume() {
return _midiPlayer->getVolume();
}
void ToucheEngine::setMusicVolume(int volume) {
_midiPlayer->setVolume(volume);
}
void ToucheEngine::adjustMusicVolume(int diff) {
_midiPlayer->adjustVolume(diff);
}
} // namespace Touche

View File

@ -646,6 +646,13 @@ protected:
MidiPlayer *_midiPlayer;
void initMusic();
void startMusic(int num);
void stopMusic();
int getMusicVolume();
void setMusicVolume(int volume);
void adjustMusicVolume(int diff);
Common::Language _language;
Common::RandomSource _rnd;