diff options
| author | Torbjörn Andersson | 2015-06-15 07:24:10 +0200 | 
|---|---|---|
| committer | Torbjörn Andersson | 2015-06-15 07:24:10 +0200 | 
| commit | 1fc1d5cc88c5c2bc703642fc66f979bbe9164816 (patch) | |
| tree | 822024a8fd7fa744b1ab059104f1e7edfc0a92a1 | |
| parent | 142812e843f9ecb8fbe76b3d32e89b5a17674511 (diff) | |
| download | scummvm-rg350-1fc1d5cc88c5c2bc703642fc66f979bbe9164816.tar.gz scummvm-rg350-1fc1d5cc88c5c2bc703642fc66f979bbe9164816.tar.bz2 scummvm-rg350-1fc1d5cc88c5c2bc703642fc66f979bbe9164816.zip  | |
SHERLOCK: Use standard MIDI drivers for Rose Tattoo
As far as I understand, the Rose Tattoo music is standard XMIDI, so
it can be played on any GM device. The music now sounds like I
remember it from DOSBox. (I'm currently limited to AdLib music in
DOSBox, so I can't make any proper comparison.)
AdLib support currently depends on ScummVM's GM -> AdLib conversion,
so that does not match the original.
I'm not sure about MT-32, but since I have no reason to believe that
there is MT-32 specific music - at least not in the way the Serrated
Scalpel MT-32 driver expects - we can probably rely on our default
driver to a reasonable job of it.
| -rw-r--r-- | engines/sherlock/music.cpp | 52 | 
1 files changed, 33 insertions, 19 deletions
diff --git a/engines/sherlock/music.cpp b/engines/sherlock/music.cpp index 29e122f09c..7cf80537f3 100644 --- a/engines/sherlock/music.cpp +++ b/engines/sherlock/music.cpp @@ -218,29 +218,40 @@ Music::Music(SherlockEngine *vm, Audio::Mixer *mixer) : _vm(vm), _mixer(mixer) {  	if (_vm->_interactiveFl)  		_vm->_res->addToCache("MUSIC.LIB"); -	_midiParser = (IS_SERRATED_SCALPEL) ? new MidiParser_SH() : MidiParser::createParser_XMIDI(); +	MidiDriver::DeviceHandle dev; -	MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MT32); -	_musicType = MidiDriver::getMusicType(dev); +	if (IS_SERRATED_SCALPEL) { +		_midiParser = new MidiParser_SH(); +		dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MT32); +		_musicType = MidiDriver::getMusicType(dev); -	switch (_musicType) { -	case MT_ADLIB: -		_midiDriver = MidiDriver_AdLib_create(); -		break; -	case MT_MT32: -		_midiDriver = MidiDriver_MT32_create(); -		break; -	case MT_GM: -		if (ConfMan.getBool("native_mt32")) { +		switch (_musicType) { +		case MT_ADLIB: +			_midiDriver = MidiDriver_AdLib_create(); +			break; +		case MT_MT32:  			_midiDriver = MidiDriver_MT32_create(); -			_musicType = MT_MT32; +			break; +		case MT_GM: +			if (ConfMan.getBool("native_mt32")) { +				_midiDriver = MidiDriver_MT32_create(); +				_musicType = MT_MT32; +			} +			break; +		default: +			// Create default one +			// I guess we shouldn't do this anymore +			//_midiDriver = MidiDriver::createMidi(dev); +			break;  		} -		break; -	default: -		// Create default one -		// I guess we shouldn't do this anymore -		//_driver = MidiDriver::createMidi(dev); -		break; +	} else { +		// TODO: AdLib support uses ScummVM's builtin GM to AdLib +		// conversion. This won't match the original. + +		_midiParser = MidiParser::createParser_XMIDI(); +		dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_GM); +		_musicType = MT_GM; +		_midiDriver = MidiDriver::createMidi(dev);  	}  	if (_midiDriver) { @@ -400,6 +411,9 @@ bool Music::playMusic(const Common::String &name) {  			MidiDriver_MT32_newMusicData(_midiDriver, dataPos, dataSize);  			break; +		case MT_GM: +			break; +  		default:  			// should never happen  			break;  | 
