[Scummvm-cvs-logs] SF.net SVN: scummvm:[47405] scummvm/trunk/engines/saga/sound.cpp

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Wed Jan 20 13:43:59 CET 2010


Revision: 47405
          http://scummvm.svn.sourceforge.net/scummvm/?rev=47405&view=rev
Author:   fingolfin
Date:     2010-01-20 12:43:59 +0000 (Wed, 20 Jan 2010)

Log Message:
-----------
SAGA: Change Sound::playSoundBuffer to enable looping for all sound formats

Modified Paths:
--------------
    scummvm/trunk/engines/saga/sound.cpp

Modified: scummvm/trunk/engines/saga/sound.cpp
===================================================================
--- scummvm/trunk/engines/saga/sound.cpp	2010-01-20 12:22:53 UTC (rev 47404)
+++ scummvm/trunk/engines/saga/sound.cpp	2010-01-20 12:43:59 UTC (rev 47405)
@@ -67,44 +67,42 @@
 void Sound::playSoundBuffer(Audio::SoundHandle *handle, const SoundBuffer &buffer, int volume,
 				sndHandleType handleType, bool loop) {
 
-	Audio::AudioStream *stream = 0;
+	Audio::RewindableAudioStream *stream = 0;
 
 	Audio::Mixer::SoundType soundType = (handleType == kVoiceHandle) ? 
 				Audio::Mixer::kSpeechSoundType : Audio::Mixer::kSFXSoundType;
 
 	if (!buffer.isCompressed) {
-		stream = Audio::makeLoopingAudioStream(
-						Audio::makeRawMemoryStream(buffer.buffer, buffer.size, DisposeAfterUse::YES, buffer.frequency, buffer.flags),
-						loop ? 0 : 1);
+		stream = Audio::makeRawMemoryStream(buffer.buffer, buffer.size, DisposeAfterUse::YES, buffer.frequency, buffer.flags);
 	} 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) {
 #ifdef USE_MAD
-			case kSoundMP3:
-				stream = Audio::makeMP3Stream(new Common::MemoryReadStream(buffer.buffer, buffer.size, DisposeAfterUse::YES), DisposeAfterUse::YES);
-				break;
+		case kSoundMP3:
+			stream = Audio::makeMP3Stream(memStream, DisposeAfterUse::YES);
+			break;
 #endif
 #ifdef USE_VORBIS
-			case kSoundOGG:
-				stream = Audio::makeVorbisStream(new Common::MemoryReadStream(buffer.buffer, buffer.size, DisposeAfterUse::YES), DisposeAfterUse::YES);
-				break;
+		case kSoundOGG:
+			stream = Audio::makeVorbisStream(memStream, DisposeAfterUse::YES);
+			break;
 #endif
 #ifdef USE_FLAC
-			case kSoundFLAC:
-				stream = Audio::makeFlacStream(new Common::MemoryReadStream(buffer.buffer, buffer.size, DisposeAfterUse::YES), DisposeAfterUse::YES);
-				break;
+		case kSoundFLAC:
+			stream = Audio::makeFlacStream(memStream, DisposeAfterUse::YES);
+			break;
 #endif
-			default:
-				// Unknown compression, ignore sample
-				warning("Unknown compression, ignoring sound");
-				break;
+		default:
+			// Unknown compression, ignore sample
+			delete memStream;
+			warning("Unknown compression, ignoring sound");
+			break;
 		}
 	}
 
 	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) {


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list