aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorTorbjörn Andersson2006-08-01 13:42:33 +0000
committerTorbjörn Andersson2006-08-01 13:42:33 +0000
commit7d53480025b1c314327a523ddb261fb20fe96157 (patch)
treec61a2b57e315943ae05a7095eb46dfc94359e516 /engines
parent56c59d1da660f57d682579dd9e14bea2da6b0c76 (diff)
downloadscummvm-rg350-7d53480025b1c314327a523ddb261fb20fe96157.tar.gz
scummvm-rg350-7d53480025b1c314327a523ddb261fb20fe96157.tar.bz2
scummvm-rg350-7d53480025b1c314327a523ddb261fb20fe96157.zip
Kyra 2 has two types of XMIDI files: XMI and C55. It seems C55 are for the
General MIDI instrument set, so use them unless we're in MT-32 mode. This makes the music sound a bit closer (at least to me) to what DOSbox plays. svn-id: r23653
Diffstat (limited to 'engines')
-rw-r--r--engines/kyra/kyra.cpp5
-rw-r--r--engines/kyra/sound.cpp8
-rw-r--r--engines/kyra/sound.h2
3 files changed, 10 insertions, 5 deletions
diff --git a/engines/kyra/kyra.cpp b/engines/kyra/kyra.cpp
index b650aa61c5..bee1368be6 100644
--- a/engines/kyra/kyra.cpp
+++ b/engines/kyra/kyra.cpp
@@ -160,10 +160,13 @@ int KyraEngine::init() {
_sound = soundMidiPc;
assert(_sound);
soundMidiPc->hasNativeMT32(native_mt32);
+
+ // C55 appears to be XMIDI for General MIDI instruments
+ soundMidiPc->setUseC55(_game == GI_KYRA2 && !native_mt32);
// Unlike some SCUMM games, it's not that the MIDI sounds are
// missing. It's just that at least at the time of writing they
- // decidedly inferior to the Adlib ones.
+ // are decidedly inferior to the Adlib ones.
if (midiDriver != MD_ADLIB && ConfMan.getBool("multi_midi")) {
SoundAdlibPC *adlib = new SoundAdlibPC(_mixer, this);
diff --git a/engines/kyra/sound.cpp b/engines/kyra/sound.cpp
index a97f85c579..988a3f8d81 100644
--- a/engines/kyra/sound.cpp
+++ b/engines/kyra/sound.cpp
@@ -99,7 +99,7 @@ SoundMidiPC::SoundMidiPC(MidiDriver *driver, Audio::Mixer *mixer, KyraEngine *en
_eventFromMusic = false;
_fadeMusicOut = _sfxIsPlaying = false;
_fadeStartTime = 0;
- _isPlaying = _nativeMT32 = false;
+ _isPlaying = _nativeMT32 = _useC55 = false;
_soundEffect = _parser = 0;
_soundEffectSource = _parserSource = 0;
@@ -193,7 +193,7 @@ void SoundMidiPC::send(uint32 b) {
_channelVolume[channel] = volume;
volume = volume * _volume / 255;
b = (b & 0xFF00FFFF) | (volume << 16);
- } else if ((b & 0xF0) == 0xC0 && !_nativeMT32) {
+ } else if ((b & 0xF0) == 0xC0 && !_nativeMT32 && !_useC55) {
b = (b & 0xFFFF00FF) | MidiDriver::_mt32ToGm[(b >> 8) & 0xFF] << 8;
} else if ((b & 0xFFF0) == 0x007BB0) {
//Only respond to All Notes Off if this channel
@@ -231,7 +231,7 @@ void SoundMidiPC::metaEvent(byte type, byte *data, uint16 length) {
void SoundMidiPC::loadMusicFile(const char *file) {
char filename[25];
- sprintf(filename, "%s.XMI", file);
+ sprintf(filename, "%s.%s", file, _useC55 ? "C55" : "XMI");
uint32 size;
uint8 *data = (_engine->resource())->fileData(filename, &size);
@@ -269,7 +269,7 @@ void SoundMidiPC::playMusic(uint8 *data, uint32 size) {
void SoundMidiPC::loadSoundEffectFile(const char *file) {
char filename[25];
- sprintf(filename, "%s.XMI", file);
+ sprintf(filename, "%s.%s", file, _useC55 ? "C55" : "XMI");
uint32 size;
uint8 *data = (_engine->resource())->fileData(filename, &size);
diff --git a/engines/kyra/sound.h b/engines/kyra/sound.h
index 0d932ae772..a812f76667 100644
--- a/engines/kyra/sound.h
+++ b/engines/kyra/sound.h
@@ -173,6 +173,7 @@ public:
MidiChannel *getPercussionChannel() { return 0; }
void setPassThrough(bool b) { _passThrough = b; }
+ void setUseC55(bool b) { _useC55 = b; }
void hasNativeMT32(bool nativeMT32) { _nativeMT32 = nativeMT32; }
bool isMT32() { return _nativeMT32; }
@@ -192,6 +193,7 @@ private:
uint8 _channelVolume[16];
MidiDriver *_driver;
bool _nativeMT32;
+ bool _useC55;
bool _passThrough;
uint8 _volume;
bool _isPlaying;