[Scummvm-cvs-logs] CVS: scummvm/queen music.cpp,1.17,1.18 music.h,1.11,1.12 musicdata.cpp,1.8,1.9

Joost Peters joostp at users.sourceforge.net
Thu Feb 26 18:25:01 CET 2004


Update of /cvsroot/scummvm/scummvm/queen
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29064/queen

Modified Files:
	music.cpp music.h musicdata.cpp 
Log Message:
Handle "compressed" songs


Index: music.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/music.cpp,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- music.cpp	14 Feb 2004 00:37:44 -0000	1.17
+++ music.cpp	27 Feb 2004 02:08:44 -0000	1.18
@@ -205,10 +205,6 @@
 			return;
 		}
 	
-		//Don't play if the queue doesn't have any valid songs
-		if (!validSongs())
-			return;
-		
 		uint16 songNum = _songQueue[_queuePos];
 
 		//Special type
@@ -226,12 +222,38 @@
 			}
 		}
 
-		_currentSong = songNum = isBadSong(songNum) ? nextValidSong() : songNum;
+		byte *prevSong = _musicData + songOffset(_currentSong);
+		if (*prevSong == 0x43 || *prevSong == 0x63) {
+			if (_buf) {
+				delete[] _buf;
+				_buf = 0;
+			}
+		}
+		
+		_currentSong = songNum;
 		if (!songNum) {
 			stopMusic();
 			return;
 		}	
-		_parser->loadMusic(_musicData + songOffset(songNum), songLength(songNum));
+
+		byte *musicPtr = _musicData + songOffset(songNum);
+		uint32 size = songLength(songNum);
+
+		if (*musicPtr == 0x43 || *musicPtr == 0x63) {
+			uint32 packedSize = songLength(songNum) - 0x200;
+			_buf = new uint16[packedSize];
+
+			uint16 *data = (uint16 *)(musicPtr + 1);
+			byte *idx  = ((byte *)data) + 0x200;
+
+			for (uint i = 0; i < packedSize; i++)
+				_buf[i] = data[*(idx + i)];
+
+			musicPtr = ((byte *)_buf) + ((*musicPtr == 0x63) ? 1 : 0);
+			size = packedSize * 2;
+		}
+		
+		_parser->loadMusic(musicPtr, size);
 		_parser->setTrack(0);	
 		//debug(0, "Playing song %d [queue position: %d]", songNum, _queuePos);
 		_isPlaying = true;
@@ -262,61 +284,6 @@
 		return (uint8) _rnd.getRandomNumber(queueSize - 1) & 0xFF;
 	}
 	
-	bool MusicPlayer::isBadSong(uint16 songNum) const {
-		//Songs which are (apparently?) bogus
-		//Atleast they don't contain a valid MThd/MTrk
-		switch(songNum) {
-			case  50:
-			case  51:
-			case  53:
-			case  80:
-			case 176:
-				return true;
-				break;
-			default:
-				return false;
-				break;
-		}
-	}
-
-	uint8  MusicPlayer::validSongs() const {
-		uint8 valid = 0;
-		for (int i = 0; i < MUSIC_QUEUE_SIZE; i++)
-			if (_songQueue[i] && !isBadSong(_songQueue[i]))
-					valid++;
-
-		return valid;
-	}
-
-	uint16 MusicPlayer::nextValidSong() {
-		int i;
-
-		if (_randomLoop && validSongs() > 1) {
-			uint8 pos = randomQueuePos(); 
-			while(isBadSong(_songQueue[pos]))
-				pos = randomQueuePos(); 
-			_queuePos = pos;
-			return _songQueue[pos];
-		}
-	
-		if (!_looping && validSongs() < 2)
-			return 0;
-		
-		for (i = _queuePos + 1; i < MUSIC_QUEUE_SIZE; i++)  
-			if (_songQueue[i] && !isBadSong(_songQueue[i])) {
-				_queuePos = i;
-				return _songQueue[i];
-			}
-
-		for (i = 0; i < _queuePos; i++) 
-			if (_songQueue[i] && !isBadSong(_songQueue[i])) {
-				_queuePos = i;
-				return _songQueue[i];	
-			}
-		
-		return 0;
-	}
-
 	void MusicPlayer::stopMusic() {
 		_isPlaying = false;
 		_parser->unloadMusic();

Index: music.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/music.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- music.h	27 Jan 2004 23:05:02 -0000	1.11
+++ music.h	27 Feb 2004 02:08:44 -0000	1.12
@@ -67,9 +67,6 @@
 	void queueUpdatePos();
 	uint8 randomQueuePos();
 	static void onTimer(void *data);
-	bool isBadSong(uint16 songNum) const;
-	uint8 validSongs() const;
-	uint16 nextValidSong();
 	uint32 songOffset(uint16 songNum) const;
 	uint32 songLength(uint16 songNum) const;
 
@@ -92,6 +89,7 @@
 	
 	uint16 _numSongs;
 	byte *_musicData;
+	uint16 *_buf;
 	uint32 _musicDataSize;
 };
 	

Index: musicdata.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/musicdata.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- musicdata.cpp	25 Jan 2004 18:41:26 -0000	1.8
+++ musicdata.cpp	27 Feb 2004 02:08:44 -0000	1.9
@@ -974,10 +974,7 @@
 	{ { 67, 177, 0 }, { 0, 0 }, 2, 0 }, 
 
 	/* 40 - Airport */
-	//{ { 81, 0 }, { 0, 0 }, 1, 0 },	//This is the value from the original sources
-						//However it points to invalid music (atleast for
-						//Roland music data)...how odd. 
-	{ { 83, 0 }, { 0, 0 }, 1, 0 },
+	{ { 81, 0 }, { 0, 0 }, 1, 0 },
 	
 	/* 41 - Plane Leaves */
 	{ { 68, 1198, 0 }, { 0, 0 }, 2, 0 }, 





More information about the Scummvm-git-logs mailing list