aboutsummaryrefslogtreecommitdiff
path: root/engines/made/music.cpp
diff options
context:
space:
mode:
authorMax Horn2011-03-24 16:40:48 +0100
committerMax Horn2011-03-24 16:46:47 +0100
commit84d68f31e8734d06febfbbff1493147f0ef680c5 (patch)
tree72b4c96b956b2fa527dcb1a056d640f1b9858942 /engines/made/music.cpp
parente76a8a8eb6c68b1ffc048385c41cd1b542623449 (diff)
downloadscummvm-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.cpp71
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;