aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrichiesams2013-07-15 10:35:23 -0500
committerrichiesams2013-08-04 13:32:18 -0500
commit644313e8f20fa777325c748a450ca698141c0d97 (patch)
treebc0e0d6a90b2f5f024430c769c2b660b3f5a0aef
parentc45a13cdd716da04c9b64ba50560d7d89facfccb (diff)
downloadscummvm-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.cpp6
-rw-r--r--engines/zvision/zork_raw.cpp24
-rw-r--r--engines/zvision/zork_raw.h13
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