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

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Wed Dec 31 23:10:09 CET 2008


Revision: 35644
          http://scummvm.svn.sourceforge.net/scummvm/?rev=35644&view=rev
Author:   thebluegr
Date:     2008-12-31 22:10:09 +0000 (Wed, 31 Dec 2008)

Log Message:
-----------
Several fixes and cleanup for sound resource loading. Sound information for sound types that are detected automatically is read from the files themselves

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

Modified: scummvm/trunk/engines/saga/sndres.cpp
===================================================================
--- scummvm/trunk/engines/saga/sndres.cpp	2008-12-31 21:14:09 UTC (rev 35643)
+++ scummvm/trunk/engines/saga/sndres.cpp	2008-12-31 22:10:09 UTC (rev 35644)
@@ -183,7 +183,7 @@
 	int size;
 	byte flags;
 	size_t voxSize;
-	const GameSoundInfo *soundInfo;
+	const GameSoundInfo *soundInfo = 0;
 	Common::File* file;
 
 	if (resourceId == (uint32)-1) {
@@ -240,7 +240,7 @@
 			resourceType = kSoundAIFF;
 		} else if (!memcmp(header, "ajkg", 4) != 0) {
 			resourceType = kSoundShorten;
-		} else {
+		} else if (soundInfo) {
 			resourceType = soundInfo->resourceType;
 		}
 
@@ -269,43 +269,32 @@
 	buffer.isBigEndian = _vm->isMacResources();
 	buffer.soundType = resourceType;
 	buffer.originalSize = 0;
+	buffer.stereo = false;
 
 	switch (resourceType) {
 	case kSoundPCM:
-		buffer.frequency = 22050;
-		buffer.isSigned = soundInfo->isSigned;
-		buffer.sampleBits = soundInfo->sampleBits;
-		buffer.size = soundResourceLength;
-		buffer.stereo = false;
-		if (onlyHeader) {
-			buffer.buffer = NULL;
-		} else {
-			buffer.buffer = (byte *) malloc(soundResourceLength);
-			readS.read(buffer.buffer, soundResourceLength);
-		}
-		result = true;
-		break;
 	case kSoundMacPCM:
+		{
+		int soundOffset = (resourceType == kSoundMacPCM) ? 36 : 0;
 		buffer.frequency = 22050;
 		buffer.isSigned = soundInfo->isSigned;
 		buffer.sampleBits = soundInfo->sampleBits;
-		buffer.size = soundResourceLength - 36;
-		buffer.stereo = false;
+		buffer.size = soundResourceLength - soundOffset;
 		if (onlyHeader) {
 			buffer.buffer = NULL;
 		} else {
-			buffer.buffer = (byte *)malloc(buffer.size);
-
-			readS.seek(readS.pos() + 36);
+			buffer.buffer = (byte *) malloc(buffer.size);
+			if (soundOffset > 0)
+				readS.seek(soundOffset, SEEK_CUR);
 			readS.read(buffer.buffer, buffer.size);
 		}
 		result = true;
+		}
 		break;
 	case kSoundVOX:
 		buffer.frequency = 22050;
 		buffer.isSigned = soundInfo->isSigned;
 		buffer.sampleBits = soundInfo->sampleBits;
-		buffer.stereo = false;
 		buffer.size = soundResourceLength * 4;
 		if (onlyHeader) {
 			buffer.buffer = NULL;
@@ -325,7 +314,6 @@
 		if (data) {
 			buffer.frequency = rate;
 			buffer.sampleBits = 8;
-			buffer.stereo = false;
 			buffer.isSigned = false;
 			buffer.size = size;
 			if (onlyHeader) {
@@ -340,9 +328,9 @@
 	case kSoundWAV:
 		if (Audio::loadWAVFromStream(readS, size, rate, flags)) {
 			buffer.frequency = rate;
-			buffer.sampleBits = 16;
-			buffer.stereo = ((flags & Audio::Mixer::FLAG_STEREO) != 0);
-			buffer.isSigned = true;
+			buffer.sampleBits = (flags & Audio::Mixer::FLAG_16BITS) ? 16 : 8;
+			buffer.stereo = flags & Audio::Mixer::FLAG_STEREO;
+			buffer.isSigned = !(flags & Audio::Mixer::FLAG_UNSIGNED);
 			buffer.size = size;
 			if (onlyHeader) {
 				buffer.buffer = NULL;
@@ -356,8 +344,8 @@
 	case kSoundAIFF:
 		if (Audio::loadAIFFFromStream(readS, size, rate, flags)) {
 			buffer.frequency = rate;
-			buffer.sampleBits = 16;
-			buffer.stereo = ((flags & Audio::Mixer::FLAG_STEREO) != 0);
+			buffer.sampleBits = (flags & Audio::Mixer::FLAG_16BITS) ? 16 : 8;
+			buffer.stereo = flags & Audio::Mixer::FLAG_STEREO;
 			buffer.isSigned = true;
 			buffer.size = size;
 			if (onlyHeader) {


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