diff options
author | Matthew Hoops | 2010-06-10 15:06:25 +0000 |
---|---|---|
committer | Matthew Hoops | 2010-06-10 15:06:25 +0000 |
commit | 6ad04a4a96b0290125e33535f84a98e4d79dff2c (patch) | |
tree | a4074440e1e627447e1b33afaafa6c16f0adaa18 /engines/sci/sound | |
parent | 5330e632de917d603a6d246d53f4ed4e5bdf51ec (diff) | |
download | scummvm-rg350-6ad04a4a96b0290125e33535f84a98e4d79dff2c.tar.gz scummvm-rg350-6ad04a4a96b0290125e33535f84a98e4d79dff2c.tar.bz2 scummvm-rg350-6ad04a4a96b0290125e33535f84a98e4d79dff2c.zip |
Add support for AIFF sound in SCI32 Mac games and add support for AIFF/WAVE audio36 patches; minor cleanup.
svn-id: r49576
Diffstat (limited to 'engines/sci/sound')
-rw-r--r-- | engines/sci/sound/audio.cpp | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/engines/sci/sound/audio.cpp b/engines/sci/sound/audio.cpp index 7748c0505b..f10cc5ed68 100644 --- a/engines/sci/sound/audio.cpp +++ b/engines/sci/sound/audio.cpp @@ -24,21 +24,22 @@ */ #include "sci/resource.h" -#include "sci/engine/selector.h" #include "sci/engine/kernel.h" +#include "sci/engine/selector.h" #include "sci/engine/seg_manager.h" #include "sci/sound/audio.h" -#include "common/system.h" #include "common/file.h" +#include "common/system.h" -#include "sound/audiostream.h" #include "sound/audiocd.h" -#include "sound/decoders/raw.h" -#include "sound/decoders/wave.h" +#include "sound/audiostream.h" +#include "sound/decoders/aiff.h" #include "sound/decoders/flac.h" #include "sound/decoders/mp3.h" +#include "sound/decoders/raw.h" #include "sound/decoders/vorbis.h" +#include "sound/decoders/wave.h" namespace Sci { @@ -287,6 +288,19 @@ Audio::RewindableAudioStream *AudioPlayer::getAudioStream(uint32 number, uint32 waveStream->seek(0, SEEK_SET); audioStream = Audio::makeWAVStream(waveStream, DisposeAfterUse::YES); + } else if (audioRes->size > 4 && READ_BE_UINT32(audioRes->data) == MKID_BE('FORM')) { + // AIFF detected + Common::MemoryReadStream *waveStream = new Common::MemoryReadStream(audioRes->data, audioRes->size, DisposeAfterUse::NO); + + // Calculate samplelen from AIFF header + int waveSize = 0, waveRate = 0; + byte waveFlags = 0; + Audio::loadAIFFFromStream(*waveStream, waveSize, waveRate, waveFlags); + *sampleLen = (waveFlags & Audio::FLAG_16BITS ? waveSize >> 1 : waveSize) * 60 / waveRate; + + waveStream->seek(0, SEEK_SET); + audioStream = Audio::makeAIFFStream(*waveStream); + delete waveStream; // makeAIFFStream doesn't handle this for us } else if (audioRes->size > 14 && READ_BE_UINT16(audioRes->data) == 1 && READ_BE_UINT16(audioRes->data + 2) == 1 && READ_BE_UINT16(audioRes->data + 4) == 5 && READ_BE_UINT32(audioRes->data + 10) == 0x00018051) { // Mac snd detected |