cAudioSource.h

00001 // Copyright (c) 2008-2010 Raynaldo (Wildicv) Rivera, Joshua (Dark_Kilauea) Jones
00002 // This file is part of the "cAudio Engine"
00003 // For conditions of distribution and use, see copyright notice in cAudio.h
00004 
00005 #ifndef CAUDIOSOURCE_H_INCLUDED
00006 #define CAUDIOSOURCE_H_INCLUDED
00007 #include <list>
00008 #include <string>
00009 #include <vector>
00010 #include <AL/al.h>
00011 #include <AL/alc.h>
00012 
00013 #include "../include/IAudioSource.h"
00014 #include "../include/cVector3.h"
00015 #include "../Headers/cMutex.h"
00016 #include "../include/ILogger.h"
00017 #include "../Headers/cEFXFunctions.h"
00018 
00019 namespace cAudio
00020 {
00021 
00022     class cAudioSource : public IAudioSource
00023     {
00024     public:
00025 
00026                 enum Events{
00027                         ON_UPDATE,
00028                         ON_RELEASE,
00029                         ON_PLAY,
00030                         ON_PAUSE,
00031                         ON_STOP,
00032                 };
00033 
00034 #ifdef CAUDIO_EFX_ENABLED
00035                 cAudioSource(IAudioDecoder* decoder, ALCcontext* context, cEFXFunctions* oALFunctions);
00036 #else
00037                 cAudioSource(IAudioDecoder* decoder, ALCcontext* context);
00038 #endif
00039                 ~cAudioSource();
00040 
00041                 virtual bool play();
00042                 virtual bool play2d(const bool& toLoop = false);
00043                 virtual bool play3d(const cVector3& position, const float& soundstr = 1.0 , const bool& toLoop = false);
00044                 
00045                 virtual void pause();    
00046                 virtual void stop();
00047                 virtual void loop(const bool& toLoop);
00048                 virtual bool seek(const float& seconds, bool relative = false);
00049 
00050                 virtual float getTotalAudioTime();
00051                 virtual int getTotalAudioSize();
00052                 virtual int getCompressedAudioSize();
00053 
00054                 virtual float getCurrentAudioTime();
00055                 virtual int getCurrentAudioPosition();
00056                 virtual int getCurrentCompressedAudioPosition();
00057 
00058                 virtual bool update();
00059                 virtual void release();
00060 
00061                 virtual const bool isValid() const;
00062                 virtual const bool isPlaying() const;
00063                 virtual const bool isPaused() const;
00064                 virtual const bool isStopped() const;
00065                 virtual const bool isLooping() const;
00066       
00067                 virtual void setPosition(const cVector3& position);
00068                 virtual void setVelocity(const cVector3& velocity);
00069                 virtual void setDirection(const cVector3& direction);
00070 
00071                 virtual void setRolloffFactor(const float& rolloff);
00072                 virtual void setStrength(const float& soundstrength);
00073                 virtual void setMinDistance(const float& minDistance);
00074                 virtual void setMaxDistance(const float& maxDistance);
00075 
00076                 virtual void setPitch(const float& pitch);
00077                 virtual void setVolume(const float& volume);
00078                 virtual void setMinVolume(const float& minVolume);
00079                 virtual void setMaxVolume(const float& maxVolume);
00080 
00081                 virtual void setInnerConeAngle(const float& innerAngle);
00082                 virtual void setOuterConeAngle(const float& outerAngle);
00083                 virtual void setOuterConeVolume(const float& outerVolume);
00084 
00085                 virtual void setDopplerStrength(const float& dstrength); 
00086                 virtual void setDopplerVelocity(const cVector3& dvelocity);
00087 
00088                 virtual void move(const cVector3& position);
00089 
00090                 virtual const cVector3 getPosition() const;
00091                 virtual const cVector3 getVelocity() const;
00092                 virtual const cVector3 getDirection() const;
00093 
00094                 virtual const float getRolloffFactor() const;
00095                 virtual const float getStrength() const;
00096                 virtual const float getMinDistance() const;
00097                 virtual const float getMaxDistance() const;
00098 
00099                 virtual const float getPitch() const;
00100                 virtual const float getVolume() const;
00101                 virtual const float getMinVolume() const;
00102                 virtual const float getMaxVolume() const;
00103 
00104                 virtual const float getInnerConeAngle() const;
00105                 virtual const float getOuterConeAngle() const;
00106                 virtual const float getOuterConeVolume() const;
00107 
00108                 virtual const float getDopplerStrength() const;
00109                 virtual const cVector3 getDopplerVelocity() const;
00110 
00111                 virtual void registerEventHandler(ISourceEventHandler* handler);
00112                 virtual void unRegisterEventHandler(ISourceEventHandler* handler);
00113                 virtual void unRegisterAllEventHandlers();
00114 
00115 #ifdef CAUDIO_EFX_ENABLED
00116                 virtual unsigned int getNumEffectSlotsAvailable() const;
00117                 virtual bool attachEffect(unsigned int slot, IEffect* effect);
00118                 virtual void removeEffect(unsigned int slot);
00119 
00120                 virtual bool attachFilter(IFilter* filter);
00121                 virtual void removeFilter();
00122 #endif
00123 
00124         protected:
00125         private:
00127                 cAudioMutex Mutex;
00129                 void empty();
00131                 bool checkError();
00133                 bool stream(ALuint buffer);
00135                 void signalEvent(Events sevent);
00137                 ALenum convertAudioFormatEnum(AudioFormats format);
00138 
00140                 ALCcontext* Context;
00141 
00143                 ALuint Buffers[CAUDIO_SOURCE_NUM_BUFFERS]; 
00145                 ALuint Source; 
00146 
00147                 ALenum oldState;
00149                 IAudioDecoder* Decoder;
00150 
00152                 bool Loop;
00154                 bool Valid;
00155 
00157                 std::list<ISourceEventHandler*> eventHandlerList;
00158 
00159 #ifdef CAUDIO_EFX_ENABLED
00161                 cEFXFunctions* EFX;
00163                 void updateFilter(bool remove = false);
00165                 void updateEffect(unsigned int slot, bool remove = false);
00166 
00168                 IEffect* Effects[CAUDIO_SOURCE_MAX_EFFECT_SLOTS];
00170                 unsigned int LastEffectTimeStamp[CAUDIO_SOURCE_MAX_EFFECT_SLOTS];
00171 
00173                 IFilter* Filter;
00175                 unsigned int LastFilterTimeStamp;
00176 
00178                 unsigned int EffectSlotsAvailable;
00179 #endif
00180     };
00181 };
00182 #endif 
 All Classes Namespaces Functions Variables Enumerations

Generated on Sat Feb 20 22:55:07 2010 for cAudio by  doxygen 1.6.2