aboutsummaryrefslogtreecommitdiff
path: root/engines/sword1/music.cpp
diff options
context:
space:
mode:
authorJohannes Schickel2010-01-08 17:42:05 +0000
committerJohannes Schickel2010-01-08 17:42:05 +0000
commit549da55565e170d2b92011a87d3f16da1b107785 (patch)
tree1e0fed155e42d1977d636b11a6dd5444c0d80d3e /engines/sword1/music.cpp
parentc067bf053d994f6c7dd8ab7d2658d8a46aea3cb9 (diff)
downloadscummvm-rg350-549da55565e170d2b92011a87d3f16da1b107785.tar.gz
scummvm-rg350-549da55565e170d2b92011a87d3f16da1b107785.tar.bz2
scummvm-rg350-549da55565e170d2b92011a87d3f16da1b107785.zip
Remove custom AiffAudioStream and replace it by the use of makeLoopingAudioStream and makeAIFFStream.
svn-id: r47165
Diffstat (limited to 'engines/sword1/music.cpp')
-rw-r--r--engines/sword1/music.cpp117
1 files changed, 1 insertions, 116 deletions
diff --git a/engines/sword1/music.cpp b/engines/sword1/music.cpp
index dd86f27f43..c46f980cd0 100644
--- a/engines/sword1/music.cpp
+++ b/engines/sword1/music.cpp
@@ -44,121 +44,6 @@
namespace Sword1 {
-class BaseAudioStream : public Audio::AudioStream {
-public:
- BaseAudioStream(Common::SeekableReadStream *source, bool loop);
- virtual ~BaseAudioStream();
- virtual int readBuffer(int16 *buffer, const int numSamples);
- virtual bool isStereo() const { return _isStereo; }
- virtual bool endOfData() const { return (_samplesLeft == 0); }
- virtual int getRate() const { return _rate; }
-protected:
- Common::SeekableReadStream *_sourceStream;
- uint8 *_sampleBuf;
- uint32 _rate;
- bool _isStereo;
- uint32 _samplesLeft;
- uint16 _bitsPerSample;
- bool _loop;
-
- virtual void rewind() = 0;
- virtual void reinit(int size, int rate, byte flags);
-};
-
-BaseAudioStream::BaseAudioStream(Common::SeekableReadStream *source, bool loop) {
- _sourceStream = source;
- _sampleBuf = (uint8*)malloc(SMP_BUFSIZE);
-
- _samplesLeft = 0;
- _isStereo = false;
- _bitsPerSample = 16;
- _rate = 22050;
- _loop = loop;
-}
-
-BaseAudioStream::~BaseAudioStream() {
- free(_sampleBuf);
-}
-
-void BaseAudioStream::reinit(int size, int rate, byte flags) {
- _isStereo = (flags & Audio::Mixer::FLAG_STEREO) != 0;
- _rate = rate;
- assert(size <= (_sourceStream->size() - _sourceStream->pos()));
- _bitsPerSample = ((flags & Audio::Mixer::FLAG_16BITS) != 0) ? 16 : 8;
- _samplesLeft = (size * 8) / _bitsPerSample;
- if ((_bitsPerSample != 16) && (_bitsPerSample != 8))
- error("BaseAudioStream: unknown sound type");
-}
-
-int BaseAudioStream::readBuffer(int16 *buffer, const int numSamples) {
- int retVal = 0;
-
- while (retVal < numSamples && _samplesLeft > 0) {
- int samples = MIN((int)_samplesLeft, numSamples - retVal);
- retVal += samples;
- _samplesLeft -= samples;
- while (samples > 0) {
- int readBytes = MIN(samples * (_bitsPerSample >> 3), SMP_BUFSIZE);
- _sourceStream->read(_sampleBuf, readBytes);
- if (_bitsPerSample == 16) {
- samples -= (readBytes / 2);
- memcpy(buffer, _sampleBuf, readBytes);
- buffer += (readBytes / 2);
- } else {
- samples -= readBytes;
- int8 *src = (int8*)_sampleBuf;
- while (readBytes--)
- *buffer++ = (int16)*src++ << 8;
- }
- }
-
- if (!_samplesLeft && _loop) {
- rewind();
- }
- }
-
- return retVal;
-}
-
-
-class AiffAudioStream : public BaseAudioStream {
-public:
- AiffAudioStream(Common::SeekableReadStream *source, bool loop);
- virtual int readBuffer(int16 *buffer, const int numSamples);
-private:
- void rewind();
-};
-
-AiffAudioStream::AiffAudioStream(Common::SeekableReadStream *source, bool loop) : BaseAudioStream(source, loop) {
- rewind();
-
- if (_samplesLeft == 0)
- _loop = false;
-}
-
-void AiffAudioStream::rewind() {
- int rate, size;
- byte flags;
-
- _sourceStream->seek(0);
-
- if (Audio::loadAIFFFromStream(*_sourceStream, size, rate, flags)) {
- reinit(size, rate, flags);
- }
-}
-
-int AiffAudioStream::readBuffer(int16 *buffer, const int numSamples) {
- int retVal = BaseAudioStream::readBuffer(buffer, numSamples);
-
- if (_bitsPerSample == 16) {
- for (int i = 0; i < retVal; i++) {
- buffer[i] = (int16)READ_BE_UINT16(buffer + i);
- }
- }
-
- return retVal;
-}
-
// This means fading takes 3 seconds.
#define FADE_LENGTH 3
@@ -221,7 +106,7 @@ bool MusicHandle::play(const char *fileBase, bool loop) {
if (!_audioSource) {
sprintf(fileName, "%s.aif", fileBase);
if (_file.open(fileName))
- _audioSource = new AiffAudioStream(&_file, loop);
+ _audioSource = Audio::makeLoopingAudioStream(Audio::makeAIFFStream(_file), loop ? 0 : 1);
}
if (!_audioSource)