[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