aboutsummaryrefslogtreecommitdiff
path: root/scumm/sound.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scumm/sound.cpp')
-rw-r--r--scumm/sound.cpp40
1 files changed, 19 insertions, 21 deletions
diff --git a/scumm/sound.cpp b/scumm/sound.cpp
index 5a16dd4c79..fb9714b188 100644
--- a/scumm/sound.cpp
+++ b/scumm/sound.cpp
@@ -37,7 +37,7 @@ extern void *bsearch(const void *, const void *, size_t,
Sound::Sound(Scumm *parent) {
_scumm = parent;
- _numberBundleMusic = -1;
+ _nameBundleMusic = NULL;
_musicBundleBufFinal = NULL;
_musicBundleBufOutput = NULL;
}
@@ -105,10 +105,6 @@ void Sound::processSoundQues() {
);
#endif
- if ((_scumm->_gameId == GID_DIG) && (data[0] == 4096)){
-// playBundleMusic(data[1] - 1);
- }
-
if (!(_scumm->_features & GF_AFTER_V7)) {
if (se)
_scumm->_vars[_scumm->VAR_SOUNDRESULT] =
@@ -893,8 +889,8 @@ static void music_handler (void * engine) {
#define OUTPUT_SIZE 66150 // ((22050 * 2 * 2) / 4) * 3
-void Sound::playBundleMusic(int32 song) {
- if (_numberBundleMusic == -1) {
+void Sound::playBundleMusic(char * song) {
+ if (_nameBundleMusic == NULL) {
if (_scumm->_bundle->openMusicFile("digmusic.bun", _scumm->getGameDataPath()) == false) {
return;
}
@@ -904,15 +900,16 @@ void Sound::playBundleMusic(int32 song) {
_currentSampleBundleMusic = 0;
_offsetSampleBundleMusic = 0;
_offsetBufBundleMusic = 0;
- _pauseBundleMusic = false;
- _numberSamplesBundleMusic = _scumm->_bundle->getNumberOfMusicSamplesByIndex(song);
- _numberBundleMusic = song;
+ _pauseBundleMusic = false;
+ _bundleMusicTrack = -1;
+ _numberSamplesBundleMusic = _scumm->_bundle->getNumberOfMusicSamplesByName(song);
+ _nameBundleMusic = song;
_scumm->_timer->installProcedure(&music_handler, 1000);
return;
}
- if (_numberBundleMusic != song) {
- _numberSamplesBundleMusic = _scumm->_bundle->getNumberOfMusicSamplesByIndex(song);
- _numberBundleMusic = song;
+ if (strcmp(_nameBundleMusic, song) != 0) {
+ _numberSamplesBundleMusic = _scumm->_bundle->getNumberOfMusicSamplesByName(song);
+ _nameBundleMusic = song;
_currentSampleBundleMusic = 0;
_offsetSampleBundleMusic = 0;
_offsetBufBundleMusic = 0;
@@ -925,7 +922,8 @@ void Sound::pauseBundleMusic(bool state) {
void Sound::stopBundleMusic() {
_scumm->_timer->releaseProcedure(&music_handler);
- _numberBundleMusic = -1;
+ _nameBundleMusic = NULL;
+ _bundleMusicTrack = -1;
if (_musicBundleBufFinal) {
free(_musicBundleBufFinal);
_musicBundleBufFinal = NULL;
@@ -948,14 +946,14 @@ void Sound::bundleMusicHandler(Scumm * scumm) {
return;
for (k = 0, l = _currentSampleBundleMusic; l < num; k++) {
- length = _scumm->_bundle->decompressMusicSampleByIndex(_numberBundleMusic, l, (_musicBundleBufOutput + ((k * 0x2000) + _offsetBufBundleMusic)));
+ length = _scumm->_bundle->decompressMusicSampleByName(_nameBundleMusic, l, (_musicBundleBufOutput + ((k * 0x2000) + _offsetBufBundleMusic)));
_offsetSampleBundleMusic += length;
if (l == 0) {
tag = READ_BE_UINT32(ptr); ptr += 4;
if (tag != MKID_BE('iMUS')) {
- warning("Decompression of bundle sound failed");
- _numberBundleMusic = -1;
+ warning("Decompression of bundle song failed");
+ _nameBundleMusic = NULL;
return;
}
@@ -982,7 +980,7 @@ void Sound::bundleMusicHandler(Scumm * scumm) {
}
if (size < 0) {
warning("Decompression sound failed (no size field)");
- _numberBundleMusic = -1;
+ _nameBundleMusic = NULL;
return;
}
header_size = (ptr - _musicBundleBufOutput);
@@ -1008,11 +1006,11 @@ void Sound::bundleMusicHandler(Scumm * scumm) {
byte * buffer = NULL;
uint32 final_size = decode12BitsSample(ptr, &buffer, size);
- if (_scumm->_mixer->_channels[SoundMixer::NUM_CHANNELS - 1] == NULL) {
- _scumm->_mixer->playStream(NULL, SoundMixer::NUM_CHANNELS - 1, buffer, final_size, rate,
+ if (_bundleMusicTrack == -1) {
+ _bundleMusicTrack = _scumm->_mixer->playStream(NULL, -1, buffer, final_size, rate,
SoundMixer::FLAG_AUTOFREE | SoundMixer::FLAG_16BITS | SoundMixer::FLAG_STEREO);
} else {
- _scumm->_mixer->append(SoundMixer::NUM_CHANNELS - 1, buffer, final_size, rate,
+ _scumm->_mixer->append(_bundleMusicTrack, buffer, final_size, rate,
SoundMixer::FLAG_AUTOFREE | SoundMixer::FLAG_16BITS | SoundMixer::FLAG_STEREO);
}
}