aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorathrxx2011-04-29 22:16:02 +0200
committerWillem Jan Palenstijn2011-05-17 20:24:24 +0200
commit5c34e33c2c27b2b5083199b40306370d732f4e53 (patch)
treedaa2f5103ef488ee02edc655e956cce46c30b52d /engines
parent52d81727a3c4ee5a5737b10366951021066eda13 (diff)
downloadscummvm-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.cpp13
-rw-r--r--engines/scumm/player_towns.h6
-rw-r--r--engines/scumm/scumm.cpp6
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 {