[Scummvm-cvs-logs] SF.net SVN: scummvm:[48906] scummvm/trunk/engines/sci

m_kiewitz at users.sourceforge.net m_kiewitz at users.sourceforge.net
Mon May 3 15:30:09 CEST 2010


Revision: 48906
          http://scummvm.svn.sourceforge.net/scummvm/?rev=48906&view=rev
Author:   m_kiewitz
Date:     2010-05-03 13:30:09 +0000 (Mon, 03 May 2010)

Log Message:
-----------
SCI: calculate sampleLen for WAVEs as well

Modified Paths:
--------------
    scummvm/trunk/engines/sci/resource.cpp
    scummvm/trunk/engines/sci/sound/audio.cpp

Modified: scummvm/trunk/engines/sci/resource.cpp
===================================================================
--- scummvm/trunk/engines/sci/resource.cpp	2010-05-03 13:04:08 UTC (rev 48905)
+++ scummvm/trunk/engines/sci/resource.cpp	2010-05-03 13:30:09 UTC (rev 48906)
@@ -1263,6 +1263,8 @@
 			ResourceSource *psrcPatch = new ResourceSource;
 			psrcPatch->source_type = kSourceWave;
 			psrcPatch->location_name = name;
+			psrcPatch->volume_number = 0;
+			psrcPatch->audioCompressionType = 0;
 
 			ResourceId resId = ResourceId(kResourceTypeAudio, number);
 

Modified: scummvm/trunk/engines/sci/sound/audio.cpp
===================================================================
--- scummvm/trunk/engines/sci/sound/audio.cpp	2010-05-03 13:04:08 UTC (rev 48905)
+++ scummvm/trunk/engines/sci/sound/audio.cpp	2010-05-03 13:30:09 UTC (rev 48906)
@@ -212,6 +212,8 @@
 	byte flags = 0;
 	Sci::Resource *audioRes;
 
+	*sampleLen = 0;
+
 	if (volume == 65535) {
 		audioRes = _resMan->findResource(ResourceId(kResourceTypeAudio, number), false);
 		if (!audioRes) {
@@ -251,10 +253,6 @@
 #endif
 			break;
 		}
-
-		// Hopefully FLAC/OGG/MP3 are always 16-bit, otherwise we will get inaccuracies during sampleLen calculation
-		//  TODO: Check if this is true, otherwise implement support for getting 8-bit/16-bit from stream in common
-		flags = Audio::FLAG_16BITS;
 	} else {
 		// Original source file
 		if (audioRes->_headerSize > 0) {
@@ -271,6 +269,14 @@
 				if (memcmp(audioRes->data, "RIFF", 4) == 0) {
 					// WAVE detected
 					Common::MemoryReadStream *waveStream = new Common::MemoryReadStream(audioRes->data, audioRes->size, DisposeAfterUse::NO);
+
+					// Calculate samplelen from WAVE header
+					int waveSize = 0, waveRate = 0;
+					byte waveFlags = 0;
+					Audio::loadWAVFromStream(*waveStream, waveSize, waveRate, waveFlags);
+					*sampleLen = (waveFlags & Audio::FLAG_16BITS ? waveSize >> 1 : waveSize) * 60 / waveRate;
+
+					waveStream->seek(0, SEEK_SET);
 					audioStream = Audio::makeWAVStream(waveStream, DisposeAfterUse::YES);
 				}
 			}
@@ -293,9 +299,6 @@
 		// Original code
 		//*sampleLen = (flags & Audio::FLAG_16BITS ? size >> 1 : size) * 60 / _audioRate;
 		audioStream = audioSeekStream;
-	} else {
-		// TODO: if possible make makeWAVStream() return seekableAudioStream as well, so we will be able to calculate sampleLen
-		*sampleLen = 0;
 	}
 	if (audioStream)
 		return audioStream;


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