diff options
author | Travis Howell | 2009-07-10 00:07:26 +0000 |
---|---|---|
committer | Travis Howell | 2009-07-10 00:07:26 +0000 |
commit | 4e99bee142899dae1385210012dd34453920fe54 (patch) | |
tree | 1ff2f4e640b6aa7cbe8e35b887e55c6c3e063de8 /sound/iff_sound.cpp | |
parent | ff208c5387a8566546a384afa9ab48c0a1f356a0 (diff) | |
parent | e8e9b882275b8dc5d77db3b1faaf30466c7b7a31 (diff) | |
download | scummvm-rg350-4e99bee142899dae1385210012dd34453920fe54.tar.gz scummvm-rg350-4e99bee142899dae1385210012dd34453920fe54.tar.bz2 scummvm-rg350-4e99bee142899dae1385210012dd34453920fe54.zip |
Merged revisions 42277-42278,42286-42290,42292-42293,42297,42300-42301,42303,42305-42306 via svnmerge from
https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk
........
r42277 | drmccoy | 2009-07-09 12:54:10 +1000 (Thu, 09 Jul 2009) | 1 line
Giving Font its own real class
........
r42278 | dreammaster | 2009-07-09 13:07:30 +1000 (Thu, 09 Jul 2009) | 1 line
Changed the status of the cruise engine to be enabled by default
........
r42286 | drmccoy | 2009-07-09 19:39:51 +1000 (Thu, 09 Jul 2009) | 1 line
Warn instead of crash when a video frame part was found although the header says there's no video
........
r42287 | thebluegr | 2009-07-09 23:17:46 +1000 (Thu, 09 Jul 2009) | 1 line
Renamed sound/iff.* to sound/iff_sound.* to fix an issue with the upcoming changes to the MSVC project files (sound/iff.* produces iff.obj, which clashes with iff.obj from graphics/iff.*)
........
r42288 | thebluegr | 2009-07-10 01:12:35 +1000 (Fri, 10 Jul 2009) | 3 lines
- Rewrote and greatly simplified the MSVC8 and MSVC9 project files so that they use common compilation properties, based on patch #2774908. These common properties make it much simpler to change options and compilation defines globally, similar to how GCC *.mk files do. Also, this fixes problems where an ENABLE_* define was set for one project file but not another (like the situation in revisions 42257 and 42259). It's now much easier to construct a tool which will create the project files dynamically.
- Dropped support for MSVC7 and MSVC7.1 for now (as they don't support common compilation properties and it's no longer easy to construct them from the MSVC8 ones) - hopefully, they will return in the future, once we got a more sophisticated tool to create them
- Simplified the MSVC9 <-> MSVC8 conversion tools a bit
........
r42289 | thebluegr | 2009-07-10 01:15:49 +1000 (Fri, 10 Jul 2009) | 1 line
Reverted commit #42257, as the original issue was with the compilation process of MSVC and the ENABLE_* checks work correctly
........
r42290 | thebluegr | 2009-07-10 01:17:45 +1000 (Fri, 10 Jul 2009) | 1 line
Added proper safeguards for shorten.*, thereby fixing commit 42259
........
r42292 | lordhoto | 2009-07-10 01:32:06 +1000 (Fri, 10 Jul 2009) | 1 line
Cleanup.
........
r42293 | lordhoto | 2009-07-10 01:32:25 +1000 (Fri, 10 Jul 2009) | 1 line
Cleanup rollDice (the results of the old and the new function are almost identical).
........
r42297 | thebluegr | 2009-07-10 01:46:26 +1000 (Fri, 10 Jul 2009) | 1 line
restAdjust should be a signed integer. Fixes crashes with SCI1 games that take absolute lofs parameters (a regression of commit #42260)
........
r42300 | thebluegr | 2009-07-10 01:54:18 +1000 (Fri, 10 Jul 2009) | 1 line
Applied patch #2818845 - "SCI: resource.map detection for SCI1/1.1 fixed", with some slight formatting changes
........
r42301 | lordhoto | 2009-07-10 01:59:20 +1000 (Fri, 10 Jul 2009) | 1 line
Fix wrong format arugment.
........
r42303 | lordhoto | 2009-07-10 02:16:08 +1000 (Fri, 10 Jul 2009) | 1 line
By comparing the commit log of r42300, it seems that "off" was renamed to "lastDirectoryOffset". I changed the SCI32 specific code to use that now. I can't assure this is anyhow correct, so anyone with knowledge of this code please check it.
........
r42305 | lordhoto | 2009-07-10 02:23:22 +1000 (Fri, 10 Jul 2009) | 1 line
Add fixme about SCI32 specific code.
........
r42306 | lordhoto | 2009-07-10 02:24:59 +1000 (Fri, 10 Jul 2009) | 1 line
Oops specify the correct revsision number in the fixme.
........
svn-id: r42318
Diffstat (limited to 'sound/iff_sound.cpp')
-rw-r--r-- | sound/iff_sound.cpp | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/sound/iff_sound.cpp b/sound/iff_sound.cpp new file mode 100644 index 0000000000..60a1486ed5 --- /dev/null +++ b/sound/iff_sound.cpp @@ -0,0 +1,106 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "sound/iff_sound.h" +#include "sound/audiostream.h" +#include "sound/mixer.h" +#include "common/func.h" + +namespace Audio { + +void Voice8Header::load(Common::ReadStream &stream) { + stream.read(this, sizeof(Voice8Header)); + oneShotHiSamples = FROM_BE_32(oneShotHiSamples); + repeatHiSamples = FROM_BE_32(repeatHiSamples); + samplesPerHiCycle = FROM_BE_32(samplesPerHiCycle); + samplesPerSec = FROM_BE_16(samplesPerSec); + volume = FROM_BE_32(volume); +} + + + +struct A8SVXLoader { + Voice8Header _header; + int8 *_data; + uint32 _dataSize; + + void load(Common::ReadStream &input) { + Common::IFFParser parser(&input); + Common::Functor1Mem< Common::IFFChunk&, bool, A8SVXLoader > c(this, &A8SVXLoader::callback); + parser.parse(c); + } + + bool callback(Common::IFFChunk &chunk) { + switch (chunk._type) { + case ID_VHDR: + _header.load(*chunk._stream); + break; + + case ID_BODY: + _dataSize = chunk._size; + _data = (int8*)malloc(_dataSize); + assert(_data); + loadData(chunk._stream); + return true; + } + + return false; + } + + void loadData(Common::ReadStream *stream) { + switch (_header.compression) { + case 0: + stream->read(_data, _dataSize); + break; + + case 1: + // implement other formats here + error("compressed IFF audio is not supported"); + break; + } + + } +}; + + +AudioStream *make8SVXStream(Common::ReadStream &input, bool loop) { + A8SVXLoader loader; + loader.load(input); + + uint32 loopStart = 0, loopEnd = 0, flags = 0; + if (loop) { + // the standard way to loop 8SVX audio implies use of the oneShotHiSamples and + // repeatHiSamples fields + loopStart = 0; + loopEnd = loader._header.oneShotHiSamples + loader._header.repeatHiSamples; + flags |= Audio::Mixer::FLAG_LOOP; + } + + flags |= Audio::Mixer::FLAG_AUTOFREE; + + return Audio::makeLinearInputStream((byte *)loader._data, loader._dataSize, loader._header.samplesPerSec, flags, loopStart, loopEnd); +} + +} |