diff options
| -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;  | 
