[Scummvm-cvs-logs] CVS: scummvm/scumm imuse.cpp,1.55,1.56

James Brown ender at users.sourceforge.net
Sat Oct 12 23:08:01 CEST 2002


Update of /cvsroot/scummvm/scummvm/scumm
In directory usw-pr-cvs1:/tmp/cvs-serv19852/scumm

Modified Files:
	imuse.cpp 
Log Message:
Patch 614005(b) - Pitchblend updates


Index: imuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse.cpp,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -d -r1.55 -r1.56
--- imuse.cpp	13 Oct 2002 05:39:26 -0000	1.55
+++ imuse.cpp	13 Oct 2002 06:07:39 -0000	1.56
@@ -283,7 +283,7 @@
 
 	void update_pris();
 
-	void changed(byte what);
+	void changed(uint16 what);
 };
 
 /* Abstract IMuseInternal driver class */
@@ -298,7 +298,8 @@
 		pcEffectLevel = 32,
 		pcProgram = 64,
 		pcChorus = 128,
-		pcAll = 255,
+		pcPitchBendFactor = 256,
+		pcAll = 511,
 	};
 
 	virtual void on_timer() = 0;
@@ -312,7 +313,7 @@
 	virtual void part_key_on(Part *part, byte note, byte velocity) = 0;
 	virtual void part_key_off(Part *part, byte note) = 0;
 	virtual void part_off(Part *part) = 0;
-	virtual void part_changed(Part *part, byte what) = 0;
+	virtual void part_changed(Part *part, uint16 what) = 0;
 	virtual void part_set_param(Part *part, byte param, int value) = 0;
 	virtual int part_update_active(Part *part, uint16 *active) = 0;
 };
@@ -573,7 +574,7 @@
 	void part_key_on(Part *part, byte note, byte velocity);
 	void part_key_off(Part *part, byte note);
 	void part_set_param(Part *part, byte param, int value);
-	void part_changed(Part *part, byte what);
+	void part_changed(Part *part, uint16 what);
 	void part_off(Part *part);
 	int part_update_active(Part *part, uint16 *active);
 	void adjust_priorities() {
@@ -602,6 +603,7 @@
 	MidiChannelGM _midi_channels[9];
 
 	int16 _midi_pitchbend_last[16];
+	byte _midi_pitchbend_factor_last[16];
 	uint8 _midi_volume_last[16];
 	bool _midi_pedal_last[16];
 	byte _midi_modwheel_last[16];
@@ -611,6 +613,7 @@
 
 
 	void midiPitchBend(byte chan, int16 pitchbend);
+	void midiPitchBendFactor (byte chan, byte factor);
 	void midiVolume(byte chan, byte volume);
 	void midiPedal(byte chan, bool pedal);
 	void midiModWheel(byte chan, byte modwheel);
@@ -638,7 +641,7 @@
 	void part_set_param(Part *part, byte param, int value) {}
 	void part_key_on(Part *part, byte note, byte velocity);
 	void part_key_off(Part *part, byte note);
-	void part_changed(Part *part, byte what);
+	void part_changed(Part *part, uint16 what);
 
 	static int midi_driver_thread(void *param);
 
@@ -2070,7 +2073,8 @@
 	case 0xE:										/* pitch bend */
 		part = get_part(chan);
 		if (part)
-			part->set_pitchbend(((s[1] - 0x40) << 7) | s[0]);
+			// part->set_pitchbend(((s[1] - 0x40) << 7) | s[0]);
+			part->set_pitchbend(((s[1] << 7) | s[0]) - 0x2000);
 		s += 2;
 		break;
 
@@ -3206,6 +3210,7 @@
 		return;
 	set_pitchbend(0);
 	_pitchbend_factor = value;
+	changed (IMuseDriver::pcPitchBendFactor);
 }
 
 void Part::set_onoff(bool on)
@@ -3299,7 +3304,7 @@
 	_drv->part_off(this);
 }
 
-void Part::changed(byte what)
+void Part::changed(uint16 what)
 {
 	_drv->part_changed(this, what);
 }
@@ -4148,7 +4153,7 @@
 };
 
 
-void IMuseAdlib::part_changed(Part *part, byte what)
+void IMuseAdlib::part_changed(Part *part, uint16 what)
 {
 	MidiChannelAdl *mc;
 
@@ -4455,6 +4460,16 @@
 	}
 }
 
+void IMuseGM::midiPitchBendFactor (byte chan, byte factor) {
+	if (_midi_pitchbend_factor_last[chan] != factor) {
+		_midi_pitchbend_factor_last[chan] = factor;
+		_md->send((   0   << 16) | (101 << 8) | (0xB0 | chan));
+		_md->send((   0   << 16) | (100 << 8) | (0xB0 | chan));
+		_md->send((factor << 16) | (  6 << 8) | (0xB0 | chan));
+		_md->send((   0   << 16) | ( 38 << 8) | (0xB0 | chan));
+	}
+}
+
 void IMuseGM::midiVolume(byte chan, byte volume)
 {
 	if (_midi_volume_last[chan] != volume) {
@@ -4720,7 +4735,7 @@
 	return count;
 }
 
-void IMuseGM::part_changed(Part *part, byte what)
+void IMuseGM::part_changed(Part *part, uint16 what)
 {
 	MidiChannelGM *mc;
 
@@ -4739,6 +4754,9 @@
 		memset(mc->_actives, 0, sizeof(mc->_actives));
 		return;
 	}
+
+	if (what & pcPitchBendFactor)
+		midiPitchBendFactor (mc->_chan, part->_pitchbend_factor);
 
 	if (what & pcMod)
 		midiPitchBend(mc->_chan,





More information about the Scummvm-git-logs mailing list