[Scummvm-cvs-logs] SF.net SVN: scummvm:[54499] scummvm/trunk/engines/sci/sound/midiparser_sci. cpp

waltervn at users.sourceforge.net waltervn at users.sourceforge.net
Fri Nov 26 15:35:46 CET 2010


Revision: 54499
          http://scummvm.svn.sourceforge.net/scummvm/?rev=54499&view=rev
Author:   waltervn
Date:     2010-11-26 14:35:46 +0000 (Fri, 26 Nov 2010)

Log Message:
-----------
SCI: Pull reverb default directly from control channel.

Modified Paths:
--------------
    scummvm/trunk/engines/sci/sound/midiparser_sci.cpp

Modified: scummvm/trunk/engines/sci/sound/midiparser_sci.cpp
===================================================================
--- scummvm/trunk/engines/sci/sound/midiparser_sci.cpp	2010-11-26 14:35:28 UTC (rev 54498)
+++ scummvm/trunk/engines/sci/sound/midiparser_sci.cpp	2010-11-26 14:35:46 UTC (rev 54499)
@@ -630,71 +630,18 @@
 }
 
 byte MidiParser_SCI::getSongReverb() {
-	byte curEvent = 0, prevEvent = 0, command = 0;
-	bool endOfTrack = false;
-	const byte *channelData = _mixedData;
+	assert(_track);
 
-	do {
-		while (*channelData == 0xF8)
-			channelData++;
-
-		channelData++;	// delta
-
-		if ((*channelData & 0xF0) >= 0x80)
-			curEvent = *(channelData++);
-		else
-			curEvent = prevEvent;
-		if (curEvent < 0x80)
-			continue;
-
-		prevEvent = curEvent;
-		command = curEvent >> 4;
-
-		byte channel;
-
-		switch (command) {
-		case 0xC:	// program change
-		case 0xD:
-			channelData++;	// param1
-			break;
-		case 0xB: {
-				byte param1 = *channelData++;
-				byte param2 = *channelData++;
-				channel = curEvent & 0x0F;
-				if (channel == 0xF) {	// SCI special
-					if (param1 == kSetReverb)
-						return param2;
-				}
-			}
-			break;
-		case 0x8:
-		case 0x9:
-		case 0xA:
-		case 0xE:
-			channelData++;	// param1
-			channelData++;	// param2
-			break;
-		case 0xF:
-			if ((curEvent & 0x0F) == 0x2) {
-				channelData++;	// param1
-				channelData++;	// param2
-			} else if ((curEvent & 0x0F) == 0x3) {
-				channelData++;	// param1
-			} else if ((curEvent & 0x0F) == 0xF) {	// META
-				byte type = *channelData++;
-				if (type == 0x2F) {// end of track reached
-					endOfTrack = true;
-				} else {
-					// no further processing necessary
-				}
-			}
-			break;
-		default:
-			break;
+	if (_soundVersion >= SCI_VERSION_1_EARLY) {
+		for (int i = 0; i < _track->channelCount; i++) {
+			SoundResource::Channel &channel = _track->channels[i];
+			// Peek ahead in the control channel to get the default reverb setting
+			if (channel.number == 15 && channel.size >= 7)
+				return channel.data[6];
 		}
-	} while (!endOfTrack);
+	}
 
-	return 127;	// no reverb found, return invalid
+	return 127;
 }
 
 void MidiParser_SCI::allNotesOff() {


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list