[Scummvm-cvs-logs] CVS: scummvm/queen music.cpp,1.7,1.8 music.h,1.5,1.6 sound.cpp,1.30,1.31

Joost Peters joostp at users.sourceforge.net
Mon Jan 19 15:55:03 CET 2004


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

Modified Files:
	music.cpp music.h sound.cpp 
Log Message:
- Enable music queueing (I don't really like the levels of indirection, but it'll do for now)
- Handle special music type '2000' (restart previously queued music)


Index: music.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/music.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- music.cpp	19 Jan 2004 21:23:42 -0000	1.7
+++ music.cpp	19 Jan 2004 23:54:50 -0000	1.8
@@ -30,6 +30,7 @@
 
 	MusicPlayer::MusicPlayer(MidiDriver *driver, byte *data, uint32 size) : _driver(driver), _isPlaying(false), _looping(false), _volume(255), _queuePos(0), _musicData(data), _musicDataSize(size) {
 		queueClear();
+		_lastSong = 0;
 		_parser = MidiParser::createParser_SMF();
 		_parser->setMidiDriver(this);
 		_parser->setTimerRate(_driver->getBaseTempo());
@@ -59,6 +60,7 @@
 	}
 	
 	void MusicPlayer::queueClear() {
+		_lastSong = _songQueue[0];
 		_queuePos = 0;
 		memset(_songQueue, 0, sizeof(_songQueue));
 	}
@@ -130,6 +132,15 @@
 		}
 		
 		uint16 songNum = _songQueue[_queuePos];
+
+		//Special type
+		//2000: (songNum + 1) - repeat music from previous queue
+		if (songNum == 1999) {
+			songNum = _lastSong;
+			queueClear();
+			queueSong(songNum);
+		}
+		
 		_parser->loadMusic(_musicData + songOffset(songNum), songLength(songNum));
 		_parser->setTrack(0);	
 		//debug(0, "Playing song %d [queue position: %d]", songNum, _queuePos);
@@ -178,6 +189,15 @@
 		delete[] _musicData;	
 	}
 
+	bool Music::queueSong(uint16 songNum) {
+		// Work around bug in Roland music, note that these numbers are 'one-off'
+		// from the original code
+		if (/*isRoland && */ songNum == 88 || songNum == 89)
+			songNum = 62;
+			
+		return _player->queueSong(songNum);
+	}
+	
 	void Music::playSong(uint16 songNum) {
 		_player->queueClear();
 		_player->queueSong(songNum);

Index: music.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/music.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- music.h	19 Jan 2004 21:23:42 -0000	1.5
+++ music.h	19 Jan 2004 23:54:50 -0000	1.6
@@ -76,6 +76,7 @@
 	bool _looping;
 	byte _volume;
 	uint8 _queuePos;
+	int16 _lastSong;	//first song from previous queue
 	int16 _songQueue[MUSIC_QUEUE_SIZE];
 	
 	uint16 _numSongs;
@@ -88,8 +89,11 @@
 	Music(MidiDriver *_driver, QueenEngine *vm);
 	~Music();
 	void playSong(uint16 songNum);
+	void queueClear()		{ return _player->queueClear(); }
+	bool queueSong(uint16 songNum);	
+	void playMusic()		{ return _player->playMusic(); }
 	void stopSong();
-	void loop(bool val)	{ return _player->setLoop(val); }
+	void loop(bool val)		{ return _player->setLoop(val); }
 	
 protected:
 	byte *_musicData;

Index: sound.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/sound.cpp,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -d -r1.30 -r1.31
--- sound.cpp	12 Jan 2004 13:40:01 -0000	1.30
+++ sound.cpp	19 Jan 2004 23:54:50 -0000	1.31
@@ -138,16 +138,11 @@
 			break;
 	}
 
-	int16 song = _tune[newTune].tuneNum[0] - 1;
-
-	// Work around bug in Roland music, note that these numbers are 'one-off' from
-	// the original code.
-	if (/*isRoland && */ song == 88 || song == 89) {
-		warning("Working around Roland music bug");
-		song = 62;
-	}
-	
-	_vm->music()->playSong(song);
+	_vm->music()->queueClear();
+	int i = 0;
+	while(_tune[newTune].tuneNum[i])
+		_vm->music()->queueSong(_tune[newTune].tuneNum[i++] - 1);
+	_vm->music()->playMusic();	
 }
 
 void Sound::saveState(byte *&ptr) {





More information about the Scummvm-git-logs mailing list