diff options
author | Torbjörn Andersson | 2006-08-01 13:42:33 +0000 |
---|---|---|
committer | Torbjörn Andersson | 2006-08-01 13:42:33 +0000 |
commit | 7d53480025b1c314327a523ddb261fb20fe96157 (patch) | |
tree | c61a2b57e315943ae05a7095eb46dfc94359e516 /engines | |
parent | 56c59d1da660f57d682579dd9e14bea2da6b0c76 (diff) | |
download | scummvm-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.cpp | 5 | ||||
-rw-r--r-- | engines/kyra/sound.cpp | 8 | ||||
-rw-r--r-- | engines/kyra/sound.h | 2 |
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; |