diff options
author | Martin Kiewitz | 2015-06-06 22:50:36 +0200 |
---|---|---|
committer | Martin Kiewitz | 2015-06-06 22:50:36 +0200 |
commit | 97813f89ecd2a06c74f776708a3d1852c96811a7 (patch) | |
tree | 8a9d4bc96dcad8b2cc87bb116199cbdd1465f337 /audio/decoders/aiff.cpp | |
parent | 2ac05321aab74a4fced53f402f1b0cd16a33cc23 (diff) | |
download | scummvm-rg350-97813f89ecd2a06c74f776708a3d1852c96811a7.tar.gz scummvm-rg350-97813f89ecd2a06c74f776708a3d1852c96811a7.tar.bz2 scummvm-rg350-97813f89ecd2a06c74f776708a3d1852c96811a7.zip |
SHERLOCK: rework 3DO audio, add AIFC file support
- rework 3DO audio decoders to decode into buffer only
- 3DO audio decoders also use streams without separate size arg now
- add support for ADP4 + SDX2 inside AIFC files
- add debug command "3do_playaudio" to play AIFC files
- remove audio flags and replace with stereo bool
Diffstat (limited to 'audio/decoders/aiff.cpp')
-rw-r--r-- | audio/decoders/aiff.cpp | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/audio/decoders/aiff.cpp b/audio/decoders/aiff.cpp index 1fc811973f..3a5849f6fd 100644 --- a/audio/decoders/aiff.cpp +++ b/audio/decoders/aiff.cpp @@ -35,6 +35,7 @@ #include "audio/decoders/aiff.h" #include "audio/decoders/raw.h" +#include "audio/decoders/3do.h" namespace Audio { @@ -70,7 +71,13 @@ static const uint32 kVersionAIFC = MKTAG('A', 'I', 'F', 'C'); // Codecs static const uint32 kCodecPCM = MKTAG('N', 'O', 'N', 'E'); // very original -SeekableAudioStream *makeAIFFStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeAfterUse) { +// temporary Wrapper +// TODO: adjust all calling code to use makeAIFFAudioStream() and dynamic_cast +SeekableAudioStream *makeAIFFStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeAfterUse) { + return dynamic_cast<Audio::SeekableAudioStream *>(makeAIFFAudioStream(stream, disposeAfterUse)); +} + +AudioStream *makeAIFFAudioStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeAfterUse) { if (stream->readUint32BE() != MKTAG('F', 'O', 'R', 'M')) { warning("makeAIFFStream: No 'FORM' header"); @@ -185,6 +192,8 @@ SeekableAudioStream *makeAIFFStream(Common::SeekableReadStream *stream, DisposeA return 0; } + bool stereo = channels > 1 ? true : false; + switch (codec) { case kCodecPCM: case MKTAG('t', 'w', 'o', 's'): @@ -193,7 +202,7 @@ SeekableAudioStream *makeAIFFStream(Common::SeekableReadStream *stream, DisposeA byte rawFlags = 0; if (bitsPerSample == 16) rawFlags |= Audio::FLAG_16BITS; - if (channels == 2) + if (stereo) rawFlags |= Audio::FLAG_STEREO; if (codec == MKTAG('s', 'o', 'w', 't')) rawFlags |= Audio::FLAG_LITTLE_ENDIAN; @@ -211,10 +220,16 @@ SeekableAudioStream *makeAIFFStream(Common::SeekableReadStream *stream, DisposeA // (But hopefully never needed) warning("Unhandled AIFF-C QDM2 compression"); break; + case MKTAG('A', 'D', 'P', '4'): + // ADP4 on 3DO + return make3DO_ADP4AudioStream(dataStream, rate, stereo); + case MKTAG('S', 'D', 'X', '2'): + // SDX2 on 3DO + return make3DO_SDX2AudioStream(dataStream, rate, stereo); default: warning("Unhandled AIFF-C compression tag '%s'", tag2str(codec)); } - + delete dataStream; return 0; } |