diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/made/music.cpp | 71 | ||||
-rw-r--r-- | engines/made/music.h | 26 |
2 files changed, 8 insertions, 89 deletions
diff --git a/engines/made/music.cpp b/engines/made/music.cpp index a6cc2bb38f..054f8126d6 100644 --- a/engines/made/music.cpp +++ b/engines/made/music.cpp @@ -37,7 +37,7 @@ namespace Made { -MusicPlayer::MusicPlayer() : _parser(0), _driver(0), _looping(false), _isPlaying(false), _isGM(false) { +MusicPlayer::MusicPlayer() : _isGM(false) { MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_GM); _nativeMT32 = ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32")); //bool adlib = (MidiDriver::getMusicType(dev) == MT_ADLIB); @@ -47,8 +47,6 @@ MusicPlayer::MusicPlayer() : _parser(0), _driver(0), _looping(false), _isPlaying if (_nativeMT32) _driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE); - memset(_channel, 0, sizeof(_channel)); - _masterVolume = 0; _xmidiParser = MidiParser::createParser_XMIDI(); _smfParser = MidiParser::createParser_SMF(); @@ -77,61 +75,12 @@ MusicPlayer::~MusicPlayer() { delete _smfParser; } -void MusicPlayer::setVolume(int volume) { - volume = CLIP(volume, 0, 255); - - if (_masterVolume == volume) - return; - - _masterVolume = volume; - - Common::StackLock lock(_mutex); - - for (int i = 0; i < 16; ++i) { - if (_channel[i]) { - _channel[i]->volume(_channelVolume[i] * _masterVolume / 255); - } - } -} - void MusicPlayer::send(uint32 b) { - byte channel = (byte)(b & 0x0F); - if ((b & 0xFFF0) == 0x07B0) { - // Adjust volume changes by master volume - byte volume = (byte)((b >> 16) & 0x7F); - _channelVolume[channel] = volume; - volume = volume * _masterVolume / 255; - b = (b & 0xFF00FFFF) | (volume << 16); - } else if ((b & 0xF0) == 0xC0 && !_isGM && !_nativeMT32) { + if ((b & 0xF0) == 0xC0 && !_isGM && !_nativeMT32) { b = (b & 0xFFFF00FF) | MidiDriver::_mt32ToGm[(b >> 8) & 0xFF] << 8; } - else if ((b & 0xFFF0) == 0x007BB0) { - // Only respond to All Notes Off if this channel - // has currently been allocated - if (!_channel[b & 0x0F]) - return; - } - - if (!_channel[channel]) - _channel[channel] = (channel == 9) ? _driver->getPercussionChannel() : _driver->allocateChannel(); - if (_channel[channel]) - _channel[channel]->send(b); -} - -void MusicPlayer::metaEvent(byte type, byte *data, uint16 length) { - - switch (type) { - case 0x2F: // End of Track - if (_looping) - _parser->jumpToTick(0); - else - stop(); - break; - default: - //warning("Unhandled meta event: %02x", type); - break; - } + Audio::MidiPlayer::send(b); } void MusicPlayer::onTimer(void *refCon) { @@ -164,7 +113,7 @@ void MusicPlayer::playXMIDI(GenericResource *midiResource, MusicFlags flags) { setVolume(127); - _looping = flags & MUSIC_LOOP; + _isLooping = flags & MUSIC_LOOP; _isPlaying = true; } } @@ -190,21 +139,11 @@ void MusicPlayer::playSMF(GenericResource *midiResource, MusicFlags flags) { setVolume(127); - _looping = flags & MUSIC_LOOP; + _isLooping = flags & MUSIC_LOOP; _isPlaying = true; } } -void MusicPlayer::stop() { - Common::StackLock lock(_mutex); - - _isPlaying = false; - if (_parser) { - _parser->unloadMusic(); - _parser = NULL; - } -} - void MusicPlayer::pause() { setVolume(-1); _isPlaying = false; diff --git a/engines/made/music.h b/engines/made/music.h index 43869cae12..8925440b75 100644 --- a/engines/made/music.h +++ b/engines/made/music.h @@ -28,7 +28,7 @@ #ifndef MADE_MUSIC_H #define MADE_MUSIC_H -#include "audio/mididrv.h" +#include "audio/midiplayer.h" #include "audio/midiparser.h" #include "common/mutex.h" @@ -41,48 +41,28 @@ enum MusicFlags { MUSIC_LOOP = 1 }; -class MusicPlayer : public MidiDriver_BASE { +class MusicPlayer : public Audio::MidiPlayer { public: MusicPlayer(); ~MusicPlayer(); - bool isPlaying() const { return _isPlaying; } - void setPlaying(bool playing) { _isPlaying = playing; } - - void setVolume(int volume); - int getVolume() const { return _masterVolume; } - - bool hasNativeMT32() const { return _nativeMT32; } void playXMIDI(GenericResource *midiResource, MusicFlags flags = MUSIC_NORMAL); void playSMF(GenericResource *midiResource, MusicFlags flags = MUSIC_NORMAL); - void stop(); +// void stop(); void pause(); void resume(); - void setLoop(bool loop) { _looping = loop; } void setGM(bool isGM) { _isGM = isGM; } // MidiDriver_BASE interface implementation virtual void send(uint32 b); - virtual void metaEvent(byte type, byte *data, uint16 length); protected: static void onTimer(void *data); - MidiParser *_parser; - Common::Mutex _mutex; - - MidiChannel *_channel[16]; - MidiDriver *_driver; MidiParser *_xmidiParser, *_smfParser; - byte _channelVolume[16]; - bool _nativeMT32; bool _isGM; - - bool _isPlaying; - bool _looping; - byte _masterVolume; }; } // End of namespace Made |