[Scummvm-cvs-logs] CVS: scummvm/sky/music adlibmusic.cpp,1.11,1.12

Max Horn fingolfin at users.sourceforge.net
Thu Sep 18 09:03:02 CEST 2003


Update of /cvsroot/scummvm/scummvm/sky/music
In directory sc8-pr-cvs1:/tmp/cvs-serv24117/sky/music

Modified Files:
	adlibmusic.cpp 
Log Message:
changed & documented the premixer semantics

Index: adlibmusic.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/music/adlibmusic.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- adlibmusic.cpp	6 Aug 2003 00:28:00 -0000	1.11
+++ adlibmusic.cpp	18 Sep 2003 16:01:32 -0000	1.12
@@ -39,7 +39,7 @@
 	OPLBuildTables((env_bits ? env_bits : FMOPL_ENV_BITS_HQ), (eg_ent ? eg_ent : FMOPL_EG_ENT_HQ));
 	_opl = OPLCreate(OPL_TYPE_YM3812, 3579545, _sampleRate);
   
-	_mixer->setupPremix(this, passMixerFunc);
+	_mixer->setupPremix(passMixerFunc, this);
 }
 
 SkyAdlibMusic::~SkyAdlibMusic(void) {
@@ -55,30 +55,36 @@
 		_channels[cnt]->updateVolume(volume | 128);
 }
 
-void SkyAdlibMusic::premixerCall(int16 *buf, uint len) {
+void SkyAdlibMusic::premixerCall(int16 *data, uint len) {
 
 	if (_musicData == NULL) {
 		// no music loaded
-		memset(buf, 0, len * sizeof(int16));
-		return;
+		memset(data, 0, 2 * len * sizeof(int16));
 	} else if ((_currentMusic == 0) || (_numberOfChannels == 0)) {
 		// music loaded but not played as of yet
-		memset(buf, 0, len * sizeof(int16));
+		memset(data, 0, 2 * len * sizeof(int16));
 		// poll anyways as pollMusic() can activate the music
 		pollMusic();
 		_nextMusicPoll = _sampleRate/50;
-		return;
-	}
-	uint32 render;
-	while (len) {
-		render = (len > _nextMusicPoll) ? (_nextMusicPoll) : (len);
-		len -= render;
-		_nextMusicPoll -= render;
-		YM3812UpdateOne (_opl, buf, render);
-		buf += render;
-		if (_nextMusicPoll == 0) {
-			pollMusic();
-			_nextMusicPoll = _sampleRate/50;
+	} else {
+		uint32 render;
+		int16 *origData = data;
+		uint origLen = len;
+		while (len) {
+			render = (len > _nextMusicPoll) ? (_nextMusicPoll) : (len);
+			len -= render;
+			_nextMusicPoll -= render;
+			YM3812UpdateOne(_opl, data, render);
+			data += render;
+			if (_nextMusicPoll == 0) {
+				pollMusic();
+				_nextMusicPoll = _sampleRate/50;
+			}
+		}
+	
+		// Convert mono data to stereo
+		for (int i = (origLen - 1); i >= 0; i--) {
+			origData[2 * i] = origData[2 * i + 1] = origData[i];
 		}
 	}
 }





More information about the Scummvm-git-logs mailing list