diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/composer/composer.cpp | 8 |
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; |