diff options
author | Ruud Klaver | 2016-09-18 21:01:51 +0200 |
---|---|---|
committer | Colin Snover | 2017-10-04 23:47:21 -0500 |
commit | 6843870af2812bb3471bf1ecbf75636ef5ec6f0b (patch) | |
tree | f3d53705e00519181494b4e9d792c709eab24329 /engines/sci/sound/drivers | |
parent | cedd9d3c40503ec74575ea133a60c569a57238c4 (diff) | |
download | scummvm-rg350-6843870af2812bb3471bf1ecbf75636ef5ec6f0b.tar.gz scummvm-rg350-6843870af2812bb3471bf1ecbf75636ef5ec6f0b.tar.bz2 scummvm-rg350-6843870af2812bb3471bf1ecbf75636ef5ec6f0b.zip |
SCI: Set default MT-32 reverb before each sound
Set the default reverb configuration present in either the MT-32
patch data or MT32.DRV of SCI0 games before playing each sound, as
a previously played sound may have changed it.
Also, do not perform a general reverb init, since the start of a
sound will do that now.
Closes gh-1023.
Diffstat (limited to 'engines/sci/sound/drivers')
-rw-r--r-- | engines/sci/sound/drivers/midi.cpp | 22 | ||||
-rw-r--r-- | engines/sci/sound/drivers/mididriver.h | 2 |
2 files changed, 15 insertions, 9 deletions
diff --git a/engines/sci/sound/drivers/midi.cpp b/engines/sci/sound/drivers/midi.cpp index 3f6149daf9..46d08a5997 100644 --- a/engines/sci/sound/drivers/midi.cpp +++ b/engines/sci/sound/drivers/midi.cpp @@ -158,6 +158,7 @@ public: int getFirstChannel() const; int getLastChannel() const; void setVolume(byte volume); + virtual void onNewSound() override; int getVolume(); void setReverb(int8 reverb); void playSwitch(bool play); @@ -204,6 +205,7 @@ private: int _masterVolume; byte _reverbConfig[kReverbConfigNr][3]; + int8 _defaultReverb; Channel _channels[16]; uint8 _percussionMap[128]; int8 _keyShift[128]; @@ -220,7 +222,7 @@ private: byte _sysExBuf[kMaxSysExSize]; }; -MidiPlayer_Midi::MidiPlayer_Midi(SciVersion version) : MidiPlayer(version), _playSwitch(true), _masterVolume(15), _mt32Type(kMt32TypeNone), _hasReverb(false), _useMT32Track(true) { +MidiPlayer_Midi::MidiPlayer_Midi(SciVersion version) : MidiPlayer(version), _playSwitch(true), _masterVolume(15), _mt32Type(kMt32TypeNone), _hasReverb(false), _defaultReverb(-1), _useMT32Track(true) { MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI); _driver = MidiDriver::createMidi(dev); @@ -477,6 +479,14 @@ int MidiPlayer_Midi::getVolume() { return _masterVolume; } +void MidiPlayer_Midi::onNewSound() { + if (_defaultReverb >= 0) + // SCI0 in combination with MT-32 requires a reset of the reverb to + // the default value that is present in either the MT-32 patch data + // or MT32.DRV itself. + setReverb(_defaultReverb); +} + void MidiPlayer_Midi::setReverb(int8 reverb) { assert(reverb < kReverbConfigNr); @@ -610,7 +620,7 @@ void MidiPlayer_Midi::readMt32Patch(const SciSpan<const byte> &data) { setMt32Volume(volume); // Reverb default only used in (roughly) SCI0/SCI01 - byte reverb = stream.readByte(); + _defaultReverb = stream.readSByte(); _hasReverb = true; @@ -649,10 +659,6 @@ void MidiPlayer_Midi::readMt32Patch(const SciSpan<const byte> &data) { sendMt32SysEx(0x100004, stream, 9); } - // Reverb for SCI0 - if (_version <= SCI_VERSION_0_LATE) - setReverb(reverb); - // Send after-SysEx text stream.seek(0); sendMt32SysEx(0x200000, stream, 20); @@ -780,7 +786,7 @@ void MidiPlayer_Midi::readMt32DrvData() { if (size == 2771) { // MT32.DRV in LSL2 early contains more data, like a normal patch - byte reverb = f.readByte(); + _defaultReverb = f.readByte(); _hasReverb = true; @@ -800,8 +806,6 @@ void MidiPlayer_Midi::readMt32DrvData() { sendMt32SysEx(0x50000, f, 256); sendMt32SysEx(0x50200, f, 128); - setReverb(reverb); - // Send the after-SysEx text f.seek(0x3d); sendMt32SysEx(0x200000, f, 20); diff --git a/engines/sci/sound/drivers/mididriver.h b/engines/sci/sound/drivers/mididriver.h index fee0154096..f12d47f344 100644 --- a/engines/sci/sound/drivers/mididriver.h +++ b/engines/sci/sound/drivers/mididriver.h @@ -106,6 +106,8 @@ public: return _driver ? _driver->property(MIDI_PROP_MASTER_VOLUME, 0xffff) : 0; } + virtual void onNewSound() {} + // Returns the current reverb, or -1 when no reverb is active int8 getReverb() const { return _reverb; } // Sets the current reverb, used mainly in MT-32 |