aboutsummaryrefslogtreecommitdiff
path: root/engines/agi
diff options
context:
space:
mode:
authorMax Horn2011-03-23 15:23:26 +0100
committerMax Horn2011-03-23 15:25:47 +0100
commit29847ea42da3e597d3496972c80ce49bea76da20 (patch)
tree654596bc11032f28d9b2a776571fdb7623ceb5c6 /engines/agi
parentc70c8864f131bfe42437b05d03f77ab198f59247 (diff)
downloadscummvm-rg350-29847ea42da3e597d3496972c80ce49bea76da20.tar.gz
scummvm-rg350-29847ea42da3e597d3496972c80ce49bea76da20.tar.bz2
scummvm-rg350-29847ea42da3e597d3496972c80ce49bea76da20.zip
AUDIO: Change several fake MidiDrivers to MidiDriver_BASE subclasses
Many engines follow the advice in audio/midiparser.h and create a "pseudo-MidiDriver" subclass. But MidiParser really only needs a tiny subset of the MidiDriver capabilities, namely those found in MidiDriver_BASE. So we try to subclass from that whenever possible; this allows us to remove many stub methods, and enables further future simplifications.
Diffstat (limited to 'engines/agi')
-rw-r--r--engines/agi/sound_midi.cpp8
-rw-r--r--engines/agi/sound_midi.h16
2 files changed, 6 insertions, 18 deletions
diff --git a/engines/agi/sound_midi.cpp b/engines/agi/sound_midi.cpp
index 050c0d6e2c..877f6326fa 100644
--- a/engines/agi/sound_midi.cpp
+++ b/engines/agi/sound_midi.cpp
@@ -72,7 +72,7 @@ MIDISound::MIDISound(uint8 *data, uint32 len, int resnum, SoundMgr &manager) : A
}
SoundGenMIDI::SoundGenMIDI(AgiEngine *vm, Audio::Mixer *pMixer) : SoundGen(vm, pMixer), _parser(0), _isPlaying(false), _passThrough(false), _isGM(false) {
- DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB);
+ MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB);
_driver = MidiDriver::createMidi(dev);
if (ConfMan.getBool("native_mt32") || MidiDriver::getMusicType(dev) == MT_MT32) {
@@ -138,10 +138,6 @@ int SoundGenMIDI::open() {
return 0;
}
-bool SoundGenMIDI::isOpen() const {
- return _driver && _driver->isOpen();
-}
-
void SoundGenMIDI::close() {
stop();
if (_driver)
@@ -221,7 +217,7 @@ void SoundGenMIDI::play(int resnum) {
MidiParser *parser = _smfParser;
parser->setTrack(0);
parser->setMidiDriver(this);
- parser->setTimerRate(getBaseTempo());
+ parser->setTimerRate(_driver->getBaseTempo());
parser->property(MidiParser::mpCenterPitchWheelOnUnload, 1);
_parser = parser;
diff --git a/engines/agi/sound_midi.h b/engines/agi/sound_midi.h
index b7355a0d5d..2e1bfe2c8a 100644
--- a/engines/agi/sound_midi.h
+++ b/engines/agi/sound_midi.h
@@ -46,7 +46,7 @@ protected:
uint16 _type; ///< Sound resource type
};
-class SoundGenMIDI : public SoundGen, public MidiDriver {
+class SoundGenMIDI : public SoundGen, public MidiDriver_BASE {
public:
SoundGenMIDI(AgiEngine *vm, Audio::Mixer *pMixer);
~SoundGenMIDI();
@@ -72,27 +72,19 @@ public:
// MidiDriver interface implementation
int open();
- bool isOpen() const;
void close();
void send(uint32 b);
void metaEvent(byte type, byte *data, uint16 length);
- void setTimerCallback(void *timerParam, void (*timerProc)(void *)) { }
- uint32 getBaseTempo() { return _driver ? _driver->getBaseTempo() : 0; }
-
- // Channel allocation functions
- MidiChannel *allocateChannel() { return 0; }
- MidiChannel *getPercussionChannel() { return 0; }
-
- MidiParser *_parser;
- Common::Mutex _mutex;
-
private:
static void onTimer(void *data);
void setChannelVolume(int channel);
+ MidiParser *_parser;
+ Common::Mutex _mutex;
+
MidiChannel *_channel[16];
MidiDriver *_driver;
MidiParser *_smfParser;