aboutsummaryrefslogtreecommitdiff
path: root/engines/neverhood
diff options
context:
space:
mode:
authorFilippos Karapetis2013-12-28 13:27:57 +0200
committerFilippos Karapetis2013-12-28 13:30:33 +0200
commit4ffbae38154949fdcf0e55cc18dbf8047e608829 (patch)
tree9e72c7913faf029f3699ff0e952861afc8bbeeab /engines/neverhood
parent66dddbe892765212cf3821fd08005cef9584df2e (diff)
downloadscummvm-rg350-4ffbae38154949fdcf0e55cc18dbf8047e608829.tar.gz
scummvm-rg350-4ffbae38154949fdcf0e55cc18dbf8047e608829.tar.bz2
scummvm-rg350-4ffbae38154949fdcf0e55cc18dbf8047e608829.zip
NEVERHOOD: Fix looping sounds (bug #6473)
Based on salty-horse's patch - thanks!
Diffstat (limited to 'engines/neverhood')
-rw-r--r--engines/neverhood/sound.cpp16
-rw-r--r--engines/neverhood/sound.h1
2 files changed, 13 insertions, 4 deletions
diff --git a/engines/neverhood/sound.cpp b/engines/neverhood/sound.cpp
index 3ea45491a7..4946de1681 100644
--- a/engines/neverhood/sound.cpp
+++ b/engines/neverhood/sound.cpp
@@ -66,6 +66,12 @@ void SoundResource::play() {
soundItem->playSound(false);
}
+void SoundResource::playLooping() {
+ AudioResourceManSoundItem *soundItem = getSoundItem();
+ if (soundItem)
+ soundItem->playSound(true);
+}
+
void SoundResource::stop() {
AudioResourceManSoundItem *soundItem = getSoundItem();
if (soundItem)
@@ -244,7 +250,7 @@ void SoundItem::update() {
} else if (--_currCountdown == 0)
_soundResource->play();
} else if (_playLooping && !_soundResource->isPlaying())
- _soundResource->play();
+ _soundResource->playLooping();
}
// SoundMan
@@ -558,10 +564,12 @@ int NeverhoodAudioStream::readBuffer(int16 *buffer, const int numSamples) {
}
if (bytesRead < bytesToRead || _stream->pos() >= _stream->size() || _stream->err() || _stream->eos()) {
- if (_isLooping)
+ if (_isLooping) {
_stream->seek(0);
- else
+ _prevValue = 0;
+ } else {
_endOfData = true;
+ }
}
}
@@ -609,7 +617,7 @@ void AudioResourceManSoundItem::playSound(bool looping) {
if (_data) {
const byte *shiftValue = _resourceHandle.extData();
Common::MemoryReadStream *stream = new Common::MemoryReadStream(_data, _resourceHandle.size(), DisposeAfterUse::NO);
- NeverhoodAudioStream *audioStream = new NeverhoodAudioStream(22050, *shiftValue, false, DisposeAfterUse::YES, stream);
+ NeverhoodAudioStream *audioStream = new NeverhoodAudioStream(22050, *shiftValue, looping, DisposeAfterUse::YES, stream);
_vm->_mixer->playStream(Audio::Mixer::kSFXSoundType, &_soundHandle,
audioStream, -1, VOLUME(_volume), PANNING(_panning));
debug(1, "playing sound %08X", _fileHash);
diff --git a/engines/neverhood/sound.h b/engines/neverhood/sound.h
index 548fe88501..1f80f8d6b0 100644
--- a/engines/neverhood/sound.h
+++ b/engines/neverhood/sound.h
@@ -50,6 +50,7 @@ public:
void unload();
void play(uint32 fileHash);
void play();
+ void playLooping();
void stop();
void setVolume(int16 volume);
void setPan(int16 pan);