Store some sound properties in the Sound class

This commit is contained in:
Chris Robinson 2012-03-28 04:58:47 -07:00
parent c072babd17
commit 7008bd2fe1
2 changed files with 36 additions and 10 deletions

View file

@ -12,8 +12,18 @@ namespace MWSound
Sound& operator=(const Sound &rhs);
Sound(const Sound &rhs);
protected:
float mVolume; /* NOTE: Real volume = mVolume*mBaseVolume */
float mBaseVolume;
float mMinDistance;
float mMaxDistance;
public:
Sound() { }
Sound() : mVolume(1.0f)
, mBaseVolume(1.0f)
, mMinDistance(20.0f) /* 1 * min_range_scale */
, mMaxDistance(12750.0f) /* 255 * max_range_scale */
{ }
virtual ~Sound() { }
friend class OpenAL_Output;

View file

@ -140,6 +140,7 @@ namespace MWSound
if(mMusic)
mMusic->stop();
mMusic = mOutput->streamSound(filename, 0.4f, 1.0f);
mMusic->mBaseVolume = 0.4f;
}
catch(std::exception &e)
{
@ -180,10 +181,13 @@ namespace MWSound
try
{
// The range values are not tested
const ESM::Position &pos = ptr.getCellRef().pos;
float basevol = 1.0f; /* TODO: volume settings */
std::string filePath = std::string("Sound/")+filename;
const ESM::Position &pos = ptr.getCellRef().pos;
SoundPtr sound = mOutput->playSound3D(filePath, pos.pos, basevol, 1.0f, 20.0f, 12750.0f, false);
sound->mBaseVolume = basevol;
SoundPtr sound = mOutput->playSound3D(filePath, pos.pos, 1.0f, 1.0f, 100.0f, 20000.0f, false);
mActiveSounds[sound] = std::make_pair(ptr, std::string("_say_sound"));
}
catch(std::exception &e)
@ -200,12 +204,18 @@ namespace MWSound
void SoundManager::playSound(const std::string& soundId, float volume, float pitch, bool loop)
{
float min, max;
try
{
std::string file = lookup(soundId, volume, min, max);
float basevol = 1.0f; /* TODO: volume settings */
float min, max;
std::string file = lookup(soundId, basevol, min, max);
SoundPtr sound = mOutput->playSound(file, volume*basevol, pitch, loop);
sound->mVolume = volume;
sound->mBaseVolume = basevol;
sound->mMinDistance = min;
sound->mMaxDistance = max;
SoundPtr sound = mOutput->playSound(file, volume, pitch, loop);
mActiveSounds[sound] = std::make_pair(MWWorld::Ptr(), soundId);
}
catch(std::exception &e)
@ -217,16 +227,22 @@ namespace MWSound
void SoundManager::playSound3D(MWWorld::Ptr ptr, const std::string& soundId,
float volume, float pitch, bool loop, bool untracked)
{
float min, max;
try
{
// Look up the sound in the ESM data
float basevol = 1.0f; /* TODO: volume settings */
float min, max;
std::string file = lookup(soundId, basevol, min, max);
const ESM::Position &pos = ptr.getCellRef().pos;
std::string file = lookup(soundId, volume, min, max);
SoundPtr sound = mOutput->playSound3D(file, pos.pos, volume, pitch, min, max, loop);
SoundPtr sound = mOutput->playSound3D(file, pos.pos, volume*basevol, pitch, min, max, loop);
sound->mVolume = volume;
sound->mBaseVolume = basevol;
sound->mMinDistance = min;
sound->mMaxDistance = max;
mActiveSounds[sound] = (!untracked ? std::make_pair(ptr, soundId) :
std::make_pair(MWWorld::Ptr(), std::string()));
std::make_pair(MWWorld::Ptr(), soundId));
}
catch(std::exception &e)
{