[Scummvm-cvs-logs] CVS: scummvm/queen music.cpp,1.2,1.3 music.h,1.2,1.3

Joost Peters joostp at users.sourceforge.net
Sat Dec 27 21:25:10 CET 2003


Update of /cvsroot/scummvm/scummvm/queen
In directory sc8-pr-cvs1:/tmp/cvs-serv7363/queen

Modified Files:
	music.cpp music.h 
Log Message:
Improved music code a bit. still has 'hanging notes' when stopping music, though.


Index: music.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/music.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- music.cpp	28 Dec 2003 01:17:29 -0000	1.2
+++ music.cpp	28 Dec 2003 03:31:05 -0000	1.3
@@ -29,26 +29,23 @@
 
 namespace Queen {
 
-	Music::Music(MidiDriver *driver, QueenEngine *vm) : _loop(false), _driver(driver) {
+	Music::Music(MidiDriver *driver, QueenEngine *vm) : _isPlaying(false), _loop(false), _driver(driver) {
 		_midi = MidiParser::createParser_SMF();
 		_midi->setMidiDriver(_driver);
 		int ret = _driver->open();
 		if (ret)
 			warning("MIDI Player init failed: \"%s\"", _driver->getErrorName(ret));
 		_midi->setTimerRate(_driver->getBaseTempo());
-		_driver->setTimerCallback((void *)_midi, _midi->timerCallback);
-					
+		_driver->setTimerCallback(this, myTimerProc);			
+		
 		_musicData = vm->resource()->loadFile("AQ.RL", 0, NULL);
 		_musicDataSize = vm->resource()->fileSize("AQ.RL");
 		_numSongs = READ_LE_UINT16(_musicData);
 	}
 
 	Music::~Music() {
-		stopSong();
+		_driver->setTimerCallback(NULL, NULL);
 		_midi->unloadMusic();
-		// Send All Notes Off
-		for (int i = 0; i < 16; ++i)
-			_driver->send((123 << 8) | 0xB0 | i);
 		_driver->close();
 		delete _midi;
 		delete[] _musicData;	
@@ -60,13 +57,19 @@
 		else
 			_midi->property(MidiParser::mpAutoLoop, 0);
 		
+		_isPlaying = true;
 		_midi->loadMusic(_musicData + songOffset(songNum), songLength(songNum));
 		_midi->setTrack(0);		
-		_driver->setTimerCallback((void *)_midi, _midi->timerCallback);
 	}
 
 	void Music::stopSong() {
-		_driver->setTimerCallback(NULL, NULL);
+		_isPlaying = false;
+	}
+
+	void Music::myTimerProc(void *refCon) {
+		Music *music = (Music *)refCon;
+		if (music->_isPlaying)
+			music->_midi->onTimer();
 	}
 	
 	uint32 Music::songOffset(uint16 songNum) {

Index: music.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/music.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- music.h	14 Dec 2003 01:04:07 -0000	1.2
+++ music.h	28 Dec 2003 03:31:05 -0000	1.3
@@ -40,13 +40,15 @@
 	void loop(bool val)	{ _loop = val; }
 	
 protected:
+	bool _isPlaying;
 	bool _loop;
 	byte *_musicData;
 	uint16 _numSongs;
 	uint32 _musicDataSize;
 	MidiDriver *_driver;
 	MidiParser *_midi;
-	
+
+	static void myTimerProc(void *refCon);	
 	uint32 songOffset(uint16 songNum);
 	uint32 songLength(uint16 songNum);
 };





More information about the Scummvm-git-logs mailing list