aboutsummaryrefslogtreecommitdiff
path: root/engines/composer
diff options
context:
space:
mode:
Diffstat (limited to 'engines/composer')
-rw-r--r--engines/composer/composer.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/engines/composer/composer.cpp b/engines/composer/composer.cpp
index d2da61f5d6..60b31df77b 100644
--- a/engines/composer/composer.cpp
+++ b/engines/composer/composer.cpp
@@ -363,6 +363,8 @@ void ComposerEngine::playWaveForAnim(uint16 id, bool bufferingOnly) {
// FIXME: deal with word6 (priority)
byte *buffer = (byte *)malloc(stream->size());
stream->read(buffer, stream->size());
+ if (!_audioStream)
+ _audioStream = Audio::makeQueuingAudioStream(22050, false);
_audioStream->queueBuffer(buffer, stream->size(), DisposeAfterUse::YES, Audio::FLAG_UNSIGNED);
delete stream;
if (!_mixer->isSoundHandleActive(_soundHandle))
@@ -534,7 +536,6 @@ ComposerEngine::~ComposerEngine() {
for (Common::List<Library>::iterator i = _libraries.begin(); i != _libraries.end(); i++)
delete i->_archive;
- delete _audioStream;
delete _rnd;
}
@@ -567,8 +568,6 @@ Common::Error ComposerEngine::run() {
initGraphics(width, height, true);
_surface.create(width, height, Graphics::PixelFormat::createFormatCLUT8());
- _audioStream = Audio::makeQueuingAudioStream(22050, false);
-
loadLibrary(0);
uint fps = atoi(getStringFromConfig("Common", "FPS").c_str());
@@ -744,6 +743,9 @@ void ComposerEngine::unloadLibrary(uint id) {
}
_sprites.clear();
+ _mixer->stopAll();
+ _audioStream = NULL;
+
for (uint j = 0; j < _queuedScripts.size(); j++) {
_queuedScripts[j]._count = 0;
_queuedScripts[j]._scriptId = 0;