aboutsummaryrefslogtreecommitdiff
path: root/engines/made/music.cpp
diff options
context:
space:
mode:
authorFilippos Karapetis2008-04-24 14:12:08 +0000
committerFilippos Karapetis2008-04-24 14:12:08 +0000
commit068372ac94ee9cde99df7a8fee64d2c8424bb119 (patch)
treec68bc762798171219381eb29077dc13beb155aef /engines/made/music.cpp
parent551bd59fa89fbcb1f460072aaabb20a890266289 (diff)
downloadscummvm-rg350-068372ac94ee9cde99df7a8fee64d2c8424bb119.tar.gz
scummvm-rg350-068372ac94ee9cde99df7a8fee64d2c8424bb119.tar.bz2
scummvm-rg350-068372ac94ee9cde99df7a8fee64d2c8424bb119.zip
Cleanup and simplification of the music playing code
svn-id: r31691
Diffstat (limited to 'engines/made/music.cpp')
-rw-r--r--engines/made/music.cpp135
1 files changed, 34 insertions, 101 deletions
diff --git a/engines/made/music.cpp b/engines/made/music.cpp
index ec9b59c12e..b9a0154093 100644
--- a/engines/made/music.cpp
+++ b/engines/made/music.cpp
@@ -41,12 +41,15 @@ MusicPlayer::MusicPlayer(MidiDriver *driver) : _parser(0), _driver(driver), _loo
memset(_channel, 0, sizeof(_channel));
_masterVolume = 0;
this->open();
+ _xmidiParser = MidiParser::createParser_XMIDI();
}
MusicPlayer::~MusicPlayer() {
_driver->setTimerCallback(NULL, NULL);
- stopMusic();
+ stop();
this->close();
+ _xmidiParser->setMidiDriver(NULL);
+ delete _xmidiParser;
}
void MusicPlayer::setVolume(int volume) {
@@ -78,7 +81,7 @@ int MusicPlayer::open() {
}
void MusicPlayer::close() {
- stopMusic();
+ stop();
if (_driver)
_driver->close();
_driver = 0;
@@ -121,7 +124,7 @@ void MusicPlayer::metaEvent(byte type, byte *data, uint16 length) {
if (_looping)
_parser->jumpToTick(0);
else
- stopMusic();
+ stop();
break;
default:
//warning("Unhandled meta event: %02x", type);
@@ -137,127 +140,57 @@ void MusicPlayer::onTimer(void *refCon) {
music->_parser->onTimer();
}
-void MusicPlayer::playMusic() {
- _isPlaying = true;
-}
-
-void MusicPlayer::stopMusic() {
- Common::StackLock lock(_mutex);
-
- _isPlaying = false;
- if (_parser) {
- _parser->unloadMusic();
- _parser = NULL;
- }
-}
-
-Music::Music(MidiDriver *driver, int enabled) : _enabled(enabled), _adlib(false) {
- _player = new MusicPlayer(driver);
- _currentVolume = 0;
-
- xmidiParser = MidiParser::createParser_XMIDI();
-
- _songTableLen = 0;
- _songTable = 0;
-
- _midiMusicData = NULL;
-}
-
-Music::~Music() {
- delete _player;
- xmidiParser->setMidiDriver(NULL);
- delete xmidiParser;
-
- free(_songTable);
- if (_midiMusicData)
- delete[] _midiMusicData;
-}
-
-void Music::setVolume(int volume) {
- if (volume == -1) // Set Full volume
- volume = 255;
-
- _player->setVolume(volume);
- _currentVolume = volume;
-}
-
-bool Music::isPlaying() {
- return _player->isPlaying();
-}
-
-void Music::play(XmidiResource *midiResource, MusicFlags flags) {
- MidiParser *parser = 0;
+void MusicPlayer::play(XmidiResource *midiResource, MusicFlags flags) {
byte *resourceData;
size_t resourceSize;
- debug(2, "Music::play %d", flags);
-
- if (!_enabled || isPlaying()) {
- return;
- }
-
- _player->stopMusic();
-
- /*
- if (!_vm->_musicVolume) {
+ if (_isPlaying)
return;
- }
- */
- if (flags == MUSIC_DEFAULT) {
- flags = MUSIC_NORMAL;
- }
+ stop();
// Load MIDI/XMI resource data
- _player->setGM(true);
+ _isGM = true;
resourceSize = midiResource->getSize();
resourceData = new byte[resourceSize];
memcpy(resourceData, midiResource->getData(), resourceSize);
- if (resourceSize < 4) {
- error("Music::play() wrong music resource size");
- }
+ if (_xmidiParser->loadMusic(resourceData, resourceSize)) {
+ MidiParser *parser = _xmidiParser;
+ parser->setTrack(0);
+ parser->setMidiDriver(this);
+ parser->setTimerRate(getBaseTempo());
+ parser->property(MidiParser::mpCenterPitchWheelOnUnload, 1);
- if (xmidiParser->loadMusic(resourceData, resourceSize)) {
- //_player->setGM(false);
- parser = xmidiParser;
- }
+ _parser = parser;
- parser->setTrack(0);
- parser->setMidiDriver(_player);
- parser->setTimerRate(_player->getBaseTempo());
- parser->property(MidiParser::mpCenterPitchWheelOnUnload, 1);
+ setVolume(255);
- _player->_parser = parser;
- //setVolume(_vm->_musicVolume == 10 ? 255 : _vm->_musicVolume * 25);
- setVolume(255);
+ _looping = flags & MUSIC_LOOP;
+ _isPlaying = true;
+ }
+}
- if (flags & MUSIC_LOOP)
- _player->setLoop(true);
- else
- _player->setLoop(false);
+void MusicPlayer::stop() {
+ Common::StackLock lock(_mutex);
- _player->playMusic();
- if (_midiMusicData)
- delete[] _midiMusicData;
- _midiMusicData = resourceData;
+ _isPlaying = false;
+ if (_parser) {
+ _parser->unloadMusic();
+ _parser = NULL;
+ }
}
-void Music::pause(void) {
- _player->setVolume(-1);
- _player->setPlaying(false);
+void MusicPlayer::pause() {
+ setVolume(-1);
+ _isPlaying = false;
}
-void Music::resume(void) {
- //_player->setVolume(_vm->_musicVolume == 10 ? 255 : _vm->_musicVolume * 25);
+void MusicPlayer::resume() {
setVolume(255);
- _player->setPlaying(true);
-}
-
-void Music::stop(void) {
- _player->stopMusic();
+ _isPlaying = true;
}
} // End of namespace Made