[Scummvm-cvs-logs] SF.net SVN: scummvm: [26065] scummvm/trunk/engines/sky/music

eriktorbjorn at users.sourceforge.net eriktorbjorn at users.sourceforge.net
Sat Mar 10 18:39:29 CET 2007


Revision: 26065
          http://scummvm.svn.sourceforge.net/scummvm/?rev=26065&view=rev
Author:   eriktorbjorn
Date:     2007-03-10 09:39:27 -0800 (Sat, 10 Mar 2007)

Log Message:
-----------
Let the mixer worry about converting mono to stereo.

Modified Paths:
--------------
    scummvm/trunk/engines/sky/music/adlibmusic.cpp
    scummvm/trunk/engines/sky/music/adlibmusic.h

Modified: scummvm/trunk/engines/sky/music/adlibmusic.cpp
===================================================================
--- scummvm/trunk/engines/sky/music/adlibmusic.cpp	2007-03-10 15:27:27 UTC (rev 26064)
+++ scummvm/trunk/engines/sky/music/adlibmusic.cpp	2007-03-10 17:39:27 UTC (rev 26065)
@@ -47,38 +47,33 @@
 	_mixer->stopHandle(_soundHandle);
 }
 
-void AdlibMusic::premixerCall(int16 *data, uint len) {
+int AdlibMusic::readBuffer(int16 *data, const int numSamples) {
 
 	if (_musicData == NULL) {
 		// no music loaded
-		memset(data, 0, 2 * len * sizeof(int16));
+		memset(data, 0, numSamples * sizeof(int16));
 	} else if ((_currentMusic == 0) || (_numberOfChannels == 0)) {
 		// music loaded but not played as of yet
-		memset(data, 0, 2 * len * sizeof(int16));
+		memset(data, 0, numSamples * sizeof(int16));
 		// poll anyways as pollMusic() can activate the music
 		pollMusic();
-		_nextMusicPoll = _sampleRate/50;
+		_nextMusicPoll = _sampleRate / 50;
 	} else {
 		uint32 render;
-		int16 *origData = data;
-		uint origLen = len;
-		while (len) {
-			render = (len > _nextMusicPoll) ? (_nextMusicPoll) : (len);
-			len -= render;
+		int remaining = numSamples;
+		while (remaining) {
+			render = (remaining > _nextMusicPoll) ? (_nextMusicPoll) : (remaining);
+			remaining -= render;
 			_nextMusicPoll -= render;
 			YM3812UpdateOne(_opl, data, render);
 			data += render;
 			if (_nextMusicPoll == 0) {
 				pollMusic();
-				_nextMusicPoll = _sampleRate/50;
+				_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];
-		}
 	}
+	return numSamples;
 }
 
 void AdlibMusic::setupPointers(void) {

Modified: scummvm/trunk/engines/sky/music/adlibmusic.h
===================================================================
--- scummvm/trunk/engines/sky/music/adlibmusic.h	2007-03-10 15:27:27 UTC (rev 26064)
+++ scummvm/trunk/engines/sky/music/adlibmusic.h	2007-03-10 17:39:27 UTC (rev 26065)
@@ -36,11 +36,8 @@
 	~AdlibMusic(void);
 
 	// AudioStream API
-	int readBuffer(int16 *buffer, const int numSamples) {
-		premixerCall(buffer, numSamples / 2);
-		return numSamples;
-	}
-	bool isStereo() const { return true; }
+	int readBuffer(int16 *buffer, const int numSamples);
+	bool isStereo() const { return false; }
 	bool endOfData() const { return false; }
 	int getRate() const { return _sampleRate; }
 


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