diff options
author | richiesams | 2013-07-15 10:35:23 -0500 |
---|---|---|
committer | richiesams | 2013-08-04 13:32:18 -0500 |
commit | 644313e8f20fa777325c748a450ca698141c0d97 (patch) | |
tree | bc0e0d6a90b2f5f024430c769c2b660b3f5a0aef | |
parent | c45a13cdd716da04c9b64ba50560d7d89facfccb (diff) | |
download | scummvm-rg350-644313e8f20fa777325c748a450ca698141c0d97.tar.gz scummvm-rg350-644313e8f20fa777325c748a450ca698141c0d97.tar.bz2 scummvm-rg350-644313e8f20fa777325c748a450ca698141c0d97.zip |
ZVISION: Add stereo/mono handling for Zork sound
-rw-r--r-- | engines/zvision/console.cpp | 6 | ||||
-rw-r--r-- | engines/zvision/zork_raw.cpp | 24 | ||||
-rw-r--r-- | engines/zvision/zork_raw.h | 13 |
3 files changed, 24 insertions, 19 deletions
diff --git a/engines/zvision/console.cpp b/engines/zvision/console.cpp index c3be4ba0f5..e0ca37c1d2 100644 --- a/engines/zvision/console.cpp +++ b/engines/zvision/console.cpp @@ -65,8 +65,8 @@ bool Console::cmdLoadVideo(int argc, const char **argv) { } bool Console::cmdLoadSound(int argc, const char **argv) { - if (argc != 3) { - DebugPrintf("Use loadsound <fileName> <rate> to load a video to the screen"); + if (argc != 4) { + DebugPrintf("Use loadsound <fileName> <rate> <stereo: 0 or 1> to load a video to the screen"); return true; } @@ -76,7 +76,7 @@ bool Console::cmdLoadSound(int argc, const char **argv) { return true; } - Audio::AudioStream *soundStream = makeRawZorkStream(wrapBufferedSeekableReadStream(file, 2048, DisposeAfterUse::YES), atoi(argv[2]), DisposeAfterUse::YES); + Audio::AudioStream *soundStream = makeRawZorkStream(wrapBufferedSeekableReadStream(file, 2048, DisposeAfterUse::YES), atoi(argv[2]), atoi(argv[3]), DisposeAfterUse::YES); Audio::SoundHandle handle; _engine->getMixer()->playStream(Audio::Mixer::kPlainSoundType, &handle, soundStream, -1, 100, 0, DisposeAfterUse::YES, false, false); diff --git a/engines/zvision/zork_raw.cpp b/engines/zvision/zork_raw.cpp index 69d8edd8df..c4b76d91fe 100644 --- a/engines/zvision/zork_raw.cpp +++ b/engines/zvision/zork_raw.cpp @@ -45,8 +45,9 @@ const int32 RawZorkStream::amplitudeLookupTable[89] = {0x0007, 0x0008, 0x0009, 0 0x1BDC, 0x1EA5, 0x21B6, 0x2515, 0x28CA, 0x2CDF, 0x315B, 0x364B, 0x3BB9, 0x41B2, 0x4844, 0x4F7E, 0x5771, 0x602F, 0x69CE, 0x7462, 0x7FFF}; -RawZorkStream::RawZorkStream(uint32 rate, DisposeAfterUse::Flag disposeStream, Common::SeekableReadStream *stream) +RawZorkStream::RawZorkStream(uint32 rate, bool stereo, DisposeAfterUse::Flag disposeStream, Common::SeekableReadStream *stream) : _rate(rate), + _stereo(stereo), _stream(stream, disposeStream), _endOfData(false) { _lastSample[0] = {0, 0}; @@ -64,14 +65,13 @@ int RawZorkStream::readBuffer(int16 *buffer, const int numSamples) { while (bytesRead < numSamples) { byte encodedSample = _stream->readByte(); - bytesRead++; - if (_stream->eos()) { _endOfData = true; return bytesRead; } + bytesRead++; - uint16 index = _lastSample[channel].index; + int16 index = _lastSample[channel].index; uint32 lookUpSample = amplitudeLookupTable[index]; int32 sample = 0; @@ -105,7 +105,7 @@ int RawZorkStream::readBuffer(int16 *buffer, const int numSamples) { _lastSample[channel].index = index; // Increment and wrap the channel - channel = (channel + 1) & 1; + channel = (channel + 1) & _stereo; } return bytesRead; @@ -122,16 +122,18 @@ bool RawZorkStream::rewind() { } Audio::RewindableAudioStream *makeRawZorkStream(Common::SeekableReadStream *stream, - int rate, - DisposeAfterUse::Flag disposeAfterUse) { + int rate, + bool stereo, + DisposeAfterUse::Flag disposeAfterUse) { assert(stream->size() % 2 == 0); - return new RawZorkStream(rate, disposeAfterUse, stream); + return new RawZorkStream(rate, stereo, disposeAfterUse, stream); } Audio::RewindableAudioStream *makeRawZorkStream(const byte *buffer, uint32 size, - int rate, - DisposeAfterUse::Flag disposeAfterUse) { - return makeRawZorkStream(new Common::MemoryReadStream(buffer, size, disposeAfterUse), rate, DisposeAfterUse::YES); + int rate, + bool stereo, + DisposeAfterUse::Flag disposeAfterUse) { + return makeRawZorkStream(new Common::MemoryReadStream(buffer, size, disposeAfterUse), rate, stereo, DisposeAfterUse::YES); } } // End of namespace ZVision diff --git a/engines/zvision/zork_raw.h b/engines/zvision/zork_raw.h index 43cf4d83d0..7386c87f86 100644 --- a/engines/zvision/zork_raw.h +++ b/engines/zvision/zork_raw.h @@ -36,7 +36,7 @@ namespace ZVision { */ class RawZorkStream : public Audio::RewindableAudioStream { public: - RawZorkStream(uint32 rate, DisposeAfterUse::Flag disposeStream, Common::SeekableReadStream *stream); + RawZorkStream(uint32 rate, bool stereo, DisposeAfterUse::Flag disposeStream, Common::SeekableReadStream *stream); ~RawZorkStream() { } @@ -46,6 +46,7 @@ private: Audio::Timestamp _playtime; // Calculated total play time Common::DisposablePtr<Common::SeekableReadStream> _stream; // Stream to read data from bool _endOfData; // Whether the stream end has been reached + bool _stereo; /** * Holds the frequency and index from the last sample @@ -92,8 +93,9 @@ private: * @return The new SeekableAudioStream (or 0 on failure). */ Audio::RewindableAudioStream *makeRawZorkStream(const byte *buffer, uint32 size, - int rate, - DisposeAfterUse::Flag disposeAfterUse = DisposeAfterUse::YES); + int rate, + bool stereo, + DisposeAfterUse::Flag disposeAfterUse = DisposeAfterUse::YES); /** * Creates an audio stream, which plays from the given stream. @@ -104,8 +106,9 @@ Audio::RewindableAudioStream *makeRawZorkStream(const byte *buffer, uint32 size, * @return The new SeekableAudioStream (or 0 on failure). */ Audio::RewindableAudioStream *makeRawZorkStream(Common::SeekableReadStream *stream, - int rate, - DisposeAfterUse::Flag disposeAfterUse = DisposeAfterUse::YES); + int rate, + bool stereo, + DisposeAfterUse::Flag disposeAfterUse = DisposeAfterUse::YES); } // End of namespace ZVision |