soundmanager.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef FIFE_SOUNDMANAGER_H
00023 #define FIFE_SOUNDMANAGER_H
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #include "fife_openal.h"
00036
00037 namespace FIFE {
00038 class SoundEmitter;
00039 class SoundClipPool;
00040
00041 class SoundManager {
00042 public:
00043
00044 SoundManager(SoundClipPool* pool);
00045
00046 ~SoundManager();
00047
00050 void init();
00051
00057 SoundEmitter* getEmitter(unsigned int emitterid) const;
00058
00061 SoundEmitter* createEmitter();
00062
00065 void releaseEmitter(unsigned int emitterid);
00066
00069 ALCcontext* getContext() const {
00070 return m_context;
00071 }
00072
00077 void setVolume(float vol) {
00078 if (m_device == NULL) {
00079 m_volume = vol;
00080 }
00081 alListenerf(AL_GAIN, vol);
00082 }
00083
00086 float getVolume() const{
00087 return m_volume;
00088 }
00089
00092 void mute() {
00093 alGetListenerf(AL_GAIN, &m_mutevol);
00094 alListenerf(AL_GAIN, 0);
00095 }
00096
00099 void unmute() {
00100 alListenerf(AL_GAIN, m_mutevol);
00101 }
00102
00105 void setListenerPosition(float x, float y, float z) {
00106 alListener3f(AL_POSITION, x, y, z);
00107 }
00108
00111 void setListenerOrientation(float x, float y, float z) {
00112 ALfloat vec[6] = { x, y, z, 0.0, 0.0, 1.0};
00113 alListenerfv(AL_ORIENTATION, vec);
00114 }
00115
00118 void setListenerVelocity(float x, float y, float z);
00119
00122 bool isActive() const{
00123 return m_device != NULL;
00124 }
00125
00126 private:
00127
00128 std::vector<SoundEmitter*> m_emittervec;
00129 ALCcontext* m_context;
00130 ALCdevice* m_device;
00131 SoundClipPool* m_pool;
00132 float m_mutevol;
00133 float m_volume;
00134 };
00135 }
00136 #endif