diff options
-rw-r--r-- | backends/midi/adlib.cpp | 9 | ||||
-rw-r--r-- | common/engine.cpp | 6 | ||||
-rw-r--r-- | common/engine.h | 1 | ||||
-rw-r--r-- | scumm/imuse.cpp | 33 | ||||
-rw-r--r-- | scumm/imuse.h | 2 | ||||
-rw-r--r-- | scumm/imuse_internal.h | 9 | ||||
-rw-r--r-- | scumm/imuse_player.cpp | 11 | ||||
-rw-r--r-- | scumm/scummvm.cpp | 12 | ||||
-rw-r--r-- | simon/simon.cpp | 2 | ||||
-rw-r--r-- | sound/mididrv.h | 3 |
10 files changed, 48 insertions, 40 deletions
diff --git a/backends/midi/adlib.cpp b/backends/midi/adlib.cpp index 5da6601149..a95fa8da38 100644 --- a/backends/midi/adlib.cpp +++ b/backends/midi/adlib.cpp @@ -554,7 +554,7 @@ class MidiDriver_ADLIB : public MidiDriver { friend class AdlibPercussionChannel; public: - MidiDriver_ADLIB(); + MidiDriver_ADLIB(SoundMixer *mixer); int open(); void close(); @@ -810,14 +810,14 @@ void AdlibPercussionChannel::noteOn(byte note, byte velocity) { // MidiDriver method implementations -MidiDriver_ADLIB::MidiDriver_ADLIB() { +MidiDriver_ADLIB::MidiDriver_ADLIB(SoundMixer *mixer) + : _mixer(mixer) { uint i; _isOpen = false; _game_SmallHeader = false; _adlib_reg_cache = 0; - _mixer = 0 _timer_proc = 0; _timer_param = 0; @@ -839,8 +839,7 @@ int MidiDriver_ADLIB::open() { if (_isOpen) return MERR_ALREADY_OPEN; _isOpen = true; - _mixer = g_mixer; - + int i; AdlibVoice *voice; diff --git a/common/engine.cpp b/common/engine.cpp index 25213b486f..90d73ed53a 100644 --- a/common/engine.cpp +++ b/common/engine.cpp @@ -73,7 +73,6 @@ const char *gScummVMFullVersion = "ScummVM 0.5.3cvs (" __DATE__ " " __TIME__ ")" /* FIXME - BIG HACK for MidiEmu */ OSystem *g_system = 0; -SoundMixer *g_mixer = 0; Engine *g_engine = 0; Engine::Engine(GameDetector *detector, OSystem *syst) @@ -83,9 +82,8 @@ Engine::Engine(GameDetector *detector, OSystem *syst) _gameDataPath = detector->_gameDataPath; - /* FIXME - BIG HACK for MidiEmu */ - g_system = _system; - g_mixer = _mixer; + g_system = _system; // FIXME - BIG HACK for MidiEmu + _timer = new Timer(this); } diff --git a/common/engine.h b/common/engine.h index 6731effd62..bed622bcf2 100644 --- a/common/engine.h +++ b/common/engine.h @@ -53,7 +53,6 @@ struct VersionSettings; /* FIXME - BIG HACK for MidiEmu */ extern OSystem *g_system; -extern SoundMixer *g_mixer; class Engine { public: diff --git a/scumm/imuse.cpp b/scumm/imuse.cpp index d61828f7a9..6827086afd 100644 --- a/scumm/imuse.cpp +++ b/scumm/imuse.cpp @@ -21,15 +21,18 @@ */ #include "stdafx.h" -#include "imuse.h" -#include "imuse_internal.h" -#include "instrument.h" -#include "saveload.h" -#include "scumm.h" + #include "common/util.h" -#include "sound/mididrv.h" #include "common/gameDetector.h" // For kDefaultMasterVolume etc. +#include "scumm/imuse.h" +#include "scumm/imuse_internal.h" +#include "scumm/instrument.h" +#include "scumm/saveload.h" +#include "scumm/scumm.h" + +#include "sound/mididrv.h" + //////////////////////////////////////// @@ -78,7 +81,7 @@ MidiDriver *IMuseInternal::getMidiDriver() { } else { // Route it through Adlib anyway. if (!_midi_adlib) { - _midi_adlib = MidiDriver_ADLIB_create(); + _midi_adlib = MidiDriver_ADLIB_create(_mixer); initMidiDriver(_midi_adlib); } driver = _midi_adlib; @@ -186,14 +189,14 @@ MidiDriver *IMuseInternal::getBestMidiDriver(int sound) { } else { // Route it through Adlib anyway. if (!_midi_adlib) { - _midi_adlib = MidiDriver_ADLIB_create(); + _midi_adlib = MidiDriver_ADLIB_create(_mixer); initMidiDriver(_midi_adlib); } driver = _midi_adlib; } } else { if (!_midi_adlib &&(_enable_multi_midi || !_midi_native)) { - _midi_adlib = MidiDriver_ADLIB_create(); + _midi_adlib = MidiDriver_ADLIB_create(_mixer); initMidiDriver(_midi_adlib); } driver = _midi_adlib; @@ -1048,6 +1051,7 @@ uint32 IMuseInternal::property(int prop, uint32 value) { _players[i].clear(); } driver->close(); + // FIXME: shouldn't we delete 'driver' here, too ? } break; @@ -1072,15 +1076,16 @@ void IMuseInternal::setBase(byte **base) { _base_sounds = base; } -IMuseInternal *IMuseInternal::create(OSystem *syst, MidiDriver *native_midi) { +IMuseInternal *IMuseInternal::create(OSystem *syst, SoundMixer *mixer, MidiDriver *native_midi) { IMuseInternal *i = new IMuseInternal; - i->initialize(syst, native_midi); + i->initialize(syst, mixer, native_midi); return i; } -int IMuseInternal::initialize(OSystem *syst, MidiDriver *native_midi) { +int IMuseInternal::initialize(OSystem *syst, SoundMixer *mixer, MidiDriver *native_midi) { int i; + _mixer = mixer; _midi_native = native_midi; _midi_adlib = NULL; if (native_midi) @@ -1736,7 +1741,7 @@ MidiDriver *IMuse::getMidiDriver() { in(); MidiDriver *ret = _target->getMidiDri // The IMuse::create method provides a front-end factory // for creating IMuseInternal without exposing that class // to the client. -IMuse *IMuse::create(OSystem *syst, MidiDriver *midi) { - IMuseInternal *engine = IMuseInternal::create(syst, midi); +IMuse *IMuse::create(OSystem *syst, SoundMixer *mixer, MidiDriver *midi) { + IMuseInternal *engine = IMuseInternal::create(syst, mixer, midi); return new IMuse(syst, engine); } diff --git a/scumm/imuse.h b/scumm/imuse.h index cf785b84d4..2b129e27f3 100644 --- a/scumm/imuse.h +++ b/scumm/imuse.h @@ -74,7 +74,7 @@ public: MidiDriver *getMidiDriver(); // Factory methods - static IMuse *create(OSystem *syst, MidiDriver *midi); + static IMuse *create(OSystem *syst, SoundMixer *mixer, MidiDriver *midi); }; #endif diff --git a/scumm/imuse_internal.h b/scumm/imuse_internal.h index bed969c034..330dd2ea6a 100644 --- a/scumm/imuse_internal.h +++ b/scumm/imuse_internal.h @@ -22,9 +22,9 @@ #ifndef DEFINED_IMUSE_INTERNAL #define DEFINED_IMUSE_INTERNAL -#include "sound/mididrv.h" #include "common/scummsys.h" #include "scumm/instrument.h" +#include "sound/mididrv.h" // Unremark this statement to activate some of // the most common iMuse diagnostic messages. @@ -45,6 +45,7 @@ class IMuseInternal; class MidiParser; class Scumm; class OSystem; +class SoundMixer; @@ -355,6 +356,8 @@ private: MidiDriver *_midi_native; byte **_base_sounds; + + SoundMixer *_mixer; private: bool _paused; @@ -439,7 +442,7 @@ public: IMuseInternal(); ~IMuseInternal(); - int initialize(OSystem *syst, MidiDriver *midi); + int initialize(OSystem *syst, SoundMixer *mixer, MidiDriver *midi); void reallocateMidiChannels(MidiDriver *midi); void setGlobalAdlibInstrument(byte slot, byte *data); void copyGlobalAdlibInstrument(byte slot, Instrument *dest); @@ -465,7 +468,7 @@ public: uint32 property(int prop, uint32 value); MidiDriver *getMidiDriver(); - static IMuseInternal *create(OSystem *syst, MidiDriver *midi); + static IMuseInternal *create(OSystem *syst, SoundMixer *mixer, MidiDriver *midi); }; #endif diff --git a/scumm/imuse_player.cpp b/scumm/imuse_player.cpp index e5806f9d94..0e4ee34fdf 100644 --- a/scumm/imuse_player.cpp +++ b/scumm/imuse_player.cpp @@ -20,12 +20,15 @@ */ #include "stdafx.h" -#include "scumm/scumm.h" -#include "sound/midiparser.h" -#include "scumm/saveload.h" + #include "common/util.h" #include "common/engine.h" -#include "imuse_internal.h" + +#include "scumm/imuse_internal.h" +#include "scumm/saveload.h" +#include "scumm/scumm.h" + +#include "sound/midiparser.h" diff --git a/scumm/scummvm.cpp b/scumm/scummvm.cpp index 6775a5f3dc..b94b7785f7 100644 --- a/scumm/scummvm.cpp +++ b/scumm/scummvm.cpp @@ -625,16 +625,16 @@ Scumm::Scumm (GameDetector *detector, OSystem *syst) else _playerV2 = new Player_V2(this); } else { - _imuse = IMuse::create (syst, detector->createMidi()); + _imuse = IMuse::create (syst, _mixer, detector->createMidi()); if (_imuse) { if (detector->_gameTempo != 0) _imuse->property(IMuse::PROP_TEMPO_BASE, detector->_gameTempo); - _imuse->property (IMuse::PROP_OLD_ADLIB_INSTRUMENTS, (_features & GF_SMALL_HEADER) ? 1 : 0); - _imuse->property (IMuse::PROP_MULTI_MIDI, detector->_multi_midi); - _imuse->property (IMuse::PROP_NATIVE_MT32, detector->_native_mt32); + _imuse->property(IMuse::PROP_OLD_ADLIB_INSTRUMENTS, (_features & GF_SMALL_HEADER) ? 1 : 0); + _imuse->property(IMuse::PROP_MULTI_MIDI, detector->_multi_midi); + _imuse->property(IMuse::PROP_NATIVE_MT32, detector->_native_mt32); if (_features & GF_HUMONGOUS) { - _imuse->property (IMuse::PROP_LIMIT_PLAYERS, 1); - _imuse->property (IMuse::PROP_RECYCLE_PLAYERS, 1); + _imuse->property(IMuse::PROP_LIMIT_PLAYERS, 1); + _imuse->property(IMuse::PROP_RECYCLE_PLAYERS, 1); } _imuse->set_music_volume(_sound->_sound_volume_music); } diff --git a/simon/simon.cpp b/simon/simon.cpp index c94f353b70..7aeebb7402 100644 --- a/simon/simon.cpp +++ b/simon/simon.cpp @@ -443,7 +443,7 @@ SimonEngine::SimonEngine(GameDetector *detector, OSystem *syst) // Setup midi driver if (!driver) - driver = MidiDriver_ADLIB_create(); + driver = MidiDriver_ADLIB_create(_mixer); midi.mapMT32toGM (!(_game & GF_SIMON2) && !detector->_native_mt32); midi.set_driver(driver); diff --git a/sound/mididrv.h b/sound/mididrv.h index b72959428f..1e9c95de03 100644 --- a/sound/mididrv.h +++ b/sound/mididrv.h @@ -26,6 +26,7 @@ #include "common/scummsys.h" class MidiChannel; +class SoundMixer; // Abstract MIDI Driver Class class MidiDriver { @@ -132,7 +133,7 @@ enum { // Factory functions, for faster compile extern MidiDriver *MidiDriver_NULL_create(); -extern MidiDriver *MidiDriver_ADLIB_create(); +extern MidiDriver *MidiDriver_ADLIB_create(SoundMixer *mixer); extern MidiDriver *MidiDriver_WIN_create(); extern MidiDriver *MidiDriver_SEQ_create(); extern MidiDriver *MidiDriver_QT_create(); |