diff options
author | athrxx | 2011-04-29 22:16:02 +0200 |
---|---|---|
committer | Willem Jan Palenstijn | 2011-05-17 20:24:24 +0200 |
commit | 5c34e33c2c27b2b5083199b40306370d732f4e53 (patch) | |
tree | daa2f5103ef488ee02edc655e956cce46c30b52d /engines | |
parent | 52d81727a3c4ee5a5737b10366951021066eda13 (diff) | |
download | scummvm-rg350-5c34e33c2c27b2b5083199b40306370d732f4e53.tar.gz scummvm-rg350-5c34e33c2c27b2b5083199b40306370d732f4e53.tar.bz2 scummvm-rg350-5c34e33c2c27b2b5083199b40306370d732f4e53.zip |
FM-TOWNS AUDIO: Some more midi driver code for FM-TOWNS monkey2 and indy4
Diffstat (limited to 'engines')
-rw-r--r-- | engines/scumm/player_towns.cpp | 13 | ||||
-rw-r--r-- | engines/scumm/player_towns.h | 6 | ||||
-rw-r--r-- | engines/scumm/scumm.cpp | 6 |
3 files changed, 15 insertions, 10 deletions
diff --git a/engines/scumm/player_towns.cpp b/engines/scumm/player_towns.cpp index 8927e8dcf8..2301b2a9b0 100644 --- a/engines/scumm/player_towns.cpp +++ b/engines/scumm/player_towns.cpp @@ -26,10 +26,8 @@ namespace Scumm { -Player_Towns::Player_Towns(ScummEngine *vm, bool isVersion2) : _vm(vm), _v2(isVersion2), _numSoundMax(isVersion2 ? 256 : 200) { +Player_Towns::Player_Towns(ScummEngine *vm, bool isVersion2) : _vm(vm), _v2(isVersion2), _intf(0), _numSoundMax(isVersion2 ? 256 : 200), _unkFlags(0x33) { memset(_pcmCurrentSound, 0, sizeof(_pcmCurrentSound)); - _unkFlags = 0x33; - _intf = 0; } void Player_Towns::setSfxVolume(int vol) { @@ -576,15 +574,16 @@ void Player_Towns_v1::playCdaTrack(int sound, const uint8 *data, bool skipTrackV _cdaCurrentSound = sound; } -Player_Towns_v2::Player_Towns_v2(ScummEngine *vm, IMuse *imuse, Audio::Mixer *mixer, bool disposeIMuse) : Player_Towns(vm, true), _imuse(imuse), _imuseDispose(disposeIMuse) { +Player_Towns_v2::Player_Towns_v2(ScummEngine *vm, IMuse *imuse, Audio::Mixer *mixer, MidiDriver_TOWNS *driver, bool disposeIMuse, bool disposeDriver) : Player_Towns(vm, true), _imuse(imuse), _driver(driver), _imuseDispose(disposeIMuse), _driverDispose(disposeDriver), _sblData(0) { _soundOverride = new SoundOvrParameters[_numSoundMax]; memset(_soundOverride, 0, _numSoundMax * sizeof(SoundOvrParameters)); - _sblData = 0; - _intf = new TownsAudioInterface(mixer, 0); + if (_driver) + _intf = _driver->intf(); } Player_Towns_v2::~Player_Towns_v2() { - delete _intf; + if (_driverDispose) + delete _driver; if (_imuseDispose) delete _imuse; diff --git a/engines/scumm/player_towns.h b/engines/scumm/player_towns.h index aa4a1bb87d..900ea593bb 100644 --- a/engines/scumm/player_towns.h +++ b/engines/scumm/player_towns.h @@ -26,6 +26,7 @@ #include "scumm/scumm.h" #include "scumm/imuse/imuse.h" #include "audio/softsynth/fmtowns_pc98/towns_euphony.h" +#include "audio/softsynth/fmtowns_pc98/towns_midi.h" namespace Scumm { @@ -141,7 +142,7 @@ private: class Player_Towns_v2 : public Player_Towns { public: - Player_Towns_v2(ScummEngine *vm, IMuse *imuse, Audio::Mixer *mixer, bool disposeIMuse); + Player_Towns_v2(ScummEngine *vm, IMuse *imuse, Audio::Mixer *mixer, MidiDriver_TOWNS *driver, bool disposeIMuse, bool disposeDriver); ~Player_Towns_v2(); bool init(); @@ -170,7 +171,10 @@ private: uint8 *_sblData; IMuse *_imuse; + MidiDriver_TOWNS *_driver; + const bool _imuseDispose; + const bool _driverDispose; }; } // End of namespace Scumm diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp index 1b7f16bdca..ff51158a4c 100644 --- a/engines/scumm/scumm.cpp +++ b/engines/scumm/scumm.cpp @@ -1833,7 +1833,7 @@ void ScummEngine::setupMusic(int midi) { if (nativeMidiDriver != NULL && _native_mt32) nativeMidiDriver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE); bool multi_midi = ConfMan.getBool("multi_midi") && _musicType != MDT_NONE && (midi & MDT_ADLIB); - if (_musicType == MDT_ADLIB || multi_midi) { + if (_musicType == MDT_ADLIB || (multi_midi && _musicType != MDT_TOWNS)) { adlibMidiDriver = MidiDriver::createMidi(MidiDriver::detectDevice(MDT_ADLIB)); adlibMidiDriver->property(MidiDriver::PROP_OLD_ADLIB, (_game.features & GF_SMALL_HEADER) ? 1 : 0); } @@ -1841,7 +1841,9 @@ void ScummEngine::setupMusic(int midi) { _imuse = IMuse::create(_system, nativeMidiDriver, adlibMidiDriver); if (_game.platform == Common::kPlatformFMTowns) { - _musicEngine = _townsPlayer = new Player_Towns_v2(this, _imuse, _mixer, true); + MidiDriver *townsDriver = 0; + townsDriver = (_musicType == MDT_TOWNS) ? nativeMidiDriver : MidiDriver::createMidi(MidiDriver::detectDevice(MDT_TOWNS)); + _musicEngine = _townsPlayer = new Player_Towns_v2(this, _imuse, _mixer, (MidiDriver_TOWNS*)townsDriver, true, (_musicType != MDT_TOWNS)); if (!_townsPlayer->init()) error("Failed to initialize FM-Towns audio driver"); } else { |