diff options
author | Max Horn | 2011-03-24 16:40:48 +0100 |
---|---|---|
committer | Max Horn | 2011-03-24 16:46:47 +0100 |
commit | 84d68f31e8734d06febfbbff1493147f0ef680c5 (patch) | |
tree | 72b4c96b956b2fa527dcb1a056d640f1b9858942 /engines/made/music.cpp | |
parent | e76a8a8eb6c68b1ffc048385c41cd1b542623449 (diff) | |
download | scummvm-rg350-84d68f31e8734d06febfbbff1493147f0ef680c5.tar.gz scummvm-rg350-84d68f31e8734d06febfbbff1493147f0ef680c5.tar.bz2 scummvm-rg350-84d68f31e8734d06febfbbff1493147f0ef680c5.zip |
MADE: Change MusicPlayer to derive from Audio::MidiPlayer
Diffstat (limited to 'engines/made/music.cpp')
-rw-r--r-- | engines/made/music.cpp | 71 |
1 files changed, 5 insertions, 66 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; |