diff options
author | Max Horn | 2010-01-28 09:38:21 +0000 |
---|---|---|
committer | Max Horn | 2010-01-28 09:38:21 +0000 |
commit | 1c906a1f08f9d1f316c2efd65a347c00e07bc469 (patch) | |
tree | e8f741ede9a33e2bd9748faeb4a46130a722f950 | |
parent | f85c77d63ea85d62cb5bbf55fe71dd9c42e6924b (diff) | |
download | scummvm-rg350-1c906a1f08f9d1f316c2efd65a347c00e07bc469.tar.gz scummvm-rg350-1c906a1f08f9d1f316c2efd65a347c00e07bc469.tar.bz2 scummvm-rg350-1c906a1f08f9d1f316c2efd65a347c00e07bc469.zip |
Hide VagStream implementation, only expose it via a factory method
svn-id: r47634
-rw-r--r-- | engines/sword1/music.cpp | 3 | ||||
-rw-r--r-- | engines/sword1/sound.cpp | 5 | ||||
-rw-r--r-- | engines/sword2/music.cpp | 2 | ||||
-rw-r--r-- | engines/sword2/sound.cpp | 2 | ||||
-rw-r--r-- | engines/tinsel/sound.cpp | 2 | ||||
-rw-r--r-- | sound/decoders/vag.cpp | 27 | ||||
-rw-r--r-- | sound/decoders/vag.h | 37 |
7 files changed, 51 insertions, 27 deletions
diff --git a/engines/sword1/music.cpp b/engines/sword1/music.cpp index a10e705656..4661b042af 100644 --- a/engines/sword1/music.cpp +++ b/engines/sword1/music.cpp @@ -33,6 +33,7 @@ #include "sword1/music.h" #include "sound/mixer.h" +#include "sound/audiostream.h" #include "sound/decoders/aiff.h" #include "sound/decoders/flac.h" #include "sound/decoders/mp3.h" @@ -137,7 +138,7 @@ bool MusicHandle::playPSX(uint16 id, bool loop) { // not over file size if ((size != 0) && (size != 0xffffffff) && ((int32)(offset + size) <= _file.size())) { _file.seek(offset, SEEK_SET); - _audioSource = Audio::makeLoopingAudioStream(new Audio::VagStream(_file.readStream(size)), loop ? 0 : 1); + _audioSource = Audio::makeLoopingAudioStream(Audio::makeVagStream(_file.readStream(size)), loop ? 0 : 1); fadeUp(); } else { _audioSource = NULL; diff --git a/engines/sword1/sound.cpp b/engines/sword1/sound.cpp index 43a5b25d76..a9fe37242b 100644 --- a/engines/sword1/sound.cpp +++ b/engines/sword1/sound.cpp @@ -36,6 +36,7 @@ #include "sword1/logic.h" #include "sword1/sword1.h" +#include "sound/audiostream.h" #include "sound/decoders/flac.h" #include "sound/decoders/mp3.h" #include "sound/decoders/raw.h" @@ -259,7 +260,7 @@ void Sound::playSample(QueueElement *elem) { if (SwordEngine::isPsx()) { uint32 size = READ_LE_UINT32(sampleData); - Audio::AudioStream *audStream = Audio::makeLoopingAudioStream(new Audio::VagStream(new Common::MemoryReadStream(sampleData + 4, size-4)), (_fxList[elem->id].type == FX_LOOP) ? 0 : 1); + Audio::AudioStream *audStream = Audio::makeLoopingAudioStream(Audio::makeVagStream(new Common::MemoryReadStream(sampleData + 4, size-4)), (_fxList[elem->id].type == FX_LOOP) ? 0 : 1); _mixer->playInputStream(Audio::Mixer::kSFXSoundType, &elem->handle, audStream, elem->id, volume, pan); } else { uint32 size = READ_LE_UINT32(sampleData + 0x28); @@ -367,7 +368,7 @@ bool Sound::startSpeech(uint16 roomNo, uint16 localNo) { _cowFile.seek(index * 2048); Common::MemoryReadStream *tmp = _cowFile.readStream(sampleSize); assert(tmp); - stream = new Audio::VagStream(tmp); + stream = Audio::makeVagStream(tmp); _mixer->playInputStream(Audio::Mixer::kSpeechSoundType, &_speechHandle, stream, SOUND_SPEECH_ID, speechVol, speechPan); // with compressed audio, we can't calculate the wave volume. // so default to talking. diff --git a/engines/sword2/music.cpp b/engines/sword2/music.cpp index a7d5bf50c2..11dda11470 100644 --- a/engines/sword2/music.cpp +++ b/engines/sword2/music.cpp @@ -302,7 +302,7 @@ Audio::AudioStream *makePSXCLUStream(Common::File *file, int size) { byte *buffer = (byte *)malloc(size); file->read(buffer, size); - return new Audio::VagStream(new Common::MemoryReadStream(buffer, size, DisposeAfterUse::YES)); + return Audio::makeVagStream(new Common::MemoryReadStream(buffer, size, DisposeAfterUse::YES)); } // ---------------------------------------------------------------------------- diff --git a/engines/sword2/sound.cpp b/engines/sword2/sound.cpp index 5de38fde9c..4273da67b8 100644 --- a/engines/sword2/sound.cpp +++ b/engines/sword2/sound.cpp @@ -334,7 +334,7 @@ int32 Sound::playFx(Audio::SoundHandle *handle, byte *data, uint32 len, uint8 vo Audio::RewindableAudioStream *input = 0; if (Sword2Engine::isPsx()) - input = new Audio::VagStream(stream); + input = Audio::makeVagStream(stream); else input = Audio::makeWAVStream(stream, DisposeAfterUse::YES); diff --git a/engines/tinsel/sound.cpp b/engines/tinsel/sound.cpp index ccb978f45e..379f1f2bb0 100644 --- a/engines/tinsel/sound.cpp +++ b/engines/tinsel/sound.cpp @@ -109,7 +109,7 @@ bool SoundManager::playSample(int id, Audio::Mixer::SoundType type, Audio::Sound if (TinselV1PSX) { // Read the stream and create a VAG Audio stream - Audio::AudioStream *vagStream = new Audio::VagStream(_sampleStream.readStream(sampleLen), 44100); + Audio::AudioStream *vagStream = Audio::makeVagStream(_sampleStream.readStream(sampleLen), 44100); // FIXME: Should set this in a different place ;) _vm->_mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, _vm->_config->_soundVolume); diff --git a/sound/decoders/vag.cpp b/sound/decoders/vag.cpp index f2c9281d80..d3f0811f2b 100644 --- a/sound/decoders/vag.cpp +++ b/sound/decoders/vag.cpp @@ -24,9 +24,32 @@ */ #include "sound/decoders/vag.h" +#include "sound/audiostream.h" +#include "common/stream.h" namespace Audio { +class VagStream : public Audio::RewindableAudioStream { +public: + VagStream(Common::SeekableReadStream *stream, int rate); + ~VagStream(); + + bool isStereo() const { return false; } + bool endOfData() const { return _stream->pos() == _stream->size(); } + int getRate() const { return _rate; } + int readBuffer(int16 *buffer, const int numSamples); + + bool rewind(); +private: + Common::SeekableReadStream *_stream; + + byte _predictor; + double _samples[28]; + byte _samplesRemaining; + int _rate; + double _s1, _s2; +}; + VagStream::VagStream(Common::SeekableReadStream *stream, int rate) : _stream(stream) { _samplesRemaining = 0; _predictor = 0; @@ -120,4 +143,8 @@ bool VagStream::rewind() { return true; } +RewindableAudioStream *makeVagStream(Common::SeekableReadStream *stream, int rate) { + return new VagStream(stream, rate); +} + } diff --git a/sound/decoders/vag.h b/sound/decoders/vag.h index d659a7db4e..7e0ed255be 100644 --- a/sound/decoders/vag.h +++ b/sound/decoders/vag.h @@ -34,31 +34,26 @@ #ifndef SOUND_VAG_H #define SOUND_VAG_H -#include "sound/audiostream.h" -#include "common/stream.h" +namespace Common { + class SeekableReadStream; +} namespace Audio { -class VagStream : public Audio::RewindableAudioStream { -public: - VagStream(Common::SeekableReadStream *stream, int rate = 11025); - ~VagStream(); +class AudioStream; +class RewindableAudioStream; - bool isStereo() const { return false; } - bool endOfData() const { return _stream->pos() == _stream->size(); } - int getRate() const { return _rate; } - int readBuffer(int16 *buffer, const int numSamples); - - bool rewind(); -private: - Common::SeekableReadStream *_stream; - - byte _predictor; - double _samples[28]; - byte _samplesRemaining; - int _rate; - double _s1, _s2; -}; +/** + * Takes an input stream containing Vag sound data and creates + * an RewindableAudioStream from that. + * + * @param stream the SeekableReadStream from which to read the ADPCM data + * @param rate the sampling rate + * @return a new RewindableAudioStream, or NULL, if an error occured + */ +RewindableAudioStream *makeVagStream( + Common::SeekableReadStream *stream, + int rate = 11025); } // End of namespace Sword1 |