[Scummvm-cvs-logs] SF.net SVN: scummvm:[53095] scummvm/trunk/engines/scumm

athrxx at users.sourceforge.net athrxx at users.sourceforge.net
Sat Oct 9 03:36:38 CEST 2010


Revision: 53095
          http://scummvm.svn.sourceforge.net/scummvm/?rev=53095&view=rev
Author:   athrxx
Date:     2010-10-09 01:36:38 +0000 (Sat, 09 Oct 2010)

Log Message:
-----------
SCUMM/FM-TOWNS: cleanup sfx code

Modified Paths:
--------------
    scummvm/trunk/engines/scumm/player_towns.cpp
    scummvm/trunk/engines/scumm/player_towns.h

Modified: scummvm/trunk/engines/scumm/player_towns.cpp
===================================================================
--- scummvm/trunk/engines/scumm/player_towns.cpp	2010-10-09 01:21:06 UTC (rev 53094)
+++ scummvm/trunk/engines/scumm/player_towns.cpp	2010-10-09 01:36:38 UTC (rev 53095)
@@ -31,8 +31,6 @@
 
 Player_Towns::Player_Towns(ScummEngine *vm, bool isVersion2) : _vm(vm), _v2(isVersion2), _numSoundMax(isVersion2 ? 256 : 200) {
 	memset(_pcmCurrentSound, 0, sizeof(_pcmCurrentSound));
-	memset(&_ovrCur, 0, sizeof(SoundOvrParameters));
-	_soundOverride = 0;
 	_unkFlags = 0x33;
 	_intf = 0;
 }
@@ -107,15 +105,6 @@
 	const uint8 *ptr = data;
 	const uint8 *sfxData = ptr + 16;
 	
-	int note2, velocity;
-
-	if (velo)
-		velocity = velo;
-	else if (_ovrCur.vLeft + _ovrCur.vRight)
-		velocity = (_ovrCur.vLeft + _ovrCur.vRight) >> 2;
-	else
-		velocity = ptr[8] >> 1;
-
 	int numChan = _v2 ? 1 : ptr[14];
 	for (int i = 0; i < numChan; i++) {
 		int chan = allocatePcmChannel(sound, i, priority);
@@ -124,18 +113,10 @@
 		
 		_intf->callback(70, _unkFlags);
 		_intf->callback(3, chan + 0x3f, pan);
+		_intf->callback(37, chan + 0x3f, note, velo, sfxData);
 		
-		if (note)
-			note2 = note;
-		else if (_ovrCur.note)
-			note2 = _ovrCur.note;
-		else
-			note2 = sfxData[28];
-		
-		_intf->callback(37, chan + 0x3f, note2, velocity, sfxData);
-		
-		_pcmCurrentSound[chan].note = note2;
-		_pcmCurrentSound[chan].velo = velocity;
+		_pcmCurrentSound[chan].note = note;
+		_pcmCurrentSound[chan].velo = velo;
 		_pcmCurrentSound[chan].pan = pan;
 		_pcmCurrentSound[chan].paused = 0;
 		_pcmCurrentSound[chan].looping = READ_LE_UINT32(&sfxData[20]) ? 1 : 0;
@@ -201,19 +182,19 @@
 }
 
 Player_Towns_v1::Player_Towns_v1(ScummEngine *vm, Audio::Mixer *mixer) : Player_Towns(vm, false) {
+	_soundOverride = 0;
 	_cdaCurrentSound = _eupCurrentSound = _cdaNumLoops = 0;
 	_cdaForceRestart = 0;
 	_cdaVolLeft = _cdaVolRight = 0;
 
 	_eupVolLeft = _eupVolRight = 0;
+	_eupLooping = false;
 
 	if (_vm->_game.version == 3) {
 		_soundOverride = new SoundOvrParameters[_numSoundMax];
 		memset(_soundOverride, 0, _numSoundMax * sizeof(SoundOvrParameters));
-	}
+	}	
 
-	_eupLooping = false;
-
 	_driver = new TownsEuphonyDriver(mixer);
 }
 
@@ -248,23 +229,32 @@
 
 void Player_Towns_v1::startSound(int sound) {
 	uint8 *ptr = _vm->getResourceAddress(rtSound, sound);
-	if (_vm->_game.version != 3) {
+	if (_vm->_game.version != 3)
 		ptr += 2;
-	} else if (_soundOverride && sound > 0 && sound < _numSoundMax) {
-		memcpy(&_ovrCur, &_soundOverride[sound], sizeof(SoundOvrParameters));
-		memset(&_soundOverride[sound], 0, sizeof(SoundOvrParameters));
-	}
 
 	int type = ptr[13];
 
 	if (type == 0) {
-		playPcmTrack(sound, ptr + 6, 0, 64, 0, READ_LE_UINT16(ptr + 10));
+		uint8 velocity = 0;
+		uint8 note = 0;
+		
+		if (_vm->_game.version == 3) {
+			velocity = (_soundOverride[sound].vLeft + _soundOverride[sound].vRight);
+			note = _soundOverride[sound].note;
+		}
+
+		velocity = velocity ? velocity >> 2 : ptr[14] >> 1;		
+		playPcmTrack(sound, ptr + 6, velocity, 64, note ? note : ptr[50], READ_LE_UINT16(ptr + 10));
+
 	} else if (type == 1) {
 		playEuphonyTrack(sound, ptr + 6);
+
 	} else if (type == 2) {
 		playCdaTrack(sound, ptr + 6);
 	}
-	memset(&_ovrCur, 0, sizeof(SoundOvrParameters));
+
+	if (_vm->_game.version == 3)
+		_soundOverride[sound].vLeft = _soundOverride[sound].vRight = _soundOverride[sound].note = 0;
 }
 
 void Player_Towns_v1::stopSound(int sound) {
@@ -465,7 +455,7 @@
 
 		pan = pan ? (((pan << 7) - pan) + 50) / 100 : 64;
 
-		playPcmTrack(sound, ptr + 6, velo, pan, note, pri);
+		playPcmTrack(sound, ptr + 6, velo ? velo : ptr[14] >> 1, pan, note ? note : ptr[50], pri);
 
 	} else if (ptr[13] == 2) {
 		int volLeft = velo;
@@ -531,9 +521,9 @@
 		_driver->intf()->callback(4, i, i);
 	}
 
-	_eupVolLeft = _ovrCur.vLeft;
-	_eupVolRight = _ovrCur.vRight;
-	int lvl = _ovrCur.vLeft + _ovrCur.vRight;
+	_eupVolLeft = _soundOverride[sound].vLeft;
+	_eupVolRight = _soundOverride[sound].vRight;
+	int lvl = _soundOverride[sound].vLeft + _soundOverride[sound].vRight;
 	if (!lvl)
 		lvl = data[8] + data[9];
 	lvl >>= 2;
@@ -561,10 +551,14 @@
 		return;
 
 	if (!skipTrackVelo) {
-		if (_ovrCur.vLeft + _ovrCur.vRight)
-			setVolumeCD(_ovrCur.vLeft, _ovrCur.vRight);
-		else
+		if (_vm->_game.version == 3) {
+			if (_soundOverride[sound].vLeft + _soundOverride[sound].vRight)
+				setVolumeCD(_soundOverride[sound].vLeft, _soundOverride[sound].vRight);
+			else
+				setVolumeCD(ptr[8], ptr[9]);
+		} else {
 			setVolumeCD(ptr[8], ptr[9]);
+		}
 	}
 
 	if (sound == _cdaCurrentSound && _vm->_sound->pollCD() == 1)			
@@ -583,8 +577,8 @@
 }
 
 Player_Towns_v2::Player_Towns_v2(ScummEngine *vm, IMuse *imuse, Audio::Mixer *mixer, bool disposeIMuse) : Player_Towns(vm, true), _imuse(imuse), _imuseDispose(disposeIMuse) {
-	_soundOverride2 = new SoundOvrParameters2[_numSoundMax];
-	memset(_soundOverride2, 0, _numSoundMax * sizeof(SoundOvrParameters2));
+	_soundOverride = new SoundOvrParameters[_numSoundMax];
+	memset(_soundOverride, 0, _numSoundMax * sizeof(SoundOvrParameters));
 	_sblData = 0;
 	_intf = new TownsAudioInterface(mixer, 0);
 }
@@ -617,31 +611,37 @@
 }
 
 int Player_Towns_v2::getSoundStatus(int sound) const {
-	if (_soundOverride2[sound].type == 7)
+	if (_soundOverride[sound].type == 7)
 		return Player_Towns::getSoundStatus(sound);
 	return _imuse->getSoundStatus(sound);
 }
 
 void Player_Towns_v2::startSound(int sound) {
 	uint8 *ptr = _vm->getResourceAddress(rtSound, sound);
+
 	if (READ_BE_UINT32(ptr) == MKID_BE('TOWS')) {
-		_soundOverride2[sound].type = 7;
-		uint8 velo = _soundOverride2[sound].velo ? _soundOverride2[sound].velo - 1: (ptr[10] + ptr[11] + 1) >> 1;
-		uint8 pan = _soundOverride2[sound].pan ? _soundOverride2[sound].pan - 1 : 64;
+		_soundOverride[sound].type = 7;
+		uint8 velo = _soundOverride[sound].velo ? _soundOverride[sound].velo - 1: (ptr[10] + ptr[11] + 1) >> 1;
+		uint8 pan = _soundOverride[sound].pan ? _soundOverride[sound].pan - 1 : 64;
 		uint8 pri = ptr[9];
-		_soundOverride2[sound].velo = _soundOverride2[sound].pan = 0;
-		playPcmTrack(sound, ptr + 8, velo, pan, 0, pri);
+		_soundOverride[sound].velo = _soundOverride[sound].pan = 0;
+
+		playPcmTrack(sound, ptr + 8, velo, pan, ptr[52], pri);
+
 	} else if (READ_BE_UINT32(ptr) == MKID_BE('SBL ')) {
-		_soundOverride2[sound].type = 5;
-		playPcmTrackSBL(ptr + 27);
+		_soundOverride[sound].type = 5;
+
+		playVocTrack(ptr + 27);
+
 	} else {
-		_soundOverride2[sound].type = 3;
+		_soundOverride[sound].type = 3;
+
 		_imuse->startSound(sound);
 	}
 }
 
 void Player_Towns_v2::stopSound(int sound) {
-	if (_soundOverride2[sound].type == 7) {
+	if (_soundOverride[sound].type == 7) {
 		stopPcmTrack(sound);		
 	} else {
 		_imuse->stopSound(sound);
@@ -678,25 +678,25 @@
 		break;
 
 	case 258:
-		if (_soundOverride2[args[1]].type == 0) {
+		if (_soundOverride[args[1]].type == 0) {
 			ptr = _vm->getResourceAddress(rtSound, args[1]);
 			if (READ_BE_UINT32(ptr) == MKID_BE('TOWS')) 
-				_soundOverride2[args[1]].type = 7;
+				_soundOverride[args[1]].type = 7;
 		}
-		if (_soundOverride2[args[1]].type == 7)	{
-			_soundOverride2[args[1]].velo = args[2] + 1;
+		if (_soundOverride[args[1]].type == 7)	{
+			_soundOverride[args[1]].velo = args[2] + 1;
 			res = 0;
 		}
 		break;
 	
 	case 259:
-		if (_soundOverride2[args[1]].type == 0) {
+		if (_soundOverride[args[1]].type == 0) {
 			ptr = _vm->getResourceAddress(rtSound, args[1]);
 			if (READ_BE_UINT32(ptr) == MKID_BE('TOWS')) 
-				_soundOverride2[args[1]].type = 7;
+				_soundOverride[args[1]].type = 7;
 		}
-		if (_soundOverride2[args[1]].type == 7)	{
-			_soundOverride2[args[1]].pan = 64 - CLIP<int>(args[2], -63, 63);
+		if (_soundOverride[args[1]].type == 7)	{
+			_soundOverride[args[1]].pan = 64 - CLIP<int>(args[2], -63, 63);
 			res = 0;
 		}
 		break;
@@ -716,7 +716,7 @@
 		Player_Towns::saveLoadWithSerializer(ser);
 }
 
-void Player_Towns_v2::playPcmTrackSBL(const uint8 *data) {
+void Player_Towns_v2::playVocTrack(const uint8 *data) {
 	static const uint8 header[] = {
 		0x54, 0x61, 0x6C, 0x6B, 0x69, 0x65, 0x20, 0x20,
 		0x78, 0x56, 0x34, 0x12, 0x00, 0x00, 0x00, 0x00,

Modified: scummvm/trunk/engines/scumm/player_towns.h
===================================================================
--- scummvm/trunk/engines/scumm/player_towns.h	2010-10-09 01:21:06 UTC (rev 53094)
+++ scummvm/trunk/engines/scumm/player_towns.h	2010-10-09 01:36:38 UTC (rev 53095)
@@ -72,23 +72,6 @@
 		uint32 priority;
 	} _pcmCurrentSound[9];
 
-	struct SoundOvrParameters {
-		uint8 vLeft;
-		uint8 vRight;
-		uint8 note;
-	};
-
-	SoundOvrParameters *_soundOverride;
-	SoundOvrParameters _ovrCur;
-
-	struct SoundOvrParameters2 {
-		uint8 velo;
-		uint8 pan;
-		uint8 type;
-	};
-
-	SoundOvrParameters2 *_soundOverride2;
-
 	uint8 _unkFlags;
 
 	TownsAudioInterface *_intf;
@@ -133,6 +116,14 @@
 	void playEuphonyTrack(int sound, const uint8 *data);
 	void playCdaTrack(int sound, const uint8 *data, bool skipTrackVelo = false);
 
+	struct SoundOvrParameters {
+		uint8 vLeft;
+		uint8 vRight;
+		uint8 note;
+	};
+
+	SoundOvrParameters *_soundOverride;
+
 	uint8 _cdaVolLeft;
 	uint8 _cdaVolRight;
 	
@@ -170,8 +161,16 @@
 	void saveLoadWithSerializer(Serializer *ser);
 
 private:
-	void playPcmTrackSBL(const uint8 *data);
+	void playVocTrack(const uint8 *data);
 
+	struct SoundOvrParameters {
+		uint8 velo;
+		uint8 pan;
+		uint8 type;
+	};
+
+	SoundOvrParameters *_soundOverride;
+
 	uint8 *_sblData;
 	IMuse *_imuse;
 	const bool _imuseDispose;


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