aboutsummaryrefslogtreecommitdiff
path: root/scumm
diff options
context:
space:
mode:
Diffstat (limited to 'scumm')
-rw-r--r--scumm/smush/smush_mixer.cpp14
-rw-r--r--scumm/smush/smush_mixer.h2
-rw-r--r--scumm/smush/smush_player.cpp9
-rw-r--r--scumm/smush/smush_player.h3
4 files changed, 20 insertions, 8 deletions
diff --git a/scumm/smush/smush_mixer.cpp b/scumm/smush/smush_mixer.cpp
index 3c0471e178..f7309cb87e 100644
--- a/scumm/smush/smush_mixer.cpp
+++ b/scumm/smush/smush_mixer.cpp
@@ -93,7 +93,8 @@ bool SmushMixer::handleFrame() {
delete _channels[i].chan;
_channels[i].id = -1;
_channels[i].chan = NULL;
- _mixer->endStream(_channels[i].handle);
+ _channels[i].stream->finish();
+ _channels[i].stream = 0;
} else {
int32 rate, vol, pan;
bool stereo, is_16bit;
@@ -119,11 +120,13 @@ bool SmushMixer::handleFrame() {
}
if (_mixer->isReady()) {
- if (!_channels[i].handle.isActive())
- _mixer->newStream(&_channels[i].handle, rate, flags, 500000);
+ if (!_channels[i].handle.isActive()) {
+ _channels[i].stream = makeAppendableAudioStream(rate, flags, 500000);
+ _mixer->playInputStream(&_channels[i].handle, _channels[i].stream, false);
+ }
_mixer->setChannelVolume(_channels[i].handle, vol);
_mixer->setChannelBalance(_channels[i].handle, pan);
- _mixer->appendStream(_channels[i].handle, data, size);
+ _channels[i].stream->append((byte *)data, size);
}
free(data);
}
@@ -139,7 +142,8 @@ bool SmushMixer::stop() {
delete _channels[i].chan;
_channels[i].id = -1;
_channels[i].chan = NULL;
- _mixer->endStream(_channels[i].handle);
+ _channels[i].stream->finish();
+ _channels[i].stream = 0;
}
}
return true;
diff --git a/scumm/smush/smush_mixer.h b/scumm/smush/smush_mixer.h
index da6b4be6f7..73f83ae578 100644
--- a/scumm/smush/smush_mixer.h
+++ b/scumm/smush/smush_mixer.h
@@ -23,6 +23,7 @@
#define SMUSH_MIXER_H
#include "stdafx.h"
+#include "sound/audiostream.h"
#include "sound/mixer.h"
namespace Scumm {
@@ -40,6 +41,7 @@ private:
int id;
SmushChannel *chan;
PlayingSoundHandle handle;
+ AppendableAudioStream *stream;
} _channels[NUM_CHANNELS];
int _soundFrequency;
diff --git a/scumm/smush/smush_player.cpp b/scumm/smush/smush_player.cpp
index 5d6d764bf7..3852ebbb59 100644
--- a/scumm/smush/smush_player.cpp
+++ b/scumm/smush/smush_player.cpp
@@ -314,6 +314,7 @@ void SmushPlayer::release() {
_vm->_mixer->stopHandle(_compressedFileSoundHandle);
_vm->_mixer->stopHandle(_IACTchannel);
+ _IACTstream = 0;
_vm->_fullRedraw = true;
@@ -494,9 +495,11 @@ void SmushPlayer::handleIACT(Chunk &b) {
}
} while (--count);
- if (!_IACTchannel.isActive())
- _vm->_mixer->newStream(&_IACTchannel, 22050, SoundMixer::FLAG_STEREO | SoundMixer::FLAG_16BITS, 400000);
- _vm->_mixer->appendStream(_IACTchannel, output_data, 0x1000);
+ if (!_IACTchannel.isActive()) {
+ _IACTstream = makeAppendableAudioStream(22050, SoundMixer::FLAG_STEREO | SoundMixer::FLAG_16BITS, 400000);
+ _vm->_mixer->playInputStream(&_IACTchannel, _IACTstream, false);
+ }
+ _IACTstream->append(output_data, 0x1000);
bsize -= len;
d_src += len;
diff --git a/scumm/smush/smush_player.h b/scumm/smush/smush_player.h
index b9c0b5c7de..d0ce75da41 100644
--- a/scumm/smush/smush_player.h
+++ b/scumm/smush/smush_player.h
@@ -26,6 +26,7 @@
#include "scumm/smush/chunk.h"
#include "scumm/smush/codec37.h"
#include "scumm/smush/codec47.h"
+#include "sound/audiostream.h"
#include "sound/mixer.h"
namespace Scumm {
@@ -57,6 +58,8 @@ private:
int32 _frame;
PlayingSoundHandle _IACTchannel;
+ AppendableAudioStream *_IACTstream;
+
PlayingSoundHandle _compressedFileSoundHandle;
bool _compressedFileMode;
File _compressedFile;