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 | 
