[Scummvm-cvs-logs] CVS: scummvm/scumm imuse.cpp,2.97,2.98 imuse_player.cpp,2.32,2.33 imuse_internal.h,2.23,2.24

Jamieson Christian jamieson630 at users.sourceforge.net
Mon Sep 29 01:12:02 CEST 2003


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

Modified Files:
	imuse.cpp imuse_player.cpp imuse_internal.h 
Log Message:
Cleanup, mostly related to matching up semantics
between Part and MidiChannel (which Part may
derive from eventually).

Index: imuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse.cpp,v
retrieving revision 2.97
retrieving revision 2.98
diff -u -d -r2.97 -r2.98
--- imuse.cpp	29 Sep 2003 06:32:45 -0000	2.97
+++ imuse.cpp	29 Sep 2003 08:09:38 -0000	2.98
@@ -66,7 +66,6 @@
 	memset(_channel_volume,0,sizeof(_channel_volume));
 	memset(_channel_volume_eff,0,sizeof(_channel_volume_eff));
 	memset(_volchan_table,0,sizeof(_volchan_table));
-	memset(_active_notes,0,sizeof(_active_notes));
 }
 
 byte *IMuseInternal::findStartOfSound(int sound) {
@@ -865,7 +864,7 @@
 		case 21:
 			return -1;
 		case 22:
-			((Part *)player)->setVolume(a[3]);
+			((Part *)player)->volume(a[3]);
 			return 0;
 		case 23:
 			return query_queue(a[1]);
@@ -1425,7 +1424,7 @@
 	}
 }
 
-void Part::set_pitchbend(int value) {
+void Part::pitchBend(int16 value) {
 	_pitchbend = value;
 	if (_mc) {
 		_mc->pitchBend(clamp(_pitchbend +
@@ -1434,8 +1433,8 @@
 	}
 }
 
-void Part::setVolume(uint8 vol) {
-	_vol_eff = ((_vol = vol) + 1) * _player->getEffectiveVolume() >> 7;
+void Part::volume (byte value) {
+	_vol_eff = ((_vol = value) + 1) * _player->getEffectiveVolume() >> 7;
 	if (_mc)
 		_mc->volume(_vol_eff);
 }
@@ -1461,47 +1460,47 @@
 	}
 }
 
-void Part::set_pedal(bool value) {
+void Part::sustain(bool value) {
 	_pedal = value;
 	if (_mc)
-		_mc->sustain(_pedal);
+		_mc->sustain(value);
 }
 
-void Part::set_modwheel(uint value) {
+void Part::modulationWheel(byte value) {
 	_modwheel = value;
 	if (_mc)
-		_mc->modulationWheel(_modwheel);
+		_mc->modulationWheel(value);
 }
 
-void Part::set_chorus(uint chorus) {
-	_chorus = chorus;
+void Part::chorusLevel(byte value) {
+	_chorus = value;
 	if (_mc)
-		_mc->chorusLevel(_effect_level);
+		_mc->chorusLevel(value);
 }
 
-void Part::set_effect_level(uint level)
+void Part::effectLevel(byte value)
 {
-	_effect_level = level;
+	_effect_level = value;
 	if (_mc)
-		_mc->effectLevel(_effect_level);
+		_mc->effectLevel(value);
 }
 
 void Part::fix_after_load() {
 	set_transpose(_transpose);
-	setVolume(_vol);
+	volume(_vol);
 	set_detune(_detune);
 	set_pri(_pri);
 	set_pan(_pan);
 	sendAll();
 }
 
-void Part::set_pitchbend_factor(uint8 value) {
+void Part::pitchBendFactor(byte value) {
 	if (value > 12)
 		return;
-	set_pitchbend(0);
+	pitchBend(0);
 	_pitchbend_factor = value;
 	if (_mc)
-		_mc->pitchBendFactor(_pitchbend_factor);
+		_mc->pitchBendFactor(value);
 }
 
 void Part::set_onoff(bool on) {
@@ -1526,9 +1525,11 @@
 		_instrument.send(_mc);
 }
 
-void Part::key_on(byte note, byte velocity) {
+void Part::noteOn(byte note, byte velocity) {
+	if (!_on)
+		return;
+
 	MidiChannel *mc = _mc;
-	_actives[note >> 4] |= (1 <<(note & 0xF));
 
 	// DEBUG
 	if (_unassigned_instrument && !_percussion) {
@@ -1551,9 +1552,11 @@
 	}
 }
 
-void Part::key_off(byte note) {
+void Part::noteOff(byte note) {
+	if (!_on)
+		return;
+
 	MidiChannel *mc = _mc;
-	_actives[note >> 4] &= ~(1 <<(note & 0xF));
 	if (mc) {
 		mc->noteOff(note);
 	} else if (_percussion) {
@@ -1568,7 +1571,6 @@
 	_next = NULL;
 	_prev = NULL;
 	_mc = NULL;
-	memset(_actives, 0, sizeof(_actives));
 }
 
 void Part::setup(Player *player) {
@@ -1611,7 +1613,6 @@
 		_mc->release();
 		_mc = NULL;
 	}
-	memset(_actives, 0, sizeof(_actives));
 }
 
 bool Part::clearToTransmit() {
@@ -1637,33 +1638,9 @@
 	_mc->priority(_pri_eff);
 }
 
-int Part::update_actives(uint16 *active) {
-	int i, j;
-	uint16 *act, mask, bits;
-	int count = 0;
-
-	bits = 1 << _chan;
-	act = _actives;
-
-	for (i = 8; i; i--) {
-		mask = *act++;
-		if (mask) {
-			for (j = 16; j; j--, mask >>= 1, active++) {
-				if (mask & 1 && !(*active & bits)) {
-					*active |= bits;
-					count++;
-				}
-			}
-		} else {
-			active += 16;
-		}
-	}
-	return count;
-}
-
-void Part::set_program(byte program) {
+void Part::programChange(byte value) {
 	_bank = 0;
-	_instrument.program(program, _player->isMT32());
+	_instrument.program(value, _player->isMT32());
 	if (clearToTransmit())
 		_instrument.send(_mc);
 }
@@ -1677,11 +1654,10 @@
 		_instrument.send(_mc);
 }
 
-void Part::silence() {
+void Part::allNotesOff() {
 	if (!_mc)
 		return;
 	_mc->allNotesOff();
-	memset(_actives, 0, sizeof(_actives));
 }
 
 ////////////////////////////////////////

Index: imuse_player.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_player.cpp,v
retrieving revision 2.32
retrieving revision 2.33
diff -u -d -r2.32 -r2.33
--- imuse_player.cpp	25 Sep 2003 22:32:04 -0000	2.32
+++ imuse_player.cpp	29 Sep 2003 08:09:38 -0000	2.33
@@ -34,16 +34,14 @@
 
 ////////////////////////////////////////
 //
-//  Helper functions
+//  Miscellaneous
 //
 ////////////////////////////////////////
 
 extern MidiParser *MidiParser_createRO();
 extern MidiParser *MidiParser_createEUP();
 
-static uint read_word(byte *a) {
-	return (a[0] << 8) + a[1];
-}
+uint16 Player::_active_notes[128];
 
 
 
@@ -233,17 +231,21 @@
 
 	switch (cmd >> 4) {
 	case 0x8: // Key Off
-		if (!_scanning)
-			key_off(chan, param1);
-		else
-			clear_active_note(chan, param1);
+		if (!_scanning) {
+			if ((part = getPart(chan)) != 0)
+				part->noteOff(param1);
+		} else {
+			_active_notes[param1] &= ~(1 << chan);
+		}
 		break;
 
 	case 0x9: // Key On
-		if (!_scanning)
-			key_on(chan, param1, param2);
-		else
-			set_active_note(chan, param1);
+		if (!_scanning) {
+			if ((part = getPart(chan)) != 0)
+				part->noteOn(param1, param2);
+		} else {
+			_active_notes[param1] |= (1 << chan);
+		}
 		break;
 
 	case 0xB: // Control Change
@@ -253,16 +255,16 @@
 
 		switch (param1) {
 		case 1: // Modulation Wheel
-			part->set_modwheel(param2);
+			part->modulationWheel(param2);
 			break;
 		case 7: // Volume
-			part->setVolume(param2);
+			part->volume(param2);
 			break;
 		case 10: // Pan Position
 			part->set_pan(param2 - 0x40);
 			break;
 		case 16: // Pitchbend Factor(non-standard)
-			part->set_pitchbend_factor(param2);
+			part->pitchBendFactor(param2);
 			break;
 		case 17: // GP Slider 2
 			part->set_detune(param2 - 0x40);
@@ -272,16 +274,16 @@
 			_se->reallocateMidiChannels(_midi);
 			break;
 		case 64: // Sustain Pedal
-			part->set_pedal(param2 != 0);
+			part->sustain(param2 != 0);
 			break;
 		case 91: // Effects Level
-			part->set_effect_level(param2);
+			part->effectLevel(param2);
 			break;
 		case 93: // Chorus Level
-			part->set_chorus(param2);
+			part->chorusLevel(param2);
 			break;
 		case 123: // All Notes Off
-			part->silence();
+			part->allNotesOff();
 			break;
 		default:
 			warning("Player::send(): Invalid control change %d", param1);
@@ -293,7 +295,7 @@
 		if (part) {
 			if (_isGM) {
 				if (param1 < 128)
-					part->set_program(param1);
+					part->programChange(param1);
 			} else {
 				if (param1 < 32)
 					part->load_global_instrument(param1);
@@ -304,7 +306,7 @@
 	case 0xE: // Pitch Bend
 		part = getPart(chan);
 		if (part)
-			part->set_pitchbend(((param2 << 7) | param1) - 0x2000);
+			part->pitchBend(((param2 << 7) | param1) - 0x2000);
 		break;
 
 	case 0xA: // Aftertouch
@@ -384,7 +386,7 @@
 			if (part) {
 				part->set_onoff(p[2] & 0x01);
 				part->set_pri (p[4]);
-				part->setVolume((p[5] & 0x0F) << 4 |(p[6] & 0x0F));
+				part->volume((p[5] & 0x0F) << 4 |(p[6] & 0x0F));
 				part->_percussion = _isGM ?((p[9] & 0x08) > 0) : false;
 				if (part->_percussion) {
 					if (part->_mc) {
@@ -424,7 +426,7 @@
 		// This SysEx is used in Sam & Max for maybe_jump.
 		if (_scanning)
 			break;
-		maybe_jump(p[0], p[1] - 1, (read_word(p + 2) - 1) * 4 + p[4], ((p[5] * TICKS_PER_BEAT) >> 2) + p[6]);
+		maybe_jump(p[0], p[1] - 1, (READ_BE_UINT16(p + 2) - 1) * 4 + p[4], ((p[5] * TICKS_PER_BEAT) >> 2) + p[6]);
 		break;
 
 	case 2: // Start of song. Ignore for now.
@@ -440,7 +442,7 @@
 				part->set_instrument((byte *) buf);
 			} else {
 				// SPK tracks have len == 49 here, and are not supported
-				part->set_program(254); // Must be invalid, but not 255(which is reserved)
+				part->programChange(254); // Must be invalid, but not 255(which is reserved)
 			}
 		}
 		break;
@@ -458,14 +460,14 @@
 		decode_sysex_bytes(p, buf, len - 3);
 		part = getPart(a);
 		if (part)
-			part->set_param(read_word(buf), read_word(buf + 2));
+			part->set_param(READ_BE_UINT16(buf), READ_BE_UINT16(buf + 2));
 		break;
 
 	case 48: // Hook - jump
 		if (_scanning)
 			break;
 		decode_sysex_bytes(p + 1, buf, len - 2);
-		maybe_jump(buf[0], read_word(buf + 1), read_word(buf + 3), read_word(buf + 5));
+		maybe_jump(buf[0], READ_BE_UINT16(buf + 1), READ_BE_UINT16(buf + 3), READ_BE_UINT16(buf + 5));
 		break;
 
 	case 49: // Hook - global transpose
@@ -507,9 +509,9 @@
 
 	case 80: // Loop
 		decode_sysex_bytes(p + 1, buf, len - 2);
-		setLoop(read_word(buf),
-						 read_word(buf + 2), read_word(buf + 4), read_word(buf + 6), read_word(buf + 8)
-			);
+		setLoop(READ_BE_UINT16(buf), READ_BE_UINT16(buf + 2),
+		        READ_BE_UINT16(buf + 4), READ_BE_UINT16(buf + 6),
+		        READ_BE_UINT16(buf + 8));
 		break;
 
 	case 81: // End loop
@@ -609,7 +611,7 @@
 
 	part = getPart(chan);
 	if (part)
-		part->setVolume(data[2]);
+		part->volume(data[2]);
 }
 
 void Player::maybe_set_program(byte *data) {
@@ -632,7 +634,7 @@
 
 	part = getPart(chan);
 	if (part)
-		part->set_program(data[2]);
+		part->programChange(data[2]);
 }
 
 void Player::maybe_set_transpose_part(byte *data) {
@@ -673,18 +675,6 @@
 	return 0;
 }
 
-void Player::clear_active_notes() {
-	memset(_se->_active_notes, 0, sizeof(_se->_active_notes));
-}
-
-void Player::clear_active_note(int chan, byte note) {
-	_se->_active_notes[note] &= ~(1 << chan);
-}
-
-void Player::set_active_note(int chan, byte note) {
-	_se->_active_notes[note] |= (1 << chan);
-}
-
 void Player::part_set_transpose(uint8 chan, byte relative, int8 b) {
 	Part *part;
 
@@ -699,25 +689,6 @@
 	part->set_transpose(b);
 }
 
-void Player::key_on(uint8 chan, byte note, uint8 velocity) {
-	Part *part;
-
-	part = getPart(chan);
-	if (!part || !part->_on)
-		return;
-
-	part->key_on(note, velocity);
-}
-
-void Player::key_off(uint8 chan, byte note) {
-	Part *part;
-
-	for (part = _parts; part; part = part->_next) {
-		if (part->_chan == (byte)chan && part->_on)
-			part->key_off(note);
-	}
-}
-
 bool Player::jump(uint track, uint beat, uint tick) {
 	if (!_parser)
 		return false;
@@ -755,7 +726,7 @@
 
 	for (part = _parts; part; part = part->_next) {
 		if (part->_pedal)
-			part->set_pedal(false);
+			part->sustain(false);
 	}
 }
 
@@ -794,20 +765,6 @@
 	return part;
 }
 
-uint Player::update_actives() {
-	Part *part;
-	uint16 *active;
-	int count = 0;
-
-	clear_active_notes();
-	active = _se->_active_notes;
-	for (part = _parts; part; part = part->_next) {
-		if (part->_mc)
-			count += part->update_actives(active);
-	}
-	return count;
-}
-
 void Player::setPriority(int pri) {
 	Part *part;
 
@@ -844,7 +801,7 @@
 		tobeat++;
 
 	turn_off_parts();
-	clear_active_notes();
+	memset(_active_notes, 0, sizeof(_active_notes));
 	_scanning = true;
 
 	// If the scan involves a track switch, scan to the end of
@@ -880,13 +837,14 @@
 void Player::play_active_notes() {
 	int i, j;
 	uint mask;
+	Part *part;
 
-	for (i = 0; i != 128; i++) {
-		mask = _se->_active_notes[i];
-		for (j = 0; j != 16; j++, mask >>= 1) {
-			if (mask & 1) {
-				key_on(j, i, 80);
-			}
+	for (i = 0; i < 16; ++i) {
+		part = getPart (i);
+		mask = 1 << i;
+		for (j = 0; j < 128; ++j) {
+			if (_active_notes[j] & mask)
+				part->noteOn (j, 80);
 		}
 	}
 }
@@ -901,7 +859,7 @@
 	_vol_eff = _se->get_channel_volume(_vol_chan) *(vol + 1) >> 7;
 
 	for (part = _parts; part; part = part->_next) {
-		part->setVolume(part->_vol);
+		part->volume(part->_vol);
 	}
 
 	return 0;

Index: imuse_internal.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_internal.h,v
retrieving revision 2.23
retrieving revision 2.24
diff -u -d -r2.23 -r2.24
--- imuse_internal.h	29 Sep 2003 06:32:46 -0000	2.23
+++ imuse_internal.h	29 Sep 2003 08:09:38 -0000	2.24
@@ -148,6 +148,11 @@
 
 class Player : public MidiDriver {
 protected:
+	// Moved from IMuseInternal.
+	// This is only used by one player at a time.
+	static uint16 _active_notes[128];
+
+protected:
 	MidiDriver *_midi;
 	MidiParser *_parser;
 
@@ -188,8 +193,6 @@
 	void hook_clear();
 	void uninit_parts();
 	byte *parse_midi(byte *s);
-	void key_off(uint8 chan, byte data);
-	void key_on(uint8 chan, byte data, byte velocity);
 	void part_set_transpose(uint8 chan, byte relative, int8 b);
 	void parse_sysex(byte *p, uint len);
 	void maybe_jump(byte cmd, uint track, uint beat, uint tick);
@@ -198,7 +201,6 @@
 	void maybe_set_volume(byte *data);
 	void maybe_set_program(byte *data);
 	void maybe_set_transpose_part(byte *data);
-	uint update_actives();
 	void turn_off_pedals();
 	int  query_part_param(int param, byte chan);
 	void turn_off_parts();
@@ -208,10 +210,6 @@
 
 	static void decode_sysex_bytes(const byte *src, byte *dst, int len);
 
-	void clear_active_note(int chan, byte note);
-	void set_active_note(int chan, byte note);
-	void clear_active_notes();
-
 	// Sequencer part
 	int start_seq_sound(int sound, bool reset_vars = true);
 	int query_param(int param);
@@ -301,36 +299,35 @@
 	Instrument _instrument;
 	bool _unassigned_instrument; // For diagnostic reporting purposes only
 
-	// Used to be in MidiDriver
-	uint16 _actives[8];
+	// MidiChannel interface
+	// (We don't currently derive from MidiChannel,
+	//  but if we ever do, this will make it easy.)
+	void noteOff(byte note);
+	void noteOn(byte note, byte velocity);
+	void programChange(byte value);
+	void pitchBend(int16 value);
+	void modulationWheel(byte value);
+	void volume(byte value);
+	void pitchBendFactor(byte value);
+	void sustain(bool value);
+	void effectLevel(byte value);
+	void chorusLevel(byte value);
+	void allNotesOff();
 
-	void key_on(byte note, byte velocity);
-	void key_off(byte note);
 	void set_param(byte param, int value) { }
 	void init();
 	void setup(Player *player);
 	void uninit();
 	void off();
-	void silence();
 	void set_instrument(uint b);
 	void set_instrument(byte *data);
 	void load_global_instrument(byte b);
 
 	void set_transpose(int8 transpose);
-	void setVolume(uint8 volume);
 	void set_detune(int8 detune);
 	void set_pri(int8 pri);
 	void set_pan(int8 pan);
-	void set_modwheel(uint value);
-	void set_pedal(bool value);
-	void set_pitchbend(int value);
-	void release_pedal();
-	void set_program(byte program);
-	void set_chorus(uint chorus);
-	void set_effect_level(uint level);
 
-	int update_actives(uint16 *active);
-	void set_pitchbend_factor(uint8 value);
 	void set_onoff(bool on);
 	void fix_after_load();
 
@@ -386,7 +383,6 @@
 	Player _players[8];
 	Part _parts[32];
 
-	uint16 _active_notes[128];
 	Instrument _global_adlib_instruments[32];
 	CommandQueue _cmd_queue[64];
 	DeferredCommand _deferredCommands[4];





More information about the Scummvm-git-logs mailing list