diff options
Diffstat (limited to 'engines')
29 files changed, 88 insertions, 6 deletions
diff --git a/engines/agi/sound_midi.cpp b/engines/agi/sound_midi.cpp index 47cab0019f..050c0d6e2c 100644 --- a/engines/agi/sound_midi.cpp +++ b/engines/agi/sound_midi.cpp @@ -138,6 +138,10 @@ int SoundGenMIDI::open() { return 0; } +bool SoundGenMIDI::isOpen() const { + return _driver && _driver->isOpen(); +} + void SoundGenMIDI::close() { stop(); if (_driver) diff --git a/engines/agi/sound_midi.h b/engines/agi/sound_midi.h index 059d41208c..b7355a0d5d 100644 --- a/engines/agi/sound_midi.h +++ b/engines/agi/sound_midi.h @@ -72,6 +72,7 @@ public: // MidiDriver interface implementation int open(); + bool isOpen() const; void close(); void send(uint32 b); diff --git a/engines/agos/midi.cpp b/engines/agos/midi.cpp index fe2d1cd25b..e80b89d43c 100644 --- a/engines/agos/midi.cpp +++ b/engines/agos/midi.cpp @@ -85,11 +85,17 @@ int MidiPlayer::open() { return 0; } +bool MidiPlayer::isOpen() const { + return _driver && _driver->isOpen(); +} + void MidiPlayer::close() { stop(); // _system->lockMutex(_mutex); - if (_driver) + if (_driver) { + delete _driver; _driver->close(); + } _driver = NULL; clearConstructs(); // _system->unlockMutex(_mutex); diff --git a/engines/agos/midi.h b/engines/agos/midi.h index 9c8303ba3c..c27c5a7973 100644 --- a/engines/agos/midi.h +++ b/engines/agos/midi.h @@ -115,6 +115,7 @@ public: public: // MidiDriver interface implementation int open(); + bool isOpen() const; void close(); void send(uint32 b); diff --git a/engines/draci/music.cpp b/engines/draci/music.cpp index caa82c2cc0..cc1cd6d3fb 100644 --- a/engines/draci/music.cpp +++ b/engines/draci/music.cpp @@ -97,10 +97,16 @@ int MusicPlayer::open() { return 0; } +bool MusicPlayer::isOpen() const { + return _driver && _driver->isOpen(); +} + void MusicPlayer::close() { stop(); - if (_driver) + if (_driver) { _driver->close(); + delete _driver; + } _driver = 0; } diff --git a/engines/draci/music.h b/engines/draci/music.h index f6f3a5ae50..0d15fdaf1b 100644 --- a/engines/draci/music.h +++ b/engines/draci/music.h @@ -61,6 +61,7 @@ public: // MidiDriver interface implementation int open(); + bool isOpen() const; void close(); void send(uint32 b); diff --git a/engines/groovie/music.cpp b/engines/groovie/music.cpp index 011409155c..7651576828 100644 --- a/engines/groovie/music.cpp +++ b/engines/groovie/music.cpp @@ -264,6 +264,10 @@ int MusicPlayerMidi::open() { return 0; } +bool MusicPlayerMidi::isOpen() const { + return _driver && _driver->isOpen(); +} + void MusicPlayerMidi::close() {} void MusicPlayerMidi::send(uint32 b) { diff --git a/engines/groovie/music.h b/engines/groovie/music.h index 5974559c53..e45e130a70 100644 --- a/engines/groovie/music.h +++ b/engines/groovie/music.h @@ -95,6 +95,7 @@ public: // MidiDriver interface virtual int open(); + virtual bool isOpen() const; virtual void close(); virtual void send(uint32 b); virtual void metaEvent(byte type, byte *data, uint16 length); diff --git a/engines/hugo/sound.cpp b/engines/hugo/sound.cpp index 5ef843977f..c4feb5fb1c 100644 --- a/engines/hugo/sound.cpp +++ b/engines/hugo/sound.cpp @@ -192,6 +192,10 @@ int MidiPlayer::open() { return 0; } +bool MidiPlayer::isOpen() const { + return _driver && _driver->isOpen(); +} + void MidiPlayer::close() { stop(); _mutex.lock(); diff --git a/engines/hugo/sound.h b/engines/hugo/sound.h index 49e78a4aeb..e5e9d94ebb 100644 --- a/engines/hugo/sound.h +++ b/engines/hugo/sound.h @@ -60,6 +60,7 @@ public: // MidiDriver interface int open(); + bool isOpen() const; MidiChannel *allocateChannel(); MidiChannel *getPercussionChannel(); diff --git a/engines/kyra/sound_midi.cpp b/engines/kyra/sound_midi.cpp index cd5af12106..903375c362 100644 --- a/engines/kyra/sound_midi.cpp +++ b/engines/kyra/sound_midi.cpp @@ -55,6 +55,7 @@ public: // DUMMY int open() { return 0; } + bool isOpen() const { return true; } void close() {} MidiChannel *allocateChannel() { return 0; } diff --git a/engines/lure/sound.cpp b/engines/lure/sound.cpp index 5f954eb337..482527da13 100644 --- a/engines/lure/sound.cpp +++ b/engines/lure/sound.cpp @@ -694,6 +694,10 @@ int MidiMusic::open() { return 0; } +bool MidiMusic::isOpen() const { + return _driver != 0; +} + void MidiMusic::close() { } diff --git a/engines/lure/sound.h b/engines/lure/sound.h index f50748ab0a..454bff26f4 100644 --- a/engines/lure/sound.h +++ b/engines/lure/sound.h @@ -86,6 +86,7 @@ public: //MidiDriver interface implementation int open(); + bool isOpen() const; void close(); void send(uint32 b); void onTimer(); diff --git a/engines/m4/midi.cpp b/engines/m4/midi.cpp index f130ddc3b5..3a6475da89 100644 --- a/engines/m4/midi.cpp +++ b/engines/m4/midi.cpp @@ -83,10 +83,16 @@ int MidiPlayer::open() { return 0; } +bool MidiPlayer::isOpen() const { + return _driver && _driver->isOpen(); +} + void MidiPlayer::close() { stopMusic(); - if (_driver) + if (_driver) { _driver->close(); + delete _driver; + } _driver = 0; } diff --git a/engines/m4/midi.h b/engines/m4/midi.h index 8344f8d485..a631cec2cb 100644 --- a/engines/m4/midi.h +++ b/engines/m4/midi.h @@ -54,6 +54,7 @@ public: //MidiDriver interface implementation int open(); + bool isOpen() const; void close(); void send(uint32 b); diff --git a/engines/made/music.cpp b/engines/made/music.cpp index 8c9248a262..5ace99788b 100644 --- a/engines/made/music.cpp +++ b/engines/made/music.cpp @@ -89,10 +89,16 @@ int MusicPlayer::open() { return 0; } +bool MusicPlayer::isOpen() const { + return _driver && _driver->isOpen(); +} + void MusicPlayer::close() { stop(); - if (_driver) + if (_driver) { _driver->close(); + delete _driver; + } _driver = 0; } diff --git a/engines/made/music.h b/engines/made/music.h index 9840c50cfa..024588ea4d 100644 --- a/engines/made/music.h +++ b/engines/made/music.h @@ -66,6 +66,7 @@ public: //MidiDriver interface implementation int open(); + bool isOpen() const; void close(); void send(uint32 b); diff --git a/engines/parallaction/sound_br.cpp b/engines/parallaction/sound_br.cpp index e127cf2838..5be953936d 100644 --- a/engines/parallaction/sound_br.cpp +++ b/engines/parallaction/sound_br.cpp @@ -222,6 +222,7 @@ public: // MidiDriver interface int open(); + bool isOpen() const; void close(); void send(uint32 b); void metaEvent(byte type, byte *data, uint16 length); @@ -342,6 +343,10 @@ int MidiPlayer_MSC::open() { return ret; } +bool MidiPlayer_MSC::isOpen() const { + return _driver && _driver->isOpen(); +} + void MidiPlayer_MSC::close() { stop(); _mutex.lock(); diff --git a/engines/parallaction/sound_ns.cpp b/engines/parallaction/sound_ns.cpp index 15fdede571..de8a861d4b 100644 --- a/engines/parallaction/sound_ns.cpp +++ b/engines/parallaction/sound_ns.cpp @@ -59,6 +59,7 @@ public: // MidiDriver interface int open(); + bool isOpen() const; void close(); void send(uint32 b); void metaEvent(byte type, byte *data, uint16 length); @@ -178,6 +179,10 @@ int MidiPlayer::open() { return ret; } +bool MidiPlayer::isOpen() const { + return _driver && _driver->isOpen(); +} + void MidiPlayer::close() { stop(); _mutex.lock(); diff --git a/engines/queen/music.cpp b/engines/queen/music.cpp index 4dc698dac9..044717878b 100644 --- a/engines/queen/music.cpp +++ b/engines/queen/music.cpp @@ -78,8 +78,10 @@ MidiMusic::MidiMusic(QueenEngine *vm) _driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE); } } + assert(_driver); - _driver->open(); + int ret = _driver->open(); + assert(ret == 0); _driver->setTimerCallback(this, &timerCallback); if (_nativeMT32) diff --git a/engines/queen/music.h b/engines/queen/music.h index fe45d56fde..50f7b3d255 100644 --- a/engines/queen/music.h +++ b/engines/queen/music.h @@ -58,6 +58,7 @@ public: //MidiDriver interface implementation int open() { return 0; } + bool isOpen() const { return true; } void close() {} void send(uint32 b); diff --git a/engines/saga/music.cpp b/engines/saga/music.cpp index f801001d88..3e1f3e3f3d 100644 --- a/engines/saga/music.cpp +++ b/engines/saga/music.cpp @@ -50,6 +50,7 @@ MusicDriver::MusicDriver() : _isGM(false) { MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_GM); _driver = MidiDriver::createMidi(dev); + assert(_driver); _driverType = MidiDriver::getMusicType(dev); if (isMT32()) _driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE); @@ -75,6 +76,10 @@ int MusicDriver::open() { return 0; } +bool MusicDriver::isOpen() const { + return _driver->isOpen(); +} + void MusicDriver::setVolume(int volume) { volume = CLIP(volume, 0, 255); diff --git a/engines/saga/music.h b/engines/saga/music.h index 7d599d91c2..22d957eb06 100644 --- a/engines/saga/music.h +++ b/engines/saga/music.h @@ -58,6 +58,7 @@ public: //MidiDriver interface implementation int open(); + bool isOpen() const; void close() { _driver->close(); } void send(uint32 b); diff --git a/engines/sci/sound/drivers/mididriver.h b/engines/sci/sound/drivers/mididriver.h index f745d62716..5cecebd325 100644 --- a/engines/sci/sound/drivers/mididriver.h +++ b/engines/sci/sound/drivers/mididriver.h @@ -89,6 +89,7 @@ public: return open(resMan); } virtual int open(ResourceManager *resMan) { return _driver->open(); } + bool isOpen() const { return _driver->isOpen(); } virtual void close() { _driver->close(); } virtual void send(uint32 b) { _driver->send(b); } uint32 getBaseTempo() { return _driver->getBaseTempo(); } diff --git a/engines/scumm/imuse/imuse_internal.h b/engines/scumm/imuse/imuse_internal.h index 0014480894..3a6470f832 100644 --- a/engines/scumm/imuse/imuse_internal.h +++ b/engines/scumm/imuse/imuse_internal.h @@ -284,6 +284,7 @@ public: public: // MidiDriver interface int open() { return 0; } + bool isOpen() const { return true; } void close() { } void send(uint32 b); const char *getErrorName(int error_code) { return "Unknown"; } diff --git a/engines/tinsel/music.cpp b/engines/tinsel/music.cpp index 7461cfca72..fb0f6b94fb 100644 --- a/engines/tinsel/music.cpp +++ b/engines/tinsel/music.cpp @@ -432,10 +432,16 @@ int MidiMusicPlayer::open() { return 0; } +bool MidiMusicPlayer::isOpen() const { + return _driver && _driver->isOpen(); +} + void MidiMusicPlayer::close() { stop(); - if (_driver) + if (_driver) { _driver->close(); + delete _driver; + } _driver = 0; } diff --git a/engines/tinsel/music.h b/engines/tinsel/music.h index e2a3b4c2c1..5545200c59 100644 --- a/engines/tinsel/music.h +++ b/engines/tinsel/music.h @@ -80,6 +80,7 @@ public: //MidiDriver interface implementation int open(); + bool isOpen() const; void close(); void send(uint32 b); diff --git a/engines/touche/midi.cpp b/engines/touche/midi.cpp index 0b15643767..c420fb34ff 100644 --- a/engines/touche/midi.cpp +++ b/engines/touche/midi.cpp @@ -110,6 +110,10 @@ int MidiPlayer::open() { return ret; } +bool MidiPlayer::isOpen() const { + return _driver && _driver->isOpen(); +} + void MidiPlayer::close() { stop(); _mutex.lock(); diff --git a/engines/touche/midi.h b/engines/touche/midi.h index 8e43c12037..75f33269a7 100644 --- a/engines/touche/midi.h +++ b/engines/touche/midi.h @@ -59,6 +59,7 @@ public: // MidiDriver interface int open(); + bool isOpen() const; void close(); void send(uint32 b); void metaEvent(byte type, byte *data, uint16 length); |