aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/made/music.cpp71
-rw-r--r--engines/made/music.h26
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