[Scummvm-cvs-logs] CVS: scummvm/scumm imuse.cpp,2.100,2.101 imuse_internal.h,2.25,2.26

Jamieson Christian jamieson630 at users.sourceforge.net
Wed Oct 1 08:20:07 CEST 2003


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv3612/scummvm/scumm

Modified Files:
	imuse.cpp imuse_internal.h 
Log Message:
Fix for Bug [812737] ALL: pitchbend range with MT32

Manual scaling of pitchbends to account for the fact that the
MT32 doesn't respond to RPN-based pitchbend range adjustments.
Also tweaked the MT32 partial reserve settings per Bug [812740].

Index: imuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse.cpp,v
retrieving revision 2.100
retrieving revision 2.101
diff -u -d -r2.100 -r2.101
--- imuse.cpp	30 Sep 2003 13:18:25 -0000	2.100
+++ imuse.cpp	1 Oct 2003 15:19:12 -0000	2.101
@@ -1204,7 +1204,7 @@
 	g_system->delay_msecs (500);
 
 	// Set partial reserve equally for all channels
-	memcpy(&buffer[4], "\x10\x00\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x48", 13);
+	memcpy(&buffer[4], "\x10\x00\x04\x04\x04\x04\x04\x04\x04\x04\x04\x00\x4C", 13);
 	midi->sysEx(buffer, 17);
 }
 
@@ -1429,20 +1429,14 @@
 
 void Part::set_detune(int8 detune) {
 	_detune_eff = clamp((_detune = detune) + _player->getDetune(), -128, 127);
-	if (_mc) {
-		_mc->pitchBend(clamp(_pitchbend +
-						(_detune_eff * 64 / 12) +
-						(_transpose_eff * 8192 / 12), -8192, 8191));
-	}
+	if (_mc)
+		sendPitchBend();
 }
 
 void Part::pitchBend(int16 value) {
 	_pitchbend = value;
-	if (_mc) {
-		_mc->pitchBend(clamp(_pitchbend +
-						(_detune_eff * 64 / 12) +
-						(_transpose_eff * 8192 / 12), -8192, 8191));
-	}
+	if (_mc)
+		sendPitchBend();
 }
 
 void Part::volume (byte value) {
@@ -1465,11 +1459,8 @@
 
 void Part::set_transpose(int8 transpose) {
 	_transpose_eff = transpose_clamp((_transpose = transpose) + _player->getTranspose(), -24, 24);
-	if (_mc) {
-		_mc->pitchBend(clamp(_pitchbend +
-						(_detune_eff * /*64*/82 / _pitchbend_factor) +
-						(_transpose_eff * 8192 / _pitchbend_factor), -8192, 8191));
-	}
+	if (_mc)
+		sendPitchBend();
 }
 
 void Part::sustain(bool value) {
@@ -1636,9 +1627,7 @@
 void Part::sendAll() {
 	if (!clearToTransmit()) return;
 	_mc->pitchBendFactor(_pitchbend_factor);
-	_mc->pitchBend(clamp(_pitchbend +
-	               (_detune_eff * 64 / 12) +
-	               (_transpose_eff * 8192 / 12), -8192, 8191));
+	sendPitchBend();
 	_mc->volume(_vol_eff);
 	_mc->sustain(_pedal);
 	_mc->modulationWheel(_modwheel);
@@ -1648,6 +1637,16 @@
 		_instrument.send(_mc);
 	_mc->chorusLevel(_effect_level);
 	_mc->priority(_pri_eff);
+}
+
+void Part::sendPitchBend() {
+	int16 bend = _pitchbend;
+	// RPN-based pitchbend range doesn't work for the MT32,
+	// so we'll do the scaling ourselves.
+	if (_player->_se->isNativeMT32())
+		bend = bend * _pitchbend_factor / 12;
+	_mc->pitchBend(clamp(bend + (_detune_eff * 64 / 12) +
+					(_transpose_eff * 8192 / 12), -8192, 8191));
 }
 
 void Part::programChange(byte value) {

Index: imuse_internal.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_internal.h,v
retrieving revision 2.25
retrieving revision 2.26
diff -u -d -r2.25 -r2.26
--- imuse_internal.h	30 Sep 2003 08:25:57 -0000	2.25
+++ imuse_internal.h	1 Oct 2003 15:19:12 -0000	2.26
@@ -332,6 +332,7 @@
 	void fix_after_load();
 
 	void sendAll();
+	void sendPitchBend();
 	bool clearToTransmit();
 	
 	Part() {
@@ -442,6 +443,7 @@
 	void reallocateMidiChannels(MidiDriver *midi);
 	void setGlobalAdlibInstrument(byte slot, byte *data);
 	void copyGlobalAdlibInstrument(byte slot, Instrument *dest);
+	bool isNativeMT32() { return _native_mt32; }
 
 	// IMuse interface
 





More information about the Scummvm-git-logs mailing list