[Scummvm-cvs-logs] CVS: scummvm/sky/music gmmusic.cpp,1.19,1.20 gmmusic.h,1.11,1.12 mt32music.cpp,1.19,1.20 mt32music.h,1.9,1.10

Robert Göffringmann lavosspawn at users.sourceforge.net
Thu Oct 21 22:40:08 CEST 2004


Update of /cvsroot/scummvm/scummvm/sky/music
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13359/sky/music

Modified Files:
	gmmusic.cpp gmmusic.h mt32music.cpp mt32music.h 
Log Message:
changed timing code.

Index: gmmusic.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/music/gmmusic.cpp,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- gmmusic.cpp	11 Feb 2004 18:01:26 -0000	1.19
+++ gmmusic.cpp	22 Oct 2004 05:34:18 -0000	1.20
@@ -38,11 +38,10 @@
 	_driverFileBase = 60200;
 	_midiDrv = pMidiDrv;
 	int midiRes = _midiDrv->open();
-	if (midiRes != 0) {
+	if (midiRes != 0)
 		error("Can't open midi device. Errorcode: %d", midiRes);
-	}
+	_timerCount = 0;
 	_midiDrv->setTimerCallback(this, passTimerFunc);
-	_ignoreNextPoll = false;
 }
 
 GmMusic::~GmMusic(void) {
@@ -62,13 +61,13 @@
 }
 
 void GmMusic::timerCall(void) {
-
-	// midi driver polls hundred times per sec. We only want 50 times.
-	_ignoreNextPoll = !_ignoreNextPoll;
-	if (!_ignoreNextPoll) return;
-
-	if (_musicData != NULL)
-		pollMusic();
+	_timerCount += _midiDrv->getBaseTempo();
+	if (_timerCount > (1000000 / 50)) {
+		// call pollMusic() 50 times per second
+		_timerCount -= 1000000 / 50;
+		if (_musicData != NULL)
+			pollMusic();
+	}
 }
 
 void GmMusic::setupPointers(void) {

Index: gmmusic.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/music/gmmusic.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- gmmusic.h	6 Jan 2004 12:45:33 -0000	1.11
+++ gmmusic.h	22 Oct 2004 05:34:18 -0000	1.12
@@ -37,7 +37,7 @@
 	static void passTimerFunc(void *param);
 	void timerCall(void);
 
-	bool _ignoreNextPoll;
+	uint32 _timerCount;
 	uint8 *_sysExSequence;
 	MidiDriver *_midiDrv;
 	static byte _mt32_to_gm[128];

Index: mt32music.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/music/mt32music.cpp,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- mt32music.cpp	28 Sep 2004 20:19:32 -0000	1.19
+++ mt32music.cpp	22 Oct 2004 05:34:18 -0000	1.20
@@ -37,13 +37,12 @@
 	_driverFileBase = 60200;
 	_midiDrv = pMidiDrv;
 	int midiRes = _midiDrv->open();
-	if (midiRes != 0) {
+	if (midiRes != 0)
 		error("Can't open midi device. Errorcode: %d",midiRes);
-	}
-	_midiDrv->setTimerCallback(this, passTimerFunc);
-	_ignoreNextPoll = false;
 	for (uint8 cnt = 0; cnt < 128; cnt++)
 		_dummyMap[cnt] = cnt;
+	_timerCount = 0;
+	_midiDrv->setTimerCallback(this, passTimerFunc);
 }
 
 MT32Music::~MT32Music(void) {
@@ -54,13 +53,13 @@
 }
 
 void MT32Music::timerCall(void) {
-
-	// midi driver polls hundred times per sec. We only want 50 times.
-	_ignoreNextPoll = !_ignoreNextPoll;
-	if (!_ignoreNextPoll) return;
-
-	if (_musicData != NULL)
-		pollMusic();
+	_timerCount += _midiDrv->getBaseTempo();
+	if (_timerCount > (1000000 / 50)) {
+		// call pollMusic() 50 times per second
+		_timerCount -= 1000000 / 50;
+		if (_musicData != NULL)
+			pollMusic();
+	}
 }
 
 void MT32Music::setVolume(uint8 volume) {
@@ -87,6 +86,7 @@
 	for (uint8 cnt = 0; cnt < _numberOfChannels; cnt++) {
 		uint16 chDataStart = ((channelData[(cnt << 1) | 1] << 8) | channelData[cnt << 1]) + _musicDataLoc;
 		_channels[cnt] = new GmChannel(_musicData, chDataStart, _midiDrv, _dummyMap, _dummyMap);
+		_channels[cnt]->updateVolume(_musicVolume);
 	}
 }
 

Index: mt32music.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/music/mt32music.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- mt32music.h	6 Jan 2004 12:45:33 -0000	1.9
+++ mt32music.h	22 Oct 2004 05:34:18 -0000	1.10
@@ -38,7 +38,7 @@
 	bool processPatchSysEx(uint8 *sysExData);
 	virtual void setVolume(uint8 volume);
 
-	bool _ignoreNextPoll;
+	uint32 _timerCount;
 	uint8 *_sysExSequence;
 	MidiDriver *_midiDrv;
 	uint8 _dummyMap[128];





More information about the Scummvm-git-logs mailing list