aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/kyra/sound_towns.cpp5
-rw-r--r--engines/scumm/player_mod.cpp2
-rw-r--r--sound/audiostream.cpp13
-rw-r--r--sound/audiostream.h2
-rw-r--r--sound/mixer.cpp12
-rw-r--r--sound/voc.cpp2
-rw-r--r--sound/wave.cpp2
7 files changed, 20 insertions, 18 deletions
diff --git a/engines/kyra/sound_towns.cpp b/engines/kyra/sound_towns.cpp
index 8413cc2ba9..84beeef453 100644
--- a/engines/kyra/sound_towns.cpp
+++ b/engines/kyra/sound_towns.cpp
@@ -241,9 +241,10 @@ void SoundTowns::playSoundEffect(uint8 track) {
playbackBufferSize -= 0x20;
setPitch(sfxPlaybackBuffer, playbackBufferSize, sfxHeader->pitch, pitch);
- _currentSFX = Audio::makeLinearInputStream(0x2b11,
+ _currentSFX = Audio::makeLinearInputStream(sfxPlaybackBuffer, playbackBufferSize,
+ 0x2b11,
Audio::Mixer::FLAG_UNSIGNED | Audio::Mixer::FLAG_LITTLE_ENDIAN | Audio::Mixer::FLAG_AUTOFREE,
- sfxPlaybackBuffer, playbackBufferSize, 0, 0);
+ 0, 0);
_mixer->playInputStream(Audio::Mixer::kSFXSoundType, &_sfxHandle, _currentSFX);
}
diff --git a/engines/scumm/player_mod.cpp b/engines/scumm/player_mod.cpp
index 38a5c8554e..918df6e6dc 100644
--- a/engines/scumm/player_mod.cpp
+++ b/engines/scumm/player_mod.cpp
@@ -91,7 +91,7 @@ void Player_MOD::startChannel(int id, void *data, int size, int rate, uint8 vol,
_channels[i].vol = vol;
_channels[i].pan = pan;
_channels[i].freq = rate;
- _channels[i].input = Audio::makeLinearInputStream(rate, Audio::Mixer::FLAG_AUTOFREE | (loopStart != loopEnd ? Audio::Mixer::FLAG_LOOP : 0), (const byte*)data, size, loopStart, loopEnd - loopStart);
+ _channels[i].input = Audio::makeLinearInputStream((const byte*)data, size, rate, Audio::Mixer::FLAG_AUTOFREE | (loopStart != loopEnd ? Audio::Mixer::FLAG_LOOP : 0), loopStart, loopEnd);
_channels[i].converter = Audio::makeRateConverter(rate, _mixer->getOutputRate(), false, false);
}
diff --git a/sound/audiostream.cpp b/sound/audiostream.cpp
index 4363de3749..d0711266b1 100644
--- a/sound/audiostream.cpp
+++ b/sound/audiostream.cpp
@@ -200,13 +200,24 @@ int LinearMemoryStream<stereo, is16Bit, isUnsigned, isLE>::readBuffer(int16 *buf
} else \
return new LinearMemoryStream<STEREO, false, UNSIGNED, false>(rate, ptr, len, loopOffset, loopLen, autoFree)
-AudioStream *makeLinearInputStream(int rate, byte flags, const byte *ptr, uint32 len, uint loopOffset, uint loopLen) {
+AudioStream *makeLinearInputStream(const byte *ptr, uint32 len, int rate, byte flags, uint loopStart, uint loopEnd) {
const bool isStereo = (flags & Audio::Mixer::FLAG_STEREO) != 0;
const bool is16Bit = (flags & Audio::Mixer::FLAG_16BITS) != 0;
const bool isUnsigned = (flags & Audio::Mixer::FLAG_UNSIGNED) != 0;
const bool isLE = (flags & Audio::Mixer::FLAG_LITTLE_ENDIAN) != 0;
const bool autoFree = (flags & Audio::Mixer::FLAG_AUTOFREE) != 0;
+ uint loopOffset = 0, loopLen = 0;
+ if (flags & Audio::Mixer::FLAG_LOOP) {
+ if (loopEnd == 0)
+ loopEnd = len;
+ assert(loopStart <= loopEnd);
+ assert(loopEnd <= len);
+
+ loopOffset = loopStart;
+ loopLen = loopEnd - loopStart;
+ }
+
if (isStereo) {
if (isUnsigned) {
MAKE_LINEAR(true, true);
diff --git a/sound/audiostream.h b/sound/audiostream.h
index 499fb782ab..9cd8113147 100644
--- a/sound/audiostream.h
+++ b/sound/audiostream.h
@@ -97,7 +97,7 @@ public:
* it to the sample format used by the mixer (i.e. 16 bit signed native endian).
* Optionally supports (infinite) looping of a portion of the data.
*/
-AudioStream *makeLinearInputStream(int rate, byte flags, const byte *ptr, uint32 len, uint loopOffset, uint loopLen);
+AudioStream *makeLinearInputStream(const byte *ptr, uint32 len, int rate, byte flags, uint loopStart, uint loopEnd);
/**
* An audio stream to which additional data can be appended on-the-fly.
diff --git a/sound/mixer.cpp b/sound/mixer.cpp
index b4b9e1134e..0b9ffe3abe 100644
--- a/sound/mixer.cpp
+++ b/sound/mixer.cpp
@@ -157,17 +157,7 @@ void Mixer::playRaw(
uint32 loopStart, uint32 loopEnd) {
// Create the input stream
- AudioStream *input;
- if (flags & Mixer::FLAG_LOOP) {
- if (loopEnd == 0) {
- input = makeLinearInputStream(rate, flags, (byte *)sound, size, 0, size);
- } else {
- assert(loopStart < loopEnd && loopEnd <= size);
- input = makeLinearInputStream(rate, flags, (byte *)sound, size, loopStart, loopEnd - loopStart);
- }
- } else {
- input = makeLinearInputStream(rate, flags, (byte *)sound, size, 0, 0);
- }
+ AudioStream *input = makeLinearInputStream((byte *)sound, size, rate, flags, loopStart, loopEnd);
// Play it
playInputStream(type, handle, input, id, volume, balance, true, false, (flags & Mixer::FLAG_REVERSE_STEREO));
diff --git a/sound/voc.cpp b/sound/voc.cpp
index 726b555a79..2c235c05ca 100644
--- a/sound/voc.cpp
+++ b/sound/voc.cpp
@@ -154,7 +154,7 @@ AudioStream *makeVOCStream(Common::ReadStream &stream) {
if (!data)
return 0;
- return makeLinearInputStream(rate, Audio::Mixer::FLAG_AUTOFREE | Audio::Mixer::FLAG_UNSIGNED, data, size, 0, 0);
+ return makeLinearInputStream(data, size, rate, Audio::Mixer::FLAG_AUTOFREE | Audio::Mixer::FLAG_UNSIGNED, 0, 0);
}
diff --git a/sound/wave.cpp b/sound/wave.cpp
index 63bd498686..a0f1f675fb 100644
--- a/sound/wave.cpp
+++ b/sound/wave.cpp
@@ -192,7 +192,7 @@ AudioStream *makeWAVStream(Common::SeekableReadStream &stream) {
// Since we allocated our own buffer for the data, we must set the autofree flag.
flags |= Audio::Mixer::FLAG_AUTOFREE;
- return makeLinearInputStream(rate, flags, data, size, 0, 0);
+ return makeLinearInputStream(data, size, rate, flags, 0, 0);
}
} // End of namespace Audio