OpenMW
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
sound.hpp
Go to the documentation of this file.
1 #ifndef GAME_SOUND_SOUND_H
2 #define GAME_SOUND_SOUND_H
3 
4 #include <algorithm>
5 
6 #include "sound_output.hpp"
7 
8 namespace MWSound
9 {
10  // For testing individual PlayMode flags
11  inline int operator&(int a, PlayMode b) { return a & static_cast<int>(b); }
12  inline int operator&(PlayMode a, PlayMode b) { return static_cast<int>(a) & static_cast<int>(b); }
13 
14  class SoundBase {
15  SoundBase& operator=(const SoundBase&) = delete;
16  SoundBase(const SoundBase&) = delete;
17  SoundBase(SoundBase&&) = delete;
18 
19  osg::Vec3f mPos;
20  float mVolume; /* NOTE: Real volume = mVolume*mBaseVolume */
21  float mBaseVolume;
22  float mPitch;
23  float mMinDistance;
24  float mMaxDistance;
25  int mFlags;
26 
27  float mFadeOutTime;
28 
29  protected:
31 
32  friend class OpenAL_Output;
33 
34  public:
35  void setPosition(const osg::Vec3f &pos) { mPos = pos; }
36  void setVolume(float volume) { mVolume = volume; }
37  void setBaseVolume(float volume) { mBaseVolume = volume; }
38  void setFadeout(float duration) { mFadeOutTime = duration; }
39  void updateFade(float duration)
40  {
41  if(mFadeOutTime > 0.0f)
42  {
43  float soundDuration = std::min(duration, mFadeOutTime);
44  mVolume *= (mFadeOutTime-soundDuration) / mFadeOutTime;
45  mFadeOutTime -= soundDuration;
46  }
47  }
48 
49  const osg::Vec3f &getPosition() const { return mPos; }
50  float getRealVolume() const { return mVolume * mBaseVolume; }
51  float getPitch() const { return mPitch; }
52  float getMinDistance() const { return mMinDistance; }
53  float getMaxDistance() const { return mMaxDistance; }
54 
56  { return static_cast<MWSound::Type>(mFlags&MWSound::Type::Mask); }
57  bool getUseEnv() const { return !(mFlags&MWSound::PlayMode::NoEnv); }
58  bool getIsLooping() const { return mFlags&MWSound::PlayMode::Loop; }
60  bool getIs3D() const { return mFlags&Play_3D; }
61 
62  void init(const osg::Vec3f& pos, float vol, float basevol, float pitch, float mindist, float maxdist, int flags)
63  {
64  mPos = pos;
65  mVolume = vol;
66  mBaseVolume = basevol;
67  mPitch = pitch;
68  mMinDistance = mindist;
69  mMaxDistance = maxdist;
70  mFlags = flags;
71  mFadeOutTime = 0.0f;
72  mHandle = nullptr;
73  }
74 
75  void init(float vol, float basevol, float pitch, int flags)
76  {
77  mPos = osg::Vec3f(0.0f, 0.0f, 0.0f);
78  mVolume = vol;
79  mBaseVolume = basevol;
80  mPitch = pitch;
81  mMinDistance = 1.0f;
82  mMaxDistance = 1000.0f;
83  mFlags = flags;
84  mFadeOutTime = 0.0f;
85  mHandle = nullptr;
86  }
87 
89  : mPos(0.0f, 0.0f, 0.0f), mVolume(1.0f), mBaseVolume(1.0f), mPitch(1.0f)
90  , mMinDistance(1.0f), mMaxDistance(1000.0f), mFlags(0), mFadeOutTime(0.0f)
91  , mHandle(nullptr)
92  { }
93  };
94 
95  class Sound : public SoundBase {
96  Sound& operator=(const Sound&) = delete;
97  Sound(const Sound&) = delete;
98  Sound(Sound&&) = delete;
99 
100  public:
101  Sound() { }
102  };
103 
104  class Stream : public SoundBase {
105  Stream& operator=(const Stream&) = delete;
106  Stream(const Stream&) = delete;
107  Stream(Stream&&) = delete;
108 
109  public:
110  Stream() { }
111  };
112 }
113 
114 #endif
void setBaseVolume(float volume)
Definition: sound.hpp:37
bool getIs3D() const
Definition: sound.hpp:60
void setFadeout(float duration)
Definition: sound.hpp:38
Definition: openal_output.hpp:21
bool getIsLooping() const
Definition: sound.hpp:58
SoundBase()
Definition: sound.hpp:88
float mPitch
Definition: sound.hpp:22
float mMinDistance
Definition: sound.hpp:23
float mFadeOutTime
Definition: sound.hpp:27
SoundBase & operator=(const SoundBase &)=delete
PlayMode
Definition: soundmanager.hpp:23
float getMaxDistance() const
Definition: sound.hpp:53
Definition: sound.hpp:95
osg::Vec3f mPos
Definition: sound.hpp:19
void init(float vol, float basevol, float pitch, int flags)
Definition: sound.hpp:75
float mMaxDistance
Definition: sound.hpp:24
void * Sound_Instance
Definition: sound_output.hpp:20
bool getUseEnv() const
Definition: sound.hpp:57
Definition: soundmanagerimp.hpp:42
int operator&(Type a, Type b)
Definition: soundmanager.hpp:49
const osg::Vec3f & getPosition() const
Definition: sound.hpp:49
float mVolume
Definition: sound.hpp:20
float getPitch() const
Definition: sound.hpp:51
Sound_Instance mHandle
Definition: sound.hpp:30
float getRealVolume() const
Definition: sound.hpp:50
void updateFade(float duration)
Definition: sound.hpp:39
Sound()
Definition: sound.hpp:101
Stream & operator=(const Stream &)=delete
Sound & operator=(const Sound &)=delete
Stream()
Definition: sound.hpp:110
bool getDistanceCull() const
Definition: sound.hpp:59
float mBaseVolume
Definition: sound.hpp:21
int mFlags
Definition: sound.hpp:25
Definition: sound.hpp:14
float getMinDistance() const
Definition: sound.hpp:52
void setPosition(const osg::Vec3f &pos)
Definition: sound.hpp:35
MWSound::Type getPlayType() const
Definition: sound.hpp:55
Type
Definition: soundmanager.hpp:39
void init(const osg::Vec3f &pos, float vol, float basevol, float pitch, float mindist, float maxdist, int flags)
Definition: sound.hpp:62
void setVolume(float volume)
Definition: sound.hpp:36
Definition: sound.hpp:104