MWBase::SoundPtr SoundManager::playSound3D(const MWWorld::Ptr &ptr, const std::string& soundId, float volume, float pitch, PlayType type, PlayMode mode, float offset) { MWBase::SoundPtr sound; if(!mOutput->isInitialized()) return sound; try { // Look up the sound in the ESM data float basevol = volumeFromType(type); float min, max; std::string file = lookup(soundId, volume, min, max); const ESM::Position &pos = ptr.getRefData().getPosition(); const osg::Vec3f objpos(pos.asVec3()); if ((mode & Play_RemoveAtDistance) && (mListenerPos-objpos).length2() > 2000*2000) { return MWBase::SoundPtr(); } sound = mOutput->playSound3D(file, objpos, volume, basevol, pitch, min, max, mode|type, offset); if((mode&Play_NoTrack)) mActiveSounds[sound] = std::make_pair(MWWorld::Ptr(), soundId); else mActiveSounds[sound] = std::make_pair(ptr, soundId); } catch(std::exception&) { //std::cout <<"Sound Error: "<<e.what()<< std::endl; } return sound; }
void SoundManager::say(const MWWorld::Ptr &ptr, const std::string& filename) { if(!mOutput->isInitialized()) return; try { float basevol = volumeFromType(Play_TypeVoice); std::string filePath = "Sound/"+filename; const ESM::Position &pos = ptr.getRefData().getPosition(); const osg::Vec3f objpos(pos.asVec3()); MWBase::World* world = MWBase::Environment::get().getWorld(); static const float fAudioMinDistanceMult = world->getStore().get<ESM::GameSetting>().find("fAudioMinDistanceMult")->getFloat(); static const float fAudioMaxDistanceMult = world->getStore().get<ESM::GameSetting>().find("fAudioMaxDistanceMult")->getFloat(); static const float fAudioVoiceDefaultMinDistance = world->getStore().get<ESM::GameSetting>().find("fAudioVoiceDefaultMinDistance")->getFloat(); static const float fAudioVoiceDefaultMaxDistance = world->getStore().get<ESM::GameSetting>().find("fAudioVoiceDefaultMaxDistance")->getFloat(); float minDistance = fAudioVoiceDefaultMinDistance * fAudioMinDistanceMult; float maxDistance = fAudioVoiceDefaultMaxDistance * fAudioMaxDistanceMult; minDistance = std::max(minDistance, 1.f); maxDistance = std::max(minDistance, maxDistance); MWBase::SoundPtr sound = mOutput->playSound3D(filePath, objpos, 1.0f, basevol, 1.0f, minDistance, maxDistance, Play_Normal|Play_TypeVoice, 0, true); mActiveSounds[sound] = std::make_pair(ptr, std::string("_say_sound")); } catch(std::exception &e) { std::cout <<"Sound Error: "<<e.what()<< std::endl; } }
MWBase::SoundPtr SoundManager::playSound3D(const MWWorld::Ptr &ptr, const std::string& soundId, float volume, float pitch, PlayMode mode) { MWBase::SoundPtr sound; if(!mOutput->isInitialized()) return sound; try { // Look up the sound in the ESM data float basevol = volumeFromType(Play_TypeSfx); 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); if((mode&Play_NoTrack)) mActiveSounds[sound] = std::make_pair(MWWorld::Ptr(), soundId); else mActiveSounds[sound] = std::make_pair(ptr, soundId); } catch(std::exception &e) { //std::cout <<"Sound Error: "<<e.what()<< std::endl; } return sound; }
void SoundManager::processChangedSettings(const Settings::CategorySettingVector& settings) { mMasterVolume = Settings::Manager::getFloat("master volume", "Sound"); mMusicVolume = Settings::Manager::getFloat("music volume", "Sound"); mSFXVolume = Settings::Manager::getFloat("sfx volume", "Sound"); mFootstepsVolume = Settings::Manager::getFloat("footsteps volume", "Sound"); mVoiceVolume = Settings::Manager::getFloat("voice volume", "Sound"); SoundMap::iterator snditer = mActiveSounds.begin(); while(snditer != mActiveSounds.end()) { snditer->first->mBaseVolume = volumeFromType(snditer->first->getPlayType()); snditer->first->update(); ++snditer; } if(mMusic) { mMusic->mBaseVolume = volumeFromType(mMusic->getPlayType()); mMusic->update(); } }
MWBase::SoundPtr SoundManager::playTrack(const DecoderPtr& decoder, PlayType type) { MWBase::SoundPtr track; if(!mOutput->isInitialized()) return track; try { track = mOutput->streamSound(decoder, volumeFromType(type), 1.0f, Play_NoEnv|type); } catch(std::exception &e) { std::cout <<"Sound Error: "<<e.what()<< std::endl; } return track; }
void SoundManager::say(const std::string& filename) { if(!mOutput->isInitialized()) return; try { float basevol = volumeFromType(Play_TypeVoice); std::string filePath = "Sound/"+filename; MWBase::SoundPtr sound = mOutput->playSound(filePath, 1.0f, basevol, 1.0f, Play_Normal|Play_TypeVoice, 0); mActiveSounds[sound] = std::make_pair(MWWorld::Ptr(), std::string("_say_sound")); } catch(std::exception &e) { std::cout <<"Sound Error: "<<e.what()<< std::endl; } }
MWBase::SoundPtr SoundManager::playSound(const std::string& soundId, float volume, float pitch, PlayType type, PlayMode mode, float offset) { MWBase::SoundPtr sound; if(!mOutput->isInitialized()) return sound; try { float basevol = volumeFromType(type); float min, max; std::string file = lookup(soundId, volume, min, max); sound = mOutput->playSound(file, volume, basevol, pitch, mode|type, offset); mActiveSounds[sound] = std::make_pair(MWWorld::Ptr(), soundId); } catch(std::exception&) { //std::cout <<"Sound Error: "<<e.what()<< std::endl; } return sound; }
void SoundManager::streamMusicFull(const std::string& filename) { if(!mOutput->isInitialized()) return; std::cout <<"Playing "<<filename<< std::endl; try { stopMusic(); DecoderPtr decoder = getDecoder(); decoder->open(filename); mMusic = mOutput->streamSound(decoder, volumeFromType(Play_TypeMusic), 1.0f, Play_NoEnv|Play_TypeMusic); } catch(std::exception &e) { std::cout << "Music Error: " << e.what() << "\n"; } }
void SoundManager::say(const MWWorld::Ptr &ptr, const std::string& filename) { if(!mOutput->isInitialized()) return; try { float basevol = volumeFromType(Play_TypeVoice); std::string filePath = "Sound/"+filename; const ESM::Position &pos = ptr.getRefData().getPosition(); const Ogre::Vector3 objpos(pos.pos); MWBase::SoundPtr sound = mOutput->playSound3D(filePath, objpos, 1.0f, basevol, 1.0f, 20.0f, 1500.0f, Play_Normal|Play_TypeVoice, 0); mActiveSounds[sound] = std::make_pair(ptr, std::string("_say_sound")); } catch(std::exception &e) { std::cout <<"Sound Error: "<<e.what()<< std::endl; } }