SAGA: Change Sound::playSoundBuffer to enable looping for all sound formats
svn-id: r47405
This commit is contained in:
parent
f5f6faaf97
commit
7799dc3614
1 changed files with 18 additions and 20 deletions
|
@ -67,44 +67,42 @@ SndHandle *Sound::getHandle() {
|
||||||
void Sound::playSoundBuffer(Audio::SoundHandle *handle, const SoundBuffer &buffer, int volume,
|
void Sound::playSoundBuffer(Audio::SoundHandle *handle, const SoundBuffer &buffer, int volume,
|
||||||
sndHandleType handleType, bool loop) {
|
sndHandleType handleType, bool loop) {
|
||||||
|
|
||||||
Audio::AudioStream *stream = 0;
|
Audio::RewindableAudioStream *stream = 0;
|
||||||
|
|
||||||
Audio::Mixer::SoundType soundType = (handleType == kVoiceHandle) ?
|
Audio::Mixer::SoundType soundType = (handleType == kVoiceHandle) ?
|
||||||
Audio::Mixer::kSpeechSoundType : Audio::Mixer::kSFXSoundType;
|
Audio::Mixer::kSpeechSoundType : Audio::Mixer::kSFXSoundType;
|
||||||
|
|
||||||
if (!buffer.isCompressed) {
|
if (!buffer.isCompressed) {
|
||||||
stream = Audio::makeLoopingAudioStream(
|
stream = Audio::makeRawMemoryStream(buffer.buffer, buffer.size, DisposeAfterUse::YES, buffer.frequency, buffer.flags);
|
||||||
Audio::makeRawMemoryStream(buffer.buffer, buffer.size, DisposeAfterUse::YES, buffer.frequency, buffer.flags),
|
|
||||||
loop ? 0 : 1);
|
|
||||||
} else {
|
} else {
|
||||||
|
Common::SeekableReadStream *memStream = new Common::MemoryReadStream(buffer.buffer, buffer.size, DisposeAfterUse::YES);
|
||||||
|
|
||||||
// TODO / FIXME: It seems we don't loop compressed audio at all, but do loop uncompressed data.
|
|
||||||
// Is that intentional? Seems odd...
|
|
||||||
switch (buffer.soundType) {
|
switch (buffer.soundType) {
|
||||||
#ifdef USE_MAD
|
#ifdef USE_MAD
|
||||||
case kSoundMP3:
|
case kSoundMP3:
|
||||||
stream = Audio::makeMP3Stream(new Common::MemoryReadStream(buffer.buffer, buffer.size, DisposeAfterUse::YES), DisposeAfterUse::YES);
|
stream = Audio::makeMP3Stream(memStream, DisposeAfterUse::YES);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_VORBIS
|
#ifdef USE_VORBIS
|
||||||
case kSoundOGG:
|
case kSoundOGG:
|
||||||
stream = Audio::makeVorbisStream(new Common::MemoryReadStream(buffer.buffer, buffer.size, DisposeAfterUse::YES), DisposeAfterUse::YES);
|
stream = Audio::makeVorbisStream(memStream, DisposeAfterUse::YES);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_FLAC
|
#ifdef USE_FLAC
|
||||||
case kSoundFLAC:
|
case kSoundFLAC:
|
||||||
stream = Audio::makeFlacStream(new Common::MemoryReadStream(buffer.buffer, buffer.size, DisposeAfterUse::YES), DisposeAfterUse::YES);
|
stream = Audio::makeFlacStream(memStream, DisposeAfterUse::YES);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
// Unknown compression, ignore sample
|
// Unknown compression, ignore sample
|
||||||
warning("Unknown compression, ignoring sound");
|
delete memStream;
|
||||||
break;
|
warning("Unknown compression, ignoring sound");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stream != NULL)
|
if (stream != NULL)
|
||||||
_mixer->playInputStream(soundType, handle, stream, -1, volume);
|
_mixer->playInputStream(soundType, handle, Audio::makeLoopingAudioStream(stream, loop ? 0 : 1), -1, volume);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sound::playSound(SoundBuffer &buffer, int volume, bool loop) {
|
void Sound::playSound(SoundBuffer &buffer, int volume, bool loop) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue