diff options
Diffstat (limited to 'engines/sci/sound/midiparser_sci.cpp')
| -rw-r--r-- | engines/sci/sound/midiparser_sci.cpp | 19 | 
1 files changed, 16 insertions, 3 deletions
| diff --git a/engines/sci/sound/midiparser_sci.cpp b/engines/sci/sound/midiparser_sci.cpp index c0b4f3122e..9f0d8d150f 100644 --- a/engines/sci/sound/midiparser_sci.cpp +++ b/engines/sci/sound/midiparser_sci.cpp @@ -360,6 +360,13 @@ void MidiParser_SCI::sendInitCommands() {  					sendToDriver(0xB0 | i, 0x4B, voiceCount);  				}  			} +		} else { +			for (int i = 0; i < _track->channelCount; ++i) { +				byte voiceCount = _track->channels[i].poly; +				byte num = _track->channels[i].number; +				// TODO: Should we skip the control channel? +				sendToDriver(0xB0 | num, 0x4B, voiceCount); +			}  		}  	} @@ -480,19 +487,25 @@ void MidiParser_SCI::trackState(uint32 b) {  			s._sustain = (op2 != 0);  			break;  		case 0x4B: // voices +			if (s._voices != op2) { +				// CHECKME: Should we directly call remapChannels() if _mainThreadCalled? +				debugC(2, kDebugLevelSound, "Dynamic voice change (%d to %d)", s._voices, op2); +				_music->needsRemap(); +			}  			s._voices = op2;  			_pSnd->_chan[channel]._voices = op2; // Also sync our MusicEntry  			break;  		case 0x4E: // mute  			// This is channel mute only for sci1.  			// (It's velocity control for sci0, but we don't need state in sci0) -			if (_soundVersion >= SCI_VERSION_1_EARLY) { +			if (_soundVersion > SCI_VERSION_1_EARLY) {  				// FIXME: mute is a level, not a bool, in some SCI versions  				bool m = op2;  				if (_pSnd->_chan[channel]._mute != m) {  					_pSnd->_chan[channel]._mute = m; -					// TODO: If muting/unmuting a channel, remap channels. -					warning("Mute change without immediate remapping (mainThread = %d)", _mainThreadCalled); +					// CHECKME: Should we directly call remapChannels() if _mainThreadCalled? +					_music->needsRemap(); +					debugC(2, kDebugLevelSound, "Dynamic mute change (arg = %d, mainThread = %d)", m, _mainThreadCalled);  				}  			}  			break; | 
