diff options
Diffstat (limited to 'sound/decoders/vag.cpp')
-rw-r--r-- | sound/decoders/vag.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
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); +} + } |