[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