[Scummvm-cvs-logs] CVS: scummvm/sound mixer.cpp,1.116,1.117 rate.cpp,1.26,1.27 rate.h,1.18,1.19

Pawel Kolodziejski aquadran at users.sourceforge.net
Tue Sep 2 13:35:03 CEST 2003


Update of /cvsroot/scummvm/scummvm/sound
In directory sc8-pr-cvs1:/tmp/cvs-serv3402

Modified Files:
	mixer.cpp rate.cpp rate.h 
Log Message:
moved volume and pan control into flow func

Index: mixer.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/mixer.cpp,v
retrieving revision 1.116
retrieving revision 1.117
diff -u -d -r1.116 -r1.117
--- mixer.cpp	2 Sep 2003 16:51:51 -0000	1.116
+++ mixer.cpp	2 Sep 2003 20:34:22 -0000	1.117
@@ -487,17 +487,6 @@
 	delete this;
 }
 
-static void changeVolumeAndPan(int16 *data, uint len, byte volume, int8 pan) {
-	byte volumeLeft = abs(pan - 128);
-	byte volumeRight = abs(pan + 128);
-	for (uint32 i = 0; i < len; i++) {
-		int16 sampleL = data[i * 2 + 0];
-		int16 sampleR = data[i * 2 + 1];
-		data[i * 2 + 0] = (sampleL * volume * volumeLeft) / (256 * 256);
-		data[i * 2 + 1] = (sampleR * volume * volumeRight) / (256 * 256);
-	}
-}
-
 /* len indicates the number of sample *pairs*. So a value of
    10 means that the buffer contains twice 10 sample, each
    16 bits, for a total of 40 bytes.
@@ -509,8 +498,7 @@
 		destroy();
 	} else {
 		assert(_converter);
-		_converter->flow(*_input, data, len, getVolume());
-		changeVolumeAndPan(data, len, _volume, _pan);
+		_converter->flow(*_input, data, len, getVolume(), _volume, _pan);
 	}
 }
 
@@ -586,8 +574,7 @@
 	}
 
 	assert(_converter);
-	_converter->flow(*_input, data, len, getVolume());
-	changeVolumeAndPan(data, len, _volume, _pan);
+	_converter->flow(*_input, data, len, getVolume(), _volume, _pan);
 }
 
 #ifdef USE_MAD

Index: rate.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/rate.cpp,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -d -r1.26 -r1.27
--- rate.cpp	6 Aug 2003 17:13:04 -0000	1.26
+++ rate.cpp	2 Sep 2003 20:34:22 -0000	1.27
@@ -80,7 +80,7 @@
 
 public:
 	LinearRateConverter(st_rate_t inrate, st_rate_t outrate);
-	int flow(AudioInputStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol);
+	int flow(AudioInputStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol, byte vol_p, int8 pan);
 	int drain(st_sample_t *obuf, st_size_t osamp, st_volume_t vol) {
 		return (ST_SUCCESS);
 	}
@@ -124,7 +124,7 @@
  * Return number of samples processed.
  */
 template<bool stereo, bool reverseStereo>
-int LinearRateConverter<stereo, reverseStereo>::flow(AudioInputStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol)
+int LinearRateConverter<stereo, reverseStereo>::flow(AudioInputStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol, byte vol_p, int8 pan)
 {
 	st_sample_t *ostart, *oend;
 	st_sample_t out[2], tmpOut;
@@ -170,6 +170,13 @@
 				out[reverseStereo ? 0 : 1] = (st_sample_t)((tmpOut * vol) >> 8);
 			}
 	
+			byte pan_l = abs(pan - 128);
+			byte pan_r = abs(pan + 128);
+			out[0] = (st_sample_t)((out[0] * vol_p) >> 8);
+			out[1] = (st_sample_t)((out[1] * vol_p) >> 8);
+			out[0] = (st_sample_t)((out[0] * pan_l) >> 8);
+			out[1] = (st_sample_t)((out[1] * pan_r) >> 8);
+
 			// output left channel
 			clampedAdd(*obuf++, out[0]);
 	
@@ -201,7 +208,7 @@
 template<bool stereo, bool reverseStereo>
 class CopyRateConverter : public RateConverter {
 public:
-	virtual int flow(AudioInputStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol) {
+	virtual int flow(AudioInputStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol, byte vol_p, int8 pan) {
 		int16 tmp[2];
 		st_size_t len = osamp;
 		assert(input.isStereo() == stereo);
@@ -209,6 +216,12 @@
 			tmp[0] = tmp[1] = (input.read() * vol) >> 8;
 			if (stereo)
 				tmp[reverseStereo ? 0 : 1] = (input.read() * vol) >> 8;
+			byte pan_l = abs(pan - 128);
+			byte pan_r = abs(pan + 128);
+			tmp[0] = ((tmp[0] * vol_p) >> 8);
+			tmp[1] = ((tmp[1] * vol_p) >> 8);
+			tmp[0] = ((tmp[0] * pan_l) >> 8);
+			tmp[1] = ((tmp[1] * pan_r) >> 8);
 			clampedAdd(*obuf++, tmp[0]);
 			clampedAdd(*obuf++, tmp[1]);
 		}

Index: rate.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/rate.h,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- rate.h	6 Aug 2003 17:13:04 -0000	1.18
+++ rate.h	2 Sep 2003 20:34:22 -0000	1.19
@@ -62,7 +62,7 @@
 public:
 	RateConverter() {}
 	virtual ~RateConverter() {}
-	virtual int flow(AudioInputStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol) = 0;
+	virtual int flow(AudioInputStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol, byte vol_p, int8 pan) = 0;
 	virtual int drain(st_sample_t *obuf, st_size_t osamp, st_volume_t vol) = 0;
 };
 





More information about the Scummvm-git-logs mailing list