[Scummvm-cvs-logs] CVS: scummvm/sound mixer.cpp,1.41,1.42

Max Horn fingolfin at users.sourceforge.net
Sun Jul 28 13:47:02 CEST 2002


Update of /cvsroot/scummvm/scummvm/sound
In directory usw-pr-cvs1:/tmp/cvs-serv5628

Modified Files:
	mixer.cpp 
Log Message:
fixed volume table (that was a neat trick, that int8 cast, really got me; but I prefer readability over the 5 ns time saved <g>)

Index: mixer.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/mixer.cpp,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -d -r1.41 -r1.42
--- mixer.cpp	28 Jul 2002 15:03:45 -0000	1.41
+++ mixer.cpp	28 Jul 2002 20:46:07 -0000	1.42
@@ -201,8 +201,12 @@
 	else if (volume < 0)
 		volume = 0;
 
-	for (int i = 0; i < 256; i++)
-		_volume_table[i] = (i + 1) * volume - 1;
+	// The volume table takes 8 bit unsigned data as index and returns 16 bit signed
+	for (int i = 0; i < 128; i++)
+		_volume_table[i] = i * volume ;
+
+	for (int i = -128; i < 0; i++)
+		_volume_table[i+256] = i * volume ;
 }
 
 void SoundMixer::set_music_volume(int volume)
@@ -317,11 +321,11 @@
 {
 	int val = a + b;
 
-	if (val > 32767)
+	if (val > 32767) {
 		return 32767;
-	else if (val < -32768)
+	} else if (val < -32768) {
 		return -32768;
-	else
+	} else
 		return val;
 }
 
@@ -454,9 +458,8 @@
 static int16 *mix_signed_mono_16(int16 *data, uint * len_ptr, byte **s_ptr, uint32 *fp_pos_ptr,
 																 int fp_speed, const int16 *vol_tab, byte *s_end)
 {
-	printf("mix_signed_mono_16\n");
 	uint32 fp_pos = *fp_pos_ptr;
-	unsigned char volume = ((int)vol_tab[1]) * 32 / 255;
+	unsigned char volume = ((int)vol_tab[1]) / 8;
 	byte *s = *s_ptr;
 	uint len = *len_ptr;
 	do {
@@ -488,9 +491,8 @@
 static int16 *mix_signed_stereo_16(int16 *data, uint * len_ptr, byte **s_ptr, uint32 *fp_pos_ptr,
 																	 int fp_speed, const int16 *vol_tab, byte *s_end)
 {
-	printf("mix_signed_stereo_16\n");
 	uint32 fp_pos = *fp_pos_ptr;
-	unsigned char volume = ((int)vol_tab[1]) * 32 / 255;
+	unsigned char volume = ((int)vol_tab[1]) / 8;
 	byte *s = *s_ptr;
 	uint len = *len_ptr;
 	do {
@@ -736,7 +738,8 @@
 {
 	mad_fixed_t const *ch;
 	const int16 *vol_tab = _mixer->_volume_table;
-	unsigned char volume = ((int)vol_tab[1]) * 32 / 255;
+//	unsigned char volume = ((int)vol_tab[1]) * 32 / 255;
+	unsigned char volume = ((int)vol_tab[1]) / 8;
 
 	if (_to_be_destroyed) {
 		real_destroy();
@@ -831,7 +834,7 @@
 	mad_fixed_t const *ch;
 	mad_timer_t frame_duration;
 //	unsigned char volume = _mixer->_music_volume * 32 / 255;
-	unsigned char volume = _mixer->_music_volume >> 3;
+	unsigned char volume = _mixer->_music_volume / 8;
 
 	if (_to_be_destroyed) {
 		real_destroy();





More information about the Scummvm-git-logs mailing list