diff options
author | Max Horn | 2011-03-23 15:23:26 +0100 |
---|---|---|
committer | Max Horn | 2011-03-23 15:25:47 +0100 |
commit | 29847ea42da3e597d3496972c80ce49bea76da20 (patch) | |
tree | 654596bc11032f28d9b2a776571fdb7623ceb5c6 /engines/agi | |
parent | c70c8864f131bfe42437b05d03f77ab198f59247 (diff) | |
download | scummvm-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.cpp | 8 | ||||
-rw-r--r-- | engines/agi/sound_midi.h | 16 |
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; |