From 21753098e1e30fbb4f845e3f56eaad0cdf2eaa35 Mon Sep 17 00:00:00 2001 From: Ori Avtalion Date: Sat, 21 May 2016 13:44:27 +0300 Subject: NEVERHOOD: Reduce audio header dependencies --- engines/neverhood/diskplayerscene.cpp | 1 + engines/neverhood/diskplayerscene.h | 2 +- engines/neverhood/menumodule.cpp | 2 + engines/neverhood/modules/module1300.cpp | 1 + engines/neverhood/modules/module1300.h | 3 +- engines/neverhood/modules/module1300_sprites.h | 1 - engines/neverhood/modules/module2800.cpp | 1 + engines/neverhood/navigationscene.h | 1 + engines/neverhood/neverhood.cpp | 2 + engines/neverhood/scene.cpp | 1 + engines/neverhood/scene.h | 2 +- engines/neverhood/screen.cpp | 1 + engines/neverhood/screen.h | 5 ++- engines/neverhood/smackerscene.cpp | 1 + engines/neverhood/sound.cpp | 61 ++++++++++++++++---------- engines/neverhood/sound.h | 25 ++++++----- 16 files changed, 71 insertions(+), 39 deletions(-) (limited to 'engines') diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp index 96a935851c..e79f4c9d77 100644 --- a/engines/neverhood/diskplayerscene.cpp +++ b/engines/neverhood/diskplayerscene.cpp @@ -22,6 +22,7 @@ #include "neverhood/diskplayerscene.h" #include "neverhood/mouse.h" +#include "neverhood/smackerplayer.h" namespace Neverhood { diff --git a/engines/neverhood/diskplayerscene.h b/engines/neverhood/diskplayerscene.h index 2ae85b9a0b..dba10f3a46 100644 --- a/engines/neverhood/diskplayerscene.h +++ b/engines/neverhood/diskplayerscene.h @@ -26,11 +26,11 @@ #include "neverhood/neverhood.h" #include "neverhood/resourceman.h" #include "neverhood/scene.h" -#include "neverhood/smackerplayer.h" namespace Neverhood { class DiskplayerScene; +class SmackerPlayer; class AsDiskplayerSceneKey : public AnimatedSprite { public: diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp index 0f2a421d83..e58dd31f03 100644 --- a/engines/neverhood/menumodule.cpp +++ b/engines/neverhood/menumodule.cpp @@ -23,6 +23,8 @@ #include "common/config-manager.h" #include "common/translation.h" +#include "audio/mixer.h" + #include "gui/saveload.h" #include "neverhood/menumodule.h" diff --git a/engines/neverhood/modules/module1300.cpp b/engines/neverhood/modules/module1300.cpp index 60ff0411a6..65bd353576 100644 --- a/engines/neverhood/modules/module1300.cpp +++ b/engines/neverhood/modules/module1300.cpp @@ -23,6 +23,7 @@ #include "neverhood/diskplayerscene.h" #include "neverhood/gamemodule.h" #include "neverhood/menumodule.h" +#include "neverhood/smackerplayer.h" #include "neverhood/modules/module1000_sprites.h" #include "neverhood/modules/module1200_sprites.h" #include "neverhood/modules/module1300.h" diff --git a/engines/neverhood/modules/module1300.h b/engines/neverhood/modules/module1300.h index 4a0ca6c062..8164a51d0d 100644 --- a/engines/neverhood/modules/module1300.h +++ b/engines/neverhood/modules/module1300.h @@ -26,10 +26,11 @@ #include "neverhood/neverhood.h" #include "neverhood/module.h" #include "neverhood/scene.h" -#include "neverhood/smackerplayer.h" namespace Neverhood { +class SmackerPlayer; + class Module1300 : public Module { public: Module1300(NeverhoodEngine *vm, Module *parentModule, int which); diff --git a/engines/neverhood/modules/module1300_sprites.h b/engines/neverhood/modules/module1300_sprites.h index 6f4faaa234..bf9f72a5a7 100644 --- a/engines/neverhood/modules/module1300_sprites.h +++ b/engines/neverhood/modules/module1300_sprites.h @@ -26,7 +26,6 @@ #include "neverhood/neverhood.h" #include "neverhood/module.h" #include "neverhood/scene.h" -#include "neverhood/smackerplayer.h" namespace Neverhood { diff --git a/engines/neverhood/modules/module2800.cpp b/engines/neverhood/modules/module2800.cpp index ab22390c7d..63d507d8fd 100644 --- a/engines/neverhood/modules/module2800.cpp +++ b/engines/neverhood/modules/module2800.cpp @@ -23,6 +23,7 @@ #include "neverhood/diskplayerscene.h" #include "neverhood/gamemodule.h" #include "neverhood/scene.h" +#include "neverhood/smackerplayer.h" #include "neverhood/modules/module1000_sprites.h" #include "neverhood/modules/module1200_sprites.h" #include "neverhood/modules/module1700_sprites.h" diff --git a/engines/neverhood/navigationscene.h b/engines/neverhood/navigationscene.h index 8e286effb9..e1dabfea3d 100644 --- a/engines/neverhood/navigationscene.h +++ b/engines/neverhood/navigationscene.h @@ -26,6 +26,7 @@ #include "neverhood/neverhood.h" #include "neverhood/resourceman.h" #include "neverhood/scene.h" +#include "neverhood/smackerplayer.h" namespace Neverhood { diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp index c6cff86c72..0dc271997b 100644 --- a/engines/neverhood/neverhood.cpp +++ b/engines/neverhood/neverhood.cpp @@ -24,6 +24,8 @@ #include "common/config-manager.h" #include "common/textconsole.h" +#include "audio/mixer.h" + #include "base/plugins.h" #include "base/version.h" diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp index 1a8e74da38..8ed988c0fc 100644 --- a/engines/neverhood/scene.cpp +++ b/engines/neverhood/scene.cpp @@ -22,6 +22,7 @@ #include "neverhood/console.h" #include "neverhood/scene.h" +#include "neverhood/smackerplayer.h" namespace Neverhood { diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h index 98a7fa5090..1d1faf28bc 100644 --- a/engines/neverhood/scene.h +++ b/engines/neverhood/scene.h @@ -31,13 +31,13 @@ #include "neverhood/klaymen.h" #include "neverhood/module.h" #include "neverhood/palette.h" -#include "neverhood/smackerplayer.h" #include "neverhood/sprite.h" #include "neverhood/staticdata.h" namespace Neverhood { class Console; +class SmackerPlayer; class Scene : public Entity { public: diff --git a/engines/neverhood/screen.cpp b/engines/neverhood/screen.cpp index cc735c4c16..5cc7998210 100644 --- a/engines/neverhood/screen.cpp +++ b/engines/neverhood/screen.cpp @@ -21,6 +21,7 @@ */ #include "graphics/palette.h" +#include "video/smk_decoder.h" #include "neverhood/screen.h" namespace Neverhood { diff --git a/engines/neverhood/screen.h b/engines/neverhood/screen.h index 82ce90b245..91bbe12c66 100644 --- a/engines/neverhood/screen.h +++ b/engines/neverhood/screen.h @@ -25,11 +25,14 @@ #include "common/array.h" #include "graphics/surface.h" -#include "video/smk_decoder.h" #include "neverhood/neverhood.h" #include "neverhood/microtiles.h" #include "neverhood/graphics.h" +namespace Video { + class SmackerDecoder; +} + namespace Neverhood { struct RenderItem { diff --git a/engines/neverhood/smackerscene.cpp b/engines/neverhood/smackerscene.cpp index 2b43579130..50677d7d5c 100644 --- a/engines/neverhood/smackerscene.cpp +++ b/engines/neverhood/smackerscene.cpp @@ -21,6 +21,7 @@ */ #include "neverhood/smackerscene.h" +#include "neverhood/smackerplayer.h" namespace Neverhood { diff --git a/engines/neverhood/sound.cpp b/engines/neverhood/sound.cpp index b15bea4a64..db22b72289 100644 --- a/engines/neverhood/sound.cpp +++ b/engines/neverhood/sound.cpp @@ -21,10 +21,17 @@ */ #include "common/memstream.h" -#include "graphics/palette.h" +#include "audio/mixer.h" #include "neverhood/sound.h" +#include "neverhood/resource.h" #include "neverhood/resourceman.h" +// Convert volume from percent to 0..255 +#define VOLUME(volume) (Audio::Mixer::kMaxChannelVolume / 100 * (volume)) + +// Convert panning from percent (50% equals center) to -127..0..+127 +#define PANNING(panning) (254 / 100 * (panning) - 127) + namespace Neverhood { SoundResource::SoundResource(NeverhoodEngine *vm) @@ -583,6 +590,11 @@ AudioResourceManSoundItem::AudioResourceManSoundItem(NeverhoodEngine *vm, uint32 _volume(100), _panning(50) { _vm->_res->queryResource(_fileHash, _resourceHandle); + _soundHandle = new Audio::SoundHandle(); +} + +AudioResourceManSoundItem::~AudioResourceManSoundItem() { + delete _soundHandle; } void AudioResourceManSoundItem::loadSound() { @@ -594,22 +606,22 @@ void AudioResourceManSoundItem::loadSound() { } void AudioResourceManSoundItem::unloadSound() { - if (_vm->_mixer->isSoundHandleActive(_soundHandle)) - _vm->_mixer->stopHandle(_soundHandle); + if (_vm->_mixer->isSoundHandleActive(*_soundHandle)) + _vm->_mixer->stopHandle(*_soundHandle); _vm->_res->unloadResource(_resourceHandle); _data = NULL; } void AudioResourceManSoundItem::setVolume(int16 volume) { _volume = MIN(volume, 100); - if (_isPlaying && _vm->_mixer->isSoundHandleActive(_soundHandle)) - _vm->_mixer->setChannelVolume(_soundHandle, VOLUME(_volume)); + if (_isPlaying && _vm->_mixer->isSoundHandleActive(*_soundHandle)) + _vm->_mixer->setChannelVolume(*_soundHandle, VOLUME(_volume)); } void AudioResourceManSoundItem::setPan(int16 pan) { _panning = MIN(pan, 100); - if (_isPlaying && _vm->_mixer->isSoundHandleActive(_soundHandle)) - _vm->_mixer->setChannelVolume(_soundHandle, PANNING(_panning)); + if (_isPlaying && _vm->_mixer->isSoundHandleActive(*_soundHandle)) + _vm->_mixer->setChannelVolume(*_soundHandle, PANNING(_panning)); } void AudioResourceManSoundItem::playSound(bool looping) { @@ -619,7 +631,7 @@ void AudioResourceManSoundItem::playSound(bool looping) { const byte *shiftValue = _resourceHandle.extData(); Common::MemoryReadStream *stream = new Common::MemoryReadStream(_data, _resourceHandle.size(), DisposeAfterUse::NO); NeverhoodAudioStream *audioStream = new NeverhoodAudioStream(22050, *shiftValue, looping, DisposeAfterUse::YES, stream); - _vm->_mixer->playStream(Audio::Mixer::kSFXSoundType, &_soundHandle, + _vm->_mixer->playStream(Audio::Mixer::kSFXSoundType, _soundHandle, audioStream, -1, VOLUME(_volume), PANNING(_panning)); debug(1, "playing sound %08X", _fileHash); _isPlaying = true; @@ -627,13 +639,13 @@ void AudioResourceManSoundItem::playSound(bool looping) { } void AudioResourceManSoundItem::stopSound() { - if (_vm->_mixer->isSoundHandleActive(_soundHandle)) - _vm->_mixer->stopHandle(_soundHandle); + if (_vm->_mixer->isSoundHandleActive(*_soundHandle)) + _vm->_mixer->stopHandle(*_soundHandle); _isPlaying = false; } bool AudioResourceManSoundItem::isPlaying() { - return _vm->_mixer->isSoundHandleActive(_soundHandle); + return _vm->_mixer->isSoundHandleActive(*_soundHandle); } AudioResourceManMusicItem::AudioResourceManMusicItem(NeverhoodEngine *vm, uint32 fileHash) @@ -641,6 +653,11 @@ AudioResourceManMusicItem::AudioResourceManMusicItem(NeverhoodEngine *vm, uint32 _volume(100), _panning(50), _start(false), _isFadingIn(false), _isFadingOut(false), _isPlaying(false), _fadeVolume(0), _fadeVolumeStep(0) { + _soundHandle = new Audio::SoundHandle(); +} + +AudioResourceManMusicItem::~AudioResourceManMusicItem() { + delete _soundHandle; } void AudioResourceManMusicItem::playMusic(int16 fadeVolumeStep) { @@ -658,7 +675,7 @@ void AudioResourceManMusicItem::playMusic(int16 fadeVolumeStep) { } void AudioResourceManMusicItem::stopMusic(int16 fadeVolumeStep) { - if (_vm->_mixer->isSoundHandleActive(_soundHandle)) { + if (_vm->_mixer->isSoundHandleActive(*_soundHandle)) { if (fadeVolumeStep != 0) { if (_isFadingIn) _isFadingIn = false; @@ -667,7 +684,7 @@ void AudioResourceManMusicItem::stopMusic(int16 fadeVolumeStep) { _isFadingOut = true; _fadeVolumeStep = fadeVolumeStep; } else { - _vm->_mixer->stopHandle(_soundHandle); + _vm->_mixer->stopHandle(*_soundHandle); } _isPlaying = false; } @@ -677,8 +694,8 @@ void AudioResourceManMusicItem::unloadMusic() { if (_isFadingOut) { _canRestart = true; } else { - if (_vm->_mixer->isSoundHandleActive(_soundHandle)) - _vm->_mixer->stopHandle(_soundHandle); + if (_vm->_mixer->isSoundHandleActive(*_soundHandle)) + _vm->_mixer->stopHandle(*_soundHandle); _isPlaying = false; _terminate = true; } @@ -686,8 +703,8 @@ void AudioResourceManMusicItem::unloadMusic() { void AudioResourceManMusicItem::setVolume(int16 volume) { _volume = MIN(volume, 100); - if (_isPlaying && _vm->_mixer->isSoundHandleActive(_soundHandle)) - _vm->_mixer->setChannelVolume(_soundHandle, VOLUME(_volume)); + if (_isPlaying && _vm->_mixer->isSoundHandleActive(*_soundHandle)) + _vm->_mixer->setChannelVolume(*_soundHandle, VOLUME(_volume)); } void AudioResourceManMusicItem::restart() { @@ -698,33 +715,33 @@ void AudioResourceManMusicItem::restart() { void AudioResourceManMusicItem::update() { - if (_start && !_vm->_mixer->isSoundHandleActive(_soundHandle)) { + if (_start && !_vm->_mixer->isSoundHandleActive(*_soundHandle)) { ResourceHandle resourceHandle; _vm->_res->queryResource(_fileHash, resourceHandle); Common::SeekableReadStream *stream = _vm->_res->createStream(_fileHash); const byte *shiftValue = resourceHandle.extData(); NeverhoodAudioStream *audioStream = new NeverhoodAudioStream(22050, *shiftValue, true, DisposeAfterUse::YES, stream); - _vm->_mixer->playStream(Audio::Mixer::kMusicSoundType, &_soundHandle, + _vm->_mixer->playStream(Audio::Mixer::kMusicSoundType, _soundHandle, audioStream, -1, VOLUME(_isFadingIn ? _fadeVolume : _volume), PANNING(_panning)); _start = false; _isPlaying = true; } - if (_vm->_mixer->isSoundHandleActive(_soundHandle)) { + if (_vm->_mixer->isSoundHandleActive(*_soundHandle)) { if (_isFadingIn) { _fadeVolume += _fadeVolumeStep; if (_fadeVolume >= _volume) { _fadeVolume = _volume; _isFadingIn = false; } - _vm->_mixer->setChannelVolume(_soundHandle, VOLUME(_fadeVolume)); + _vm->_mixer->setChannelVolume(*_soundHandle, VOLUME(_fadeVolume)); } if (_isFadingOut) { _fadeVolume -= _fadeVolumeStep; if (_fadeVolume < 0) _fadeVolume = 0; - _vm->_mixer->setChannelVolume(_soundHandle, VOLUME(_fadeVolume)); + _vm->_mixer->setChannelVolume(*_soundHandle, VOLUME(_fadeVolume)); if (_fadeVolume == 0) { _isFadingOut = false; stopMusic(0); diff --git a/engines/neverhood/sound.h b/engines/neverhood/sound.h index 24947f0191..e5e4ec9216 100644 --- a/engines/neverhood/sound.h +++ b/engines/neverhood/sound.h @@ -24,23 +24,22 @@ #define NEVERHOOD_SOUND_H #include "audio/audiostream.h" -#include "audio/mixer.h" #include "common/array.h" -#include "graphics/surface.h" -#include "neverhood/neverhood.h" -#include "neverhood/resource.h" +#include "neverhood/resourceman.h" -namespace Neverhood { +namespace Common { +class SeekableReadStream; +} -// Convert volume from percent to 0..255 -#define VOLUME(volume) (Audio::Mixer::kMaxChannelVolume / 100 * (volume)) +namespace Audio { +class SoundHandle; +} -// Convert panning from percent (50% equals center) to -127..0..+127 -#define PANNING(panning) (254 / 100 * (panning) - 127) +namespace Neverhood { +class NeverhoodEngine; class AudioResourceManSoundItem; class AudioResourceManMusicItem; -class AudioResourceMan; class SoundResource { public: @@ -214,6 +213,7 @@ private: class AudioResourceManSoundItem { public: AudioResourceManSoundItem(NeverhoodEngine *vm, uint32 fileHash); + ~AudioResourceManSoundItem(); void loadSound(); void unloadSound(); void setVolume(int16 volume); @@ -230,12 +230,13 @@ protected: bool _isPlaying; int16 _volume; int16 _panning; - Audio::SoundHandle _soundHandle; + Audio::SoundHandle *_soundHandle; }; class AudioResourceManMusicItem { public: AudioResourceManMusicItem(NeverhoodEngine *vm, uint32 fileHash); + ~AudioResourceManMusicItem(); void playMusic(int16 fadeVolumeStep); void stopMusic(int16 fadeVolumeStep); void unloadMusic(); @@ -259,7 +260,7 @@ protected: bool _isFadingOut; int16 _fadeVolume; int16 _fadeVolumeStep; - Audio::SoundHandle _soundHandle; + Audio::SoundHandle *_soundHandle; }; class AudioResourceMan { -- cgit v1.2.3