diff options
-rw-r--r-- | engines/made/made.cpp | 4 | ||||
-rw-r--r-- | engines/made/made.h | 4 | ||||
-rw-r--r-- | engines/made/music.cpp | 135 | ||||
-rw-r--r-- | engines/made/music.h | 58 |
4 files changed, 44 insertions, 157 deletions
diff --git a/engines/made/made.cpp b/engines/made/made.cpp index 51da50f7d3..1cbb13fc6c 100644 --- a/engines/made/made.cpp +++ b/engines/made/made.cpp @@ -97,9 +97,9 @@ MadeEngine::MadeEngine(OSystem *syst, const MadeGameDescription *gameDesc) : Eng if (native_mt32) driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE); - _music = new Music(driver, _musicVolume); + _music = new MusicPlayer(driver); _music->setNativeMT32(native_mt32); - _music->setAdlib(adlib); + //_music->setAdlib(adlib); _musicVolume = ConfMan.getInt("music_volume"); diff --git a/engines/made/made.h b/engines/made/made.h index 8cf26c0d81..ad4cd78660 100644 --- a/engines/made/made.h +++ b/engines/made/made.h @@ -61,7 +61,7 @@ class PmvPlayer; class Screen; class ScriptInterpreter; class GameDatabase; -class Music; +class MusicPlayer; class MadeEngine : public ::Engine { int _gameId; @@ -94,7 +94,7 @@ public: Screen *_screen; GameDatabase *_dat; ScriptInterpreter *_script; - Music *_music; + MusicPlayer *_music; int _eventMouseX, _eventMouseY; uint16 _eventKey; 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 diff --git a/engines/made/music.h b/engines/made/music.h index 7ca464bbc0..b9fa1004d5 100644 --- a/engines/made/music.h +++ b/engines/made/music.h @@ -28,12 +28,8 @@ #ifndef MADE_MUSIC_H #define MADE_MUSIC_H -#include "sound/audiocd.h" #include "sound/mididrv.h" #include "sound/midiparser.h" -#include "sound/mp3.h" -#include "sound/vorbis.h" -#include "sound/flac.h" #include "common/mutex.h" #include "made/resource.h" @@ -42,8 +38,7 @@ namespace Made { enum MusicFlags { MUSIC_NORMAL = 0, - MUSIC_LOOP = 0x0001, - MUSIC_DEFAULT = 0xffff + MUSIC_LOOP = 1 }; class MusicPlayer : public MidiDriver { @@ -59,8 +54,10 @@ public: void setNativeMT32(bool b) { _nativeMT32 = b; } bool hasNativeMT32() { return _nativeMT32; } - void playMusic(); - void stopMusic(); + void play(XmidiResource *midiResource, MusicFlags flags = MUSIC_NORMAL); + void stop(); + void pause(); + void resume(); void setLoop(bool loop) { _looping = loop; } void setPassThrough(bool b) { _passThrough = b; } @@ -89,6 +86,7 @@ protected: MidiChannel *_channel[16]; MidiDriver *_driver; + MidiParser *_xmidiParser; byte _channelVolume[16]; bool _nativeMT32; bool _isGM; @@ -96,51 +94,7 @@ protected: bool _isPlaying; bool _looping; - bool _randomLoop; byte _masterVolume; - - byte *_musicData; - uint16 *_buf; - size_t _musicDataSize; -}; - -class Music { -public: - - Music(MidiDriver *driver, int enabled); - ~Music(void); - void setNativeMT32(bool b) { _player->setNativeMT32(b); } - bool hasNativeMT32() { return _player->hasNativeMT32(); } - void setAdlib(bool b) { _adlib = b; } - bool hasAdlib() { return _adlib; } - void setPassThrough(bool b) { _player->setPassThrough(b); } - bool isPlaying(void); - - void play(XmidiResource *midiResource, MusicFlags flags = MUSIC_DEFAULT); - void pause(void); - void resume(void); - void stop(void); - - void setVolume(int volume); - int getVolume() { return _currentVolume; } - - int32 *_songTable; - int _songTableLen; - -private: - - MusicPlayer *_player; - uint32 _trackNumber; - - int _enabled; - bool _adlib; - - int _currentVolume; - - MidiParser *xmidiParser; - - byte *_midiMusicData; - }; } // End of namespace Made |