diff options
author | Torbjörn Andersson | 2008-07-31 13:45:58 +0000 |
---|---|---|
committer | Torbjörn Andersson | 2008-07-31 13:45:58 +0000 |
commit | b79f069c58fb8f90562b1ddacd52046b0d1d24be (patch) | |
tree | f22ce6b3700bb7a3bffe7db4468d05163262699a | |
parent | 342d0bd2876aff9f39ea249b10d61d2a92202791 (diff) | |
download | scummvm-rg350-b79f069c58fb8f90562b1ddacd52046b0d1d24be.tar.gz scummvm-rg350-b79f069c58fb8f90562b1ddacd52046b0d1d24be.tar.bz2 scummvm-rg350-b79f069c58fb8f90562b1ddacd52046b0d1d24be.zip |
Applied my patch #2030058 ("Workaround for incorrectly compressed FotAQ"), and
made a mention in NEWS that speech is played correctly now. Of course, we
should still provide a correctly compressed version at some point.
svn-id: r33471
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | engines/queen/sound.cpp | 43 |
2 files changed, 44 insertions, 3 deletions
@@ -30,6 +30,10 @@ For a more comprehensive changelog for the latest experimental SVN code, see: Simon the Sorcerer 1. - Fixed palette issues in Amiga versions of Simon the Sorcerer 1. + Queen: + - Speech is played at the correct sample rate. (It used to be pitched a bit + too low.) + SCUMM: - Rewrote parts of Digital iMUSE, fixing some bugs. - Rewrote the internal timer code, fixing some speed issues in e.g. COMI. diff --git a/engines/queen/sound.cpp b/engines/queen/sound.cpp index f4e0116cf1..27cf1bf6a2 100644 --- a/engines/queen/sound.cpp +++ b/engines/queen/sound.cpp @@ -35,6 +35,7 @@ #include "queen/queen.h" #include "queen/resource.h" +#include "sound/audiostream.h" #include "sound/flac.h" #include "sound/mididrv.h" #include "sound/mp3.h" @@ -45,6 +46,42 @@ namespace Queen { +// The sounds in the PC versions are all played at 11840 Hz. Unfortunately, we +// did not know that at the time, so there are plenty of compressed versions +// which claim that they should be played at 11025 Hz. This "wrapper" class +// works around that. + +class AudioStreamWrapper : public Audio::AudioStream { +protected: + Audio::AudioStream *_stream; + +public: + AudioStreamWrapper(Audio::AudioStream *stream) { + _stream = stream; + } + ~AudioStreamWrapper() { + delete _stream; + } + int readBuffer(int16 *buffer, const int numSamples) { + return _stream->readBuffer(buffer, numSamples); + } + bool isStereo() const { + return _stream->isStereo(); + } + bool endOfData() const { + return _stream->endOfData(); + } + bool endOfStream() { + return _stream->endOfStream(); + } + int getRate() const { + return 11840; + } + int32 getTotalPlayTime() { + return _stream->getTotalPlayTime(); + } +}; + class SilentSound : public PCSound { public: SilentSound(Audio::Mixer *mixer, QueenEngine *vm) : PCSound(mixer, vm) {} @@ -69,7 +106,7 @@ protected: void playSoundData(Common::File *f, uint32 size, Audio::SoundHandle *soundHandle) { Common::MemoryReadStream *tmp = f->readStream(size); assert(tmp); - _mixer->playInputStream(Audio::Mixer::kSFXSoundType, soundHandle, Audio::makeMP3Stream(tmp, true)); + _mixer->playInputStream(Audio::Mixer::kSFXSoundType, soundHandle, new AudioStreamWrapper(Audio::makeMP3Stream(tmp, true))); } }; #endif @@ -82,7 +119,7 @@ protected: void playSoundData(Common::File *f, uint32 size, Audio::SoundHandle *soundHandle) { Common::MemoryReadStream *tmp = f->readStream(size); assert(tmp); - _mixer->playInputStream(Audio::Mixer::kSFXSoundType, soundHandle, Audio::makeVorbisStream(tmp, true)); + _mixer->playInputStream(Audio::Mixer::kSFXSoundType, soundHandle, new AudioStreamWrapper(Audio::makeVorbisStream(tmp, true))); } }; #endif @@ -95,7 +132,7 @@ protected: void playSoundData(Common::File *f, uint32 size, Audio::SoundHandle *soundHandle) { Common::MemoryReadStream *tmp = f->readStream(size); assert(tmp); - _mixer->playInputStream(Audio::Mixer::kSFXSoundType, soundHandle, Audio::makeFlacStream(tmp, true)); + _mixer->playInputStream(Audio::Mixer::kSFXSoundType, soundHandle, new AudioStreamWrapper(Audio::makeFlacStream(tmp, true))); } }; #endif // #ifdef USE_FLAC |