[Scummvm-cvs-logs] CVS: scummvm/scumm imuse.cpp,2.109,2.110

Jamieson Christian jamieson630 at users.sourceforge.net
Fri Oct 17 10:40:10 CEST 2003


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

Modified Files:
	imuse.cpp 
Log Message:
Another fix for Bug [817871] re hanging notes on
pause with MT-32. Apparently the first fix doesn't work.

Index: imuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse.cpp,v
retrieving revision 2.109
retrieving revision 2.110
diff -u -d -r2.109 -r2.110
--- imuse.cpp	17 Oct 2003 16:46:06 -0000	2.109
+++ imuse.cpp	17 Oct 2003 17:38:18 -0000	2.110
@@ -1226,17 +1226,15 @@
 	update_volumes();
 	_music_volume = vol;
 
-	// Kill master volume on the MT-32, because for some
-	// reason the MT-32 often fails to respond to the
-	// channel volume update for a single channel.
-	// (Ref Bug #817871. Reportedly happens in the
-	// original distro, too.)
+	// Fix for Bug #817871. The MT-32 apparently fails
+	// sometimes to respond to a channel volume message
+	// (or only uses it for subsequent note events).
+	// The result is hanging notes on pause. Reportedly
+	// happens in the original distro, too. To fix that,
+	// just send AllNotesOff to the channels.
 	if (_midi_native && _native_mt32) {
-		byte buffer[8];
-		memcpy(buffer, "\x41\x10\x16\x10\x00\x16", 6);
-		buffer[6] = paused ? 0 : 100;
-		buffer[7] = (0 - 0x10 - 0x16 - buffer[6]) & 0x7F; // Checksum
-		_midi_native->sysEx (buffer, 8);
+		for (int i = 0; i < 16; ++i)
+			_midi_native->send (123 << 8 | 0xB0 | i);
 	}
 
 	_paused = paused;





More information about the Scummvm-git-logs mailing list