[Scummvm-cvs-logs] CVS: scummvm/scumm bundle.cpp,1.6,1.7 bundle.h,1.3,1.4 imuse.cpp,2.10,2.11 sound.cpp,1.57,1.58
James Brown
ender at users.sourceforge.net
Fri Dec 27 03:48:01 CET 2002
Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv31421/scumm
Modified Files:
bundle.cpp bundle.h imuse.cpp sound.cpp
Log Message:
Add skeleton music support for CMI (but codec not implemented)
Index: bundle.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/bundle.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- bundle.cpp 21 Oct 2002 13:23:24 -0000 1.6
+++ bundle.cpp 27 Dec 2002 11:47:00 -0000 1.7
@@ -221,7 +221,7 @@
return final_size;
}
-int32 Bundle::decompressMusicSampleByName(char *name, int32 number, byte *comp_final) {
+int32 Bundle::decompressMusicSampleByName(char *name, int32 number, byte *comp_final, bool fuzzy=false) {
int32 final_size = 0, i;
if (!name) {
@@ -235,11 +235,18 @@
}
for (i = 0; i < _numMusicFiles; i++) {
- if (!scumm_stricmp(name, _bundleMusicTable[i].filename)) {
- final_size = decompressMusicSampleByIndex(i, number, comp_final);
- return final_size;
- }
+ if (fuzzy) // Fuzzy matching, only look at the first part of the song
+ if (strstr(_bundleMusicTable[i].filename, name) == _bundleMusicTable[i].filename) {
+ final_size = decompressMusicSampleByIndex(i, number, comp_final);
+ return final_size;
+ }
+ else
+ if (!scumm_stricmp(name, _bundleMusicTable[i].filename)) {
+ final_size = decompressMusicSampleByIndex(i, number, comp_final);
+ return final_size;
+ }
}
+ printf("Couldn't find sample %s\n", name);
return final_size;
}
@@ -254,7 +261,7 @@
return _musicFile.readUint32BE();
}
-int32 Bundle::getNumberOfMusicSamplesByName(char *name) {
+int32 Bundle::getNumberOfMusicSamplesByName(char *name, bool fuzzy = false) {
int32 number = 0, i;
if (_musicFile.isOpen() == false) {
@@ -263,11 +270,19 @@
}
for (i = 0; i < _numMusicFiles; i++) {
- if (!scumm_stricmp(name, _bundleMusicTable[i].filename)) {
- number = getNumberOfMusicSamplesByIndex(i);
- return number;
- }
+ if (fuzzy) // Fuzzy matching, only look at the first part of the song
+ if (strstr(_bundleMusicTable[i].filename, name) == _bundleMusicTable[i].filename) {
+ number = getNumberOfMusicSamplesByIndex(i);
+ return number;
+ }
+ else
+ if (!scumm_stricmp(name, _bundleMusicTable[i].filename)) {
+ number = getNumberOfMusicSamplesByIndex(i);
+ return number;
+ }
+
}
+ printf("Couldn't find numsample %s\n", name);
return number;
}
Index: bundle.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/bundle.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- bundle.h 15 Sep 2002 19:28:34 -0000 1.3
+++ bundle.h 27 Dec 2002 11:47:00 -0000 1.4
@@ -60,10 +60,10 @@
bool openMusicFile(const char *filename, const char *directory);
int32 decompressVoiceSampleByName(char *name, byte *comp_final);
int32 decompressVoiceSampleByIndex(int32 index, byte *comp_final);
- int32 decompressMusicSampleByName(char *name, int32 number, byte *comp_final);
+ int32 decompressMusicSampleByName(char *name, int32 number, byte *comp_final, bool fuzzy=false);
int32 decompressMusicSampleByIndex(int32 index, int32 number, byte *comp_final);
int32 getNumberOfMusicSamplesByIndex(int32 index);
- int32 getNumberOfMusicSamplesByName(char *name);
+ int32 getNumberOfMusicSamplesByName(char *name, bool fuzzy=false);
};
#endif
Index: imuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse.cpp,v
retrieving revision 2.10
retrieving revision 2.11
diff -u -d -r2.10 -r2.11
--- imuse.cpp 25 Dec 2002 12:34:50 -0000 2.10
+++ imuse.cpp 27 Dec 2002 11:47:00 -0000 2.11
@@ -4580,7 +4580,12 @@
switch (cmd) {
case 0: // play music (state)
debug(2, "IMuseDigital::doCommand 0x1000 (%d)", b);
- if (_scumm->_gameId == GID_DIG) {
+ if (_scumm->_gameId == GID_CMI) {
+ char musicName[255];
+ sprintf(musicName, "%d-", b);
+ _scumm->_sound->playBundleMusic(strdup(musicName));
+ return 0;
+ } else if (_scumm->_gameId == GID_DIG) {
for(l = 0;; l++) {
if (_digStateMusicMap[l].room == -1) {
return 1;
Index: sound.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sound.cpp,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -d -r1.57 -r1.58
--- sound.cpp 26 Dec 2002 22:02:58 -0000 1.57
+++ sound.cpp 27 Dec 2002 11:47:00 -0000 1.58
@@ -961,10 +961,14 @@
if (_nameBundleMusic == NULL) {
// FIXME: we have MUSDISK1.BUN and MUSDISK2.BUN in COMI.
- if (_scumm->_bundle->openMusicFile("digmusic.bun", _scumm->getGameDataPath()) == false) {
- return;
+ if (_scumm->_gameId == GID_CMI) {
+ printf("Opening bundle\n");
+ if (_scumm->_bundle->openMusicFile("musdisk1.bun", _scumm->getGameDataPath()) == false)
+ return;
+ } else {
+ if (_scumm->_bundle->openMusicFile("digmusic.bun", _scumm->getGameDataPath()) == false)
+ return;
}
-
_musicBundleBufFinal = (byte*)malloc(OUTPUT_SIZE);
_musicBundleBufOutput = (byte*)malloc(10 * 0x2000);
_currentSampleBundleMusic = 0;
@@ -974,7 +978,7 @@
_musicBundleToBeRemoved = false;
_musicBundleToBeChanged = false;
_bundleMusicTrack = -1;
- _numberSamplesBundleMusic = _scumm->_bundle->getNumberOfMusicSamplesByName(song);
+ _numberSamplesBundleMusic = _scumm->_bundle->getNumberOfMusicSamplesByName(song, (_scumm->_gameId == GID_CMI));
_nameBundleMusic = song;
_scumm->_timer->installProcedure(&music_handler, 1000);
return;
@@ -1023,7 +1027,7 @@
if (_musicBundleToBeChanged == true) {
_nameBundleMusic = _newNameBundleMusic;
- _numberSamplesBundleMusic = _scumm->_bundle->getNumberOfMusicSamplesByName(_nameBundleMusic);
+ _numberSamplesBundleMusic = _scumm->_bundle->getNumberOfMusicSamplesByName(_nameBundleMusic, (_scumm->_gameId == GID_CMI));
_currentSampleBundleMusic = 0;
_offsetSampleBundleMusic = 0;
_offsetBufBundleMusic = 0;
@@ -1033,7 +1037,7 @@
ptr = _musicBundleBufOutput;
for (k = 0, l = _currentSampleBundleMusic; l < num; k++) {
- length = _scumm->_bundle->decompressMusicSampleByName(_nameBundleMusic, l, (_musicBundleBufOutput + ((k * 0x2000) + _offsetBufBundleMusic)));
+ length = _scumm->_bundle->decompressMusicSampleByName(_nameBundleMusic, l, (_musicBundleBufOutput + ((k * 0x2000) + _offsetBufBundleMusic)), (_scumm->_gameId == GID_CMI));
_offsetSampleBundleMusic += length;
if (l == 0) {
More information about the Scummvm-git-logs
mailing list