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

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Mon Aug 17 13:49:07 CEST 2009


Revision: 43470
          http://scummvm.svn.sourceforge.net/scummvm/?rev=43470&view=rev
Author:   thebluegr
Date:     2009-08-17 11:49:07 +0000 (Mon, 17 Aug 2009)

Log Message:
-----------
Simplified the sound playing code by removing the boolean variables for signed, stereo, endian and sample bit information - now sound flags are used instead. Some cleanup.

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

Modified: scummvm/trunk/engines/saga/sndres.cpp
===================================================================
--- scummvm/trunk/engines/saga/sndres.cpp	2009-08-17 11:41:02 UTC (rev 43469)
+++ scummvm/trunk/engines/saga/sndres.cpp	2009-08-17 11:49:07 UTC (rev 43470)
@@ -192,7 +192,6 @@
 	GameSoundTypes resourceType = kSoundPCM;
 	byte *data = 0;
 	int rate = 0, size = 0;
-	byte flags = 0;
 	Common::File* file;
 
 	if (resourceId == (uint32)-1) {
@@ -269,21 +268,17 @@
 
 	}
 
-	// Default sound type is 16-bit PCM (used in ITE)
-	buffer.isBigEndian = context->isBigEndian;
-	if ((context->fileType & GAME_VOICEFILE) && (_vm->getFeatures() & GF_LE_VOICES))
-		buffer.isBigEndian = false;
+	// Default sound type is 16-bit signed PCM, used in ITE by PCM and VOX files
 	buffer.isCompressed = context->isCompressed;
 	buffer.soundType = resourceType;
 	buffer.originalSize = 0;
-	buffer.stereo = false;
-	buffer.isSigned = true;			// default for PCM and VOX
-	buffer.frequency = 22050;		// default for PCM and VOX
-	buffer.sampleBits = 16;			// default for PCM and VOX
+	// Set default flags and frequency for PCM, VOC and VOX files, which got no header
+	buffer.flags = Audio::Mixer::FLAG_16BITS;
+	buffer.frequency = 22050;
 	if (_vm->getGameId() == GID_ITE) {
 		if (_vm->getFeatures() & GF_8BIT_UNSIGNED_PCM) {	// older ITE demos
-			buffer.isSigned = false;
-			buffer.sampleBits = 8;
+			buffer.flags |= Audio::Mixer::FLAG_UNSIGNED;
+			buffer.flags &= ~Audio::Mixer::FLAG_16BITS;
 		} else {
 			// Voice files in newer ITE demo versions are OKI ADPCM (VOX) encoded
 			if (!scumm_stricmp(context->fileName, "voicesd.rsc"))
@@ -292,6 +287,12 @@
 	}
 	buffer.buffer = NULL;
 
+	// Check for LE sounds
+	if (!context->isBigEndian)
+		buffer.flags |= Audio::Mixer::FLAG_LITTLE_ENDIAN;
+	if ((context->fileType & GAME_VOICEFILE) && (_vm->getFeatures() & GF_LE_VOICES))
+		buffer.flags |= Audio::Mixer::FLAG_LITTLE_ENDIAN;
+
 	// Older Mac versions of ITE were Macbinary packed
 	int soundOffset = (context->fileType & GAME_MACBINARY) ? 36 : 0;
 
@@ -321,25 +322,23 @@
 	case kSoundShorten:
 	case kSoundVOC:
 		if (resourceType == kSoundWAV) {
-			result = Audio::loadWAVFromStream(readS, size, rate, flags);
+			result = Audio::loadWAVFromStream(readS, size, rate, buffer.flags);
 		} else if (resourceType == kSoundAIFF) {
-			result = Audio::loadAIFFFromStream(readS, size, rate, flags);
+			result = Audio::loadAIFFFromStream(readS, size, rate, buffer.flags);
+#ifdef ENABLE_SAGA2
+		} else if (resourceType == kSoundShorten) {
+			result = Audio::loadShortenFromStream(readS, size, rate, buffer.flags);
+#endif
 		} else if (resourceType == kSoundVOC) {
 			data = Audio::loadVOCFromStream(readS, size, rate);
 			result = (data != 0);
 			if (onlyHeader)
 				free(data);
-#ifdef ENABLE_SAGA2
-		} else if (resourceType == kSoundShorten) {
-			result = Audio::loadShortenFromStream(readS, size, rate, flags);
-#endif
+			buffer.flags |= Audio::Mixer::FLAG_UNSIGNED;
 		}
 
 		if (result) {
 			buffer.frequency = rate;
-			buffer.sampleBits = (flags & Audio::Mixer::FLAG_16BITS) ? 16 : 8;
-			buffer.stereo = flags & Audio::Mixer::FLAG_STEREO;
-			buffer.isSigned = (resourceType == kSoundVOC) ? false : !(flags & Audio::Mixer::FLAG_UNSIGNED);
 			buffer.size = size;
 
 			if (!onlyHeader && resourceType != kSoundVOC) {
@@ -360,8 +359,10 @@
 		readS.readByte();	// Skip compression identifier byte
 		buffer.frequency = readS.readUint16LE();
 		buffer.originalSize = readS.readUint32LE();
-		buffer.sampleBits = readS.readByte();
-		buffer.stereo = (readS.readByte() == char(0)) ? false : true;
+		if (readS.readByte() == 8)	// read sample bits
+			buffer.flags &= ~Audio::Mixer::FLAG_16BITS;
+		if (readS.readByte() != 0)	// read stereo flag
+			buffer.flags |= Audio::Mixer::FLAG_STEREO;
 
 		buffer.size = soundResourceLength;
 		buffer.soundType = resourceType;
@@ -407,12 +408,12 @@
 		msDouble = (double)buffer.size;
 	else
 		msDouble = (double)buffer.originalSize;
-	if (buffer.sampleBits == 16) {
+
+	if (buffer.flags & Audio::Mixer::FLAG_16BITS)
 		msDouble /= 2.0;
-	}
-	if (buffer.stereo) {
+
+	if (buffer.flags & Audio::Mixer::FLAG_STEREO)
 		msDouble /= 2.0;
-	}
 
 	msDouble = msDouble / buffer.frequency * 1000.0;
 	return (int)msDouble;

Modified: scummvm/trunk/engines/saga/sound.cpp
===================================================================
--- scummvm/trunk/engines/saga/sound.cpp	2009-08-17 11:41:02 UTC (rev 43469)
+++ scummvm/trunk/engines/saga/sound.cpp	2009-08-17 11:49:07 UTC (rev 43470)
@@ -65,29 +65,18 @@
 
 void Sound::playSoundBuffer(Audio::SoundHandle *handle, SoundBuffer &buffer, int volume,
 				sndHandleType handleType, bool loop) {
-	byte flags;
 
-	flags = Audio::Mixer::FLAG_AUTOFREE;
+	buffer.flags |= Audio::Mixer::FLAG_AUTOFREE;
 
 	if (loop)
-		flags |= Audio::Mixer::FLAG_LOOP;
+		buffer.flags |= Audio::Mixer::FLAG_LOOP;
 
-	if (buffer.sampleBits == 16) {
-		flags |= Audio::Mixer::FLAG_16BITS;
+	Audio::Mixer::SoundType soundType = (handleType == kVoiceHandle) ? 
+				Audio::Mixer::kSpeechSoundType : Audio::Mixer::kSFXSoundType;
 
-		if (!buffer.isBigEndian)
-			flags |= Audio::Mixer::FLAG_LITTLE_ENDIAN;
-	}
-	if (buffer.stereo)
-		flags |= Audio::Mixer::FLAG_STEREO;
-	if (!buffer.isSigned)
-		flags |= Audio::Mixer::FLAG_UNSIGNED;
-
 	if (!buffer.isCompressed) {
-		Audio::Mixer::SoundType soundType = (handleType == kVoiceHandle) ? 
-					Audio::Mixer::kSpeechSoundType : Audio::Mixer::kSFXSoundType;
 		_mixer->playRaw(soundType, handle, buffer.buffer,
-				buffer.size, buffer.frequency, flags, -1, volume);
+				buffer.size, buffer.frequency, buffer.flags, -1, volume);
 	} else {
 		Audio::AudioStream *stream = 0;
 
@@ -113,14 +102,8 @@
 				break;
 		}
 
-		if (stream != NULL) {
-			if (handleType == kVoiceHandle)
-				_mixer->playInputStream(Audio::Mixer::kSpeechSoundType, handle, stream, -1,
-							volume, 0, true, false);
-			else
-				_mixer->playInputStream(Audio::Mixer::kSFXSoundType, handle, stream, -1,
-							volume, 0, true, false);
-		}
+		if (stream != NULL)
+			_mixer->playInputStream(soundType, handle, stream, -1, volume, 0, true, false);
 	}
 }
 

Modified: scummvm/trunk/engines/saga/sound.h
===================================================================
--- scummvm/trunk/engines/saga/sound.h	2009-08-17 11:41:02 UTC (rev 43469)
+++ scummvm/trunk/engines/saga/sound.h	2009-08-17 11:49:07 UTC (rev 43470)
@@ -44,15 +44,12 @@
 
 struct SoundBuffer {
 	uint16 frequency;
-	int sampleBits;
-	bool stereo;
-	bool isSigned;
 	bool isCompressed;
+	byte flags;
 
 	byte *buffer;
 	size_t size;
 	size_t originalSize;
-	bool isBigEndian;
 	GameSoundTypes soundType;
 	size_t fileOffset;
 };


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