From 14e0c182f3fdc54ef8b334d15f69771e388ef951 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Thu, 18 Jul 2013 19:01:13 -0700 Subject: [PATCH] Allow specifying the sound type to playSound and playSound3D --- apps/openmw/mwbase/soundmanager.hpp | 12 +++++++----- apps/openmw/mwclass/light.cpp | 4 +++- apps/openmw/mwgui/bookwindow.cpp | 2 +- apps/openmw/mwgui/scrollwindow.cpp | 2 +- apps/openmw/mwscript/soundextensions.cpp | 12 ++++++++---- apps/openmw/mwsound/soundmanagerimp.cpp | 15 +++++++++------ apps/openmw/mwsound/soundmanagerimp.hpp | 7 +++---- apps/openmw/mwworld/action.cpp | 10 +++------- apps/openmw/mwworld/weather.cpp | 4 ++-- 9 files changed, 37 insertions(+), 31 deletions(-) diff --git a/apps/openmw/mwbase/soundmanager.hpp b/apps/openmw/mwbase/soundmanager.hpp index 5d396fac07..2a3ef980c0 100644 --- a/apps/openmw/mwbase/soundmanager.hpp +++ b/apps/openmw/mwbase/soundmanager.hpp @@ -46,9 +46,10 @@ namespace MWBase enum PlayType { Play_TypeSfx = 1<<3, /* Normal SFX sound */ Play_TypeVoice = 1<<4, /* Voice sound */ - Play_TypeMusic = 1<<5, /* Music track */ - Play_TypeMovie = 1<<6, /* Movie audio track */ - Play_TypeMask = Play_TypeSfx|Play_TypeVoice|Play_TypeMusic|Play_TypeMovie + Play_TypeFoot = 1<<5, /* Footstep sound */ + Play_TypeMusic = 1<<6, /* Music track */ + Play_TypeMovie = 1<<7, /* Movie audio track */ + Play_TypeMask = Play_TypeSfx|Play_TypeVoice|Play_TypeFoot|Play_TypeMusic|Play_TypeMovie }; private: @@ -102,11 +103,12 @@ namespace MWBase ///< Play a 2D audio track, using a custom decoder virtual SoundPtr playSound(const std::string& soundId, float volume, float pitch, - PlayMode mode=Play_Normal) = 0; + PlayType type=Play_TypeSfx, PlayMode mode=Play_Normal) = 0; ///< Play a sound, independently of 3D-position virtual SoundPtr playSound3D(const MWWorld::Ptr &reference, const std::string& soundId, - float volume, float pitch, PlayMode mode=Play_Normal) = 0; + float volume, float pitch, PlayType type=Play_TypeSfx, + PlayMode mode=Play_Normal) = 0; ///< Play a sound from an object virtual void stopSound3D(const MWWorld::Ptr &reference, const std::string& soundId) = 0; diff --git a/apps/openmw/mwclass/light.cpp b/apps/openmw/mwclass/light.cpp index d88eec71be..b5ad0fe669 100644 --- a/apps/openmw/mwclass/light.cpp +++ b/apps/openmw/mwclass/light.cpp @@ -53,7 +53,9 @@ namespace MWClass physics.addObject(ptr,ref->mBase->mData.mFlags & ESM::Light::Carry); if (!ref->mBase->mSound.empty()) - MWBase::Environment::get().getSoundManager()->playSound3D(ptr, ref->mBase->mSound, 1.0, 1.0, MWBase::SoundManager::Play_Loop); + MWBase::Environment::get().getSoundManager()->playSound3D(ptr, ref->mBase->mSound, 1.0, 1.0, + MWBase::SoundManager::Play_TypeSfx, + MWBase::SoundManager::Play_Loop); } std::string Light::getModel(const MWWorld::Ptr &ptr) const diff --git a/apps/openmw/mwgui/bookwindow.cpp b/apps/openmw/mwgui/bookwindow.cpp index f24922e23d..849f6052be 100644 --- a/apps/openmw/mwgui/bookwindow.cpp +++ b/apps/openmw/mwgui/bookwindow.cpp @@ -120,7 +120,7 @@ namespace MWGui void BookWindow::onTakeButtonClicked (MyGUI::Widget* sender) { - MWBase::Environment::get().getSoundManager()->playSound ("Item Book Up", 1.0, 1.0, MWBase::SoundManager::Play_NoTrack); + MWBase::Environment::get().getSoundManager()->playSound("Item Book Up", 1.0, 1.0); MWWorld::ActionTake take(mBook); take.execute (MWBase::Environment::get().getWorld()->getPlayer().getPlayer()); diff --git a/apps/openmw/mwgui/scrollwindow.cpp b/apps/openmw/mwgui/scrollwindow.cpp index eb46b9c1e6..48931b18e7 100644 --- a/apps/openmw/mwgui/scrollwindow.cpp +++ b/apps/openmw/mwgui/scrollwindow.cpp @@ -87,7 +87,7 @@ namespace MWGui void ScrollWindow::onTakeButtonClicked (MyGUI::Widget* _sender) { - MWBase::Environment::get().getSoundManager()->playSound ("Item Book Up", 1.0, 1.0, MWBase::SoundManager::Play_NoTrack); + MWBase::Environment::get().getSoundManager()->playSound("Item Book Up", 1.0, 1.0); MWWorld::ActionTake take(mScroll); take.execute (MWBase::Environment::get().getWorld()->getPlayer().getPlayer()); diff --git a/apps/openmw/mwscript/soundextensions.cpp b/apps/openmw/mwscript/soundextensions.cpp index 408a6f29d2..e4c7a4968c 100644 --- a/apps/openmw/mwscript/soundextensions.cpp +++ b/apps/openmw/mwscript/soundextensions.cpp @@ -118,8 +118,10 @@ namespace MWScript std::string sound = runtime.getStringLiteral (runtime[0].mInteger); runtime.pop(); - MWBase::Environment::get().getSoundManager()->playSound3D (ptr, sound, 1.0, 1.0, mLoop ? MWBase::SoundManager::Play_Loop : - MWBase::SoundManager::Play_Normal); + MWBase::Environment::get().getSoundManager()->playSound3D(ptr, sound, 1.0, 1.0, + MWBase::SoundManager::Play_TypeSfx, + mLoop ? MWBase::SoundManager::Play_Loop : + MWBase::SoundManager::Play_Normal); } }; @@ -145,8 +147,10 @@ namespace MWScript Interpreter::Type_Float pitch = runtime[0].mFloat; runtime.pop(); - MWBase::Environment::get().getSoundManager()->playSound3D (ptr, sound, volume, pitch, mLoop ? MWBase::SoundManager::Play_Loop : - MWBase::SoundManager::Play_Normal); + MWBase::Environment::get().getSoundManager()->playSound3D(ptr, sound, volume, pitch, + MWBase::SoundManager::Play_TypeSfx, + mLoop ? MWBase::SoundManager::Play_Loop : + MWBase::SoundManager::Play_Normal); } }; diff --git a/apps/openmw/mwsound/soundmanagerimp.cpp b/apps/openmw/mwsound/soundmanagerimp.cpp index 69e3016767..8192ff5aee 100644 --- a/apps/openmw/mwsound/soundmanagerimp.cpp +++ b/apps/openmw/mwsound/soundmanagerimp.cpp @@ -150,6 +150,9 @@ namespace MWSound case Play_TypeVoice: volume *= mVoiceVolume; break; + case Play_TypeFoot: + volume *= mFootstepsVolume; + break; case Play_TypeMusic: case Play_TypeMovie: volume *= mMusicVolume; @@ -314,18 +317,18 @@ namespace MWSound } - MWBase::SoundPtr SoundManager::playSound(const std::string& soundId, float volume, float pitch, PlayMode mode) + MWBase::SoundPtr SoundManager::playSound(const std::string& soundId, float volume, float pitch, PlayType type, PlayMode mode) { MWBase::SoundPtr sound; if(!mOutput->isInitialized()) return sound; try { - float basevol = volumeFromType(Play_TypeSfx); + float basevol = volumeFromType(type); float min, max; std::string file = lookup(soundId, volume, min, max); - sound = mOutput->playSound(file, volume, basevol, pitch, mode|Play_TypeSfx); + sound = mOutput->playSound(file, volume, basevol, pitch, mode|type); mActiveSounds[sound] = std::make_pair(MWWorld::Ptr(), soundId); } catch(std::exception &e) @@ -336,7 +339,7 @@ namespace MWSound } MWBase::SoundPtr SoundManager::playSound3D(const MWWorld::Ptr &ptr, const std::string& soundId, - float volume, float pitch, PlayMode mode) + float volume, float pitch, PlayType type, PlayMode mode) { MWBase::SoundPtr sound; if(!mOutput->isInitialized()) @@ -344,13 +347,13 @@ namespace MWSound try { // Look up the sound in the ESM data - float basevol = volumeFromType(Play_TypeSfx); + float basevol = volumeFromType(type); float min, max; std::string file = lookup(soundId, volume, min, max); const ESM::Position &pos = ptr.getRefData().getPosition();; const Ogre::Vector3 objpos(pos.pos[0], pos.pos[1], pos.pos[2]); - sound = mOutput->playSound3D(file, objpos, volume, basevol, pitch, min, max, mode|Play_TypeSfx); + sound = mOutput->playSound3D(file, objpos, volume, basevol, pitch, min, max, mode|type); if((mode&Play_NoTrack)) mActiveSounds[sound] = std::make_pair(MWWorld::Ptr(), soundId); else diff --git a/apps/openmw/mwsound/soundmanagerimp.hpp b/apps/openmw/mwsound/soundmanagerimp.hpp index 2af26d3dbb..5fcab14e22 100644 --- a/apps/openmw/mwsound/soundmanagerimp.hpp +++ b/apps/openmw/mwsound/soundmanagerimp.hpp @@ -35,8 +35,6 @@ namespace MWSound float mSFXVolume; float mMusicVolume; float mVoiceVolume; - - // not implemented float mFootstepsVolume; boost::shared_ptr mMusic; @@ -108,11 +106,12 @@ namespace MWSound virtual MWBase::SoundPtr playTrack(const DecoderPtr& decoder, PlayType type); ///< Play a 2D audio track, using a custom decoder - virtual MWBase::SoundPtr playSound(const std::string& soundId, float volume, float pitch, PlayMode mode=Play_Normal); + virtual MWBase::SoundPtr playSound(const std::string& soundId, float volume, float pitch, PlayType type=Play_TypeSfx, PlayMode mode=Play_Normal); ///< Play a sound, independently of 3D-position virtual MWBase::SoundPtr playSound3D(const MWWorld::Ptr &reference, const std::string& soundId, - float volume, float pitch, PlayMode mode=Play_Normal); + float volume, float pitch, PlayType type=Play_TypeSfx, + PlayMode mode=Play_Normal); ///< Play a sound from an object virtual void stopSound3D(const MWWorld::Ptr &reference, const std::string& soundId); diff --git a/apps/openmw/mwworld/action.cpp b/apps/openmw/mwworld/action.cpp index a5199fb3ea..a37d007271 100644 --- a/apps/openmw/mwworld/action.cpp +++ b/apps/openmw/mwworld/action.cpp @@ -21,17 +21,13 @@ void MWWorld::Action::execute (const Ptr& actor) if (!mSoundId.empty()) { if (mKeepSound && actor.getRefData().getHandle()=="player") - { - // sound moves with player when teleporting - MWBase::Environment::get().getSoundManager()->playSound(mSoundId, 1.0, 1.0, - MWBase::SoundManager::Play_NoTrack); - } + MWBase::Environment::get().getSoundManager()->playSound(mSoundId, 1.0, 1.0); else { bool local = mTarget.isEmpty() || !mTarget.isInCell(); // no usable target - MWBase::Environment::get().getSoundManager()->playSound3D (local ? actor : mTarget, - mSoundId, 1.0, 1.0, + MWBase::Environment::get().getSoundManager()->playSound3D(local ? actor : mTarget, + mSoundId, 1.0, 1.0, MWBase::SoundManager::Play_TypeSfx, mKeepSound ? MWBase::SoundManager::Play_NoTrack : MWBase::SoundManager::Play_Normal); } } diff --git a/apps/openmw/mwworld/weather.cpp b/apps/openmw/mwworld/weather.cpp index 467d7e7c8f..6cdb131471 100644 --- a/apps/openmw/mwworld/weather.cpp +++ b/apps/openmw/mwworld/weather.cpp @@ -518,14 +518,14 @@ void WeatherManager::update(float duration) if (!ambientSnd.empty() && std::find(mSoundsPlaying.begin(), mSoundsPlaying.end(), ambientSnd) == mSoundsPlaying.end()) { mSoundsPlaying.push_back(ambientSnd); - MWBase::Environment::get().getSoundManager()->playSound(ambientSnd, 1.0, 1.0, MWBase::SoundManager::Play_Loop); + MWBase::Environment::get().getSoundManager()->playSound(ambientSnd, 1.0, 1.0, MWBase::SoundManager::Play_TypeSfx, MWBase::SoundManager::Play_Loop); } std::string rainSnd = mWeatherSettings[mCurrentWeather].mRainLoopSoundID; if (!rainSnd.empty() && std::find(mSoundsPlaying.begin(), mSoundsPlaying.end(), rainSnd) == mSoundsPlaying.end()) { mSoundsPlaying.push_back(rainSnd); - MWBase::Environment::get().getSoundManager()->playSound(rainSnd, 1.0, 1.0, MWBase::SoundManager::Play_Loop); + MWBase::Environment::get().getSoundManager()->playSound(rainSnd, 1.0, 1.0, MWBase::SoundManager::Play_TypeSfx, MWBase::SoundManager::Play_Loop); } }