cAudio  2.3.0
3d Audio Engine
cAudioSource.h
1 // Copyright (c) 2008-2011 Raynaldo (Wildicv) Rivera, Joshua (Dark_Kilauea) Jones, Murat (wolfmanfx) Sari
2 // This file is part of the "cAudio Engine"
3 // For conditions of distribution and use, see copyright notice in cAudio.h
4 
5 #pragma once
6 
7 #include <list>
8 #include <string>
9 #include <vector>
10 
11 #include "cOpenALUtil.h"
12 #include "cMutex.h"
13 #include "cEFXFunctions.h"
14 #include "cMemoryOverride.h"
15 #include "IAudioSource.h"
16 #include "cVector3.h"
17 #include "ILogger.h"
18 #include "cSTLAllocator.h"
19 #include "IAudioDeviceContext.h"
20 
21 namespace cAudio
22 {
23 
25  {
26  public:
27 
28  enum Events{
29  ON_UPDATE,
30  ON_RELEASE,
31  ON_PLAY,
32  ON_PAUSE,
33  ON_STOP,
34  };
35 
37  virtual ~cAudioSourceBase();
38 
39  virtual bool isPlaying() const;
40  virtual bool isPaused() const;
41  virtual bool isStopped() const;
42 
43  virtual void setPosition(const cVector3& position);
44  virtual void setVelocity(const cVector3& velocity);
45  virtual void setDirection(const cVector3& direction);
46 
47  virtual void setRolloffFactor(const float& rolloff);
48  virtual void setStrength(const float& soundstrength);
49  virtual void setMinDistance(const float& minDistance);
50  virtual void setMaxAttenuationDistance(const float& maxDistance);
51 
52  virtual void setPitch(const float& pitch);
53  virtual void setVolume(const float& volume);
54  virtual void setMinVolume(const float& minVolume);
55  virtual void setMaxVolume(const float& maxVolume);
56 
57  virtual void setInnerConeAngle(const float& innerAngle);
58  virtual void setOuterConeAngle(const float& outerAngle);
59  virtual void setOuterConeVolume(const float& outerVolume);
60 
61  virtual void setDopplerStrength(const float& dstrength);
62  virtual void setDopplerVelocity(const cVector3& dvelocity);
63 
64  virtual void move(const cVector3& position);
65 
66  virtual cVector3 getPosition() const;
67  virtual cVector3 getVelocity() const;
68  virtual cVector3 getDirection() const;
69 
70  virtual float getRolloffFactor() const;
71  virtual float getStrength() const;
72  virtual float getMinDistance() const;
73  virtual float getMaxDistance() const;
74 
75  virtual bool isRelative() const;
76  virtual float calculateGain() const;
77 
78  virtual float getPitch() const;
79  virtual float getVolume() const;
80  virtual float getMinVolume() const;
81  virtual float getMaxVolume() const;
82 
83  virtual float getInnerConeAngle() const;
84  virtual float getOuterConeAngle() const;
85  virtual float getOuterConeVolume() const;
86 
87  virtual float getDopplerStrength() const;
88  virtual cVector3 getDopplerVelocity() const;
89 
90  virtual void registerEventHandler(ISourceEventHandler* handler);
91  virtual void unRegisterEventHandler(ISourceEventHandler* handler);
92  virtual void unRegisterAllEventHandlers();
93 
94  protected:
97 
99  void signalEvent(Events sevent);
100 
103 
105  float Volume;
106 
108  ALuint Source;
109 
110  ALenum oldState;
111 
113  cAudioVector<ISourceEventHandler*>::Type eventHandlerList;
114  };
115 
117  public:
118 #if CAUDIO_EFX_ENABLED == 1
119  cAudioSource(IAudioDecoder* decoder, IAudioDeviceContext* context, cEFXFunctions* oALFunctions);
120 #else
121  cAudioSource(IAudioDecoder* decoder, IAudioDeviceContext* context);
122 #endif
123  ~cAudioSource();
124 
125  virtual bool play();
126  virtual bool play2d(const bool& toLoop = false);
127  virtual bool play3d(const cVector3& position, const float& soundstr = 1.0 , const bool& toLoop = false);
128 
129  virtual void pause();
130  virtual void stop();
131  virtual void loop(const bool& toLoop);
132  virtual bool seek(const float& seconds, bool relative = false);
133 
134  virtual bool setBuffer(IAudioBuffer* buffer) { return false; }
135  virtual IAudioBuffer *getBuffer() { return NULL; }
136 
137  virtual float getTotalAudioTime();
138  virtual int getTotalAudioSize();
139  virtual int getCompressedAudioSize();
140 
141  virtual float getCurrentAudioTime();
142  virtual int getCurrentAudioPosition();
143  virtual int getCurrentCompressedAudioPosition();
144 
145  virtual bool update();
146 
147  virtual bool isValid() const;
148  virtual bool isLooping() const;
149 
150  virtual bool drop();
151 
152 #if CAUDIO_EFX_ENABLED == 1
153  virtual unsigned int getNumEffectSlotsAvailable() const;
154  virtual bool attachEffect(unsigned int slot, IEffect* effect);
155  virtual void removeEffect(unsigned int slot);
156 
157  virtual bool attachFilter(IFilter* filter);
158  virtual void removeFilter();
159 #endif
160 
161  private:
163  void empty();
165  bool stream(ALuint buffer);
166 
168  ALuint Buffers[CAUDIO_SOURCE_NUM_BUFFERS];
169 
171  IAudioDecoder* Decoder;
172 
174  bool Loop;
176  bool Valid;
177 
179  float BufferTime;
181  int BufferPosition;
182 
183 #if CAUDIO_EFX_ENABLED == 1
184  cEFXFunctions* EFX;
187  void updateFilter(bool remove = false);
189  void updateEffect(unsigned int slot, bool remove = false);
190 
192  IEffect* Effects[CAUDIO_SOURCE_MAX_EFFECT_SLOTS];
194  unsigned int LastEffectTimeStamp[CAUDIO_SOURCE_MAX_EFFECT_SLOTS];
195 
197  IFilter* Filter;
199  unsigned int LastFilterTimeStamp;
200 
202  unsigned int EffectSlotsAvailable;
203 #endif
204  };
205 };
cAudio::cAudioSourceBase::Context
IAudioDeviceContext * Context
The context that owns this source.
Definition: cAudioSource.h:102
cAudio::cAudioSourceBase::getOuterConeVolume
virtual float getOuterConeVolume() const
Returns how much the volume of the source is scaled in the outer cone.
Definition: cAudioSource.cpp:675
cAudio::cAudioSourceBase::getVelocity
virtual cVector3 getVelocity() const
Returns the audio objects velocity.
Definition: cAudioSource.cpp:550
cAudio::cAudioSource::stop
virtual void stop()
Stops playback of the sound source.
Definition: cAudioSource.cpp:230
cAudio::cAudioSourceBase::setInnerConeAngle
virtual void setInnerConeAngle(const float &innerAngle)
Sets the angle of the inner sound cone of the source. The cone opens up in the direction of the sourc...
Definition: cAudioSource.cpp:496
cAudio::cAudioSource::play2d
virtual bool play2d(const bool &toLoop=false)
Plays the source in 2D mode.
Definition: cAudioSource.cpp:198
cAudio::cAudioSourceBase::getStrength
virtual float getStrength() const
Returns the strength of the source.
Definition: cAudioSource.cpp:573
cAudio::cMemoryOverride
Overrides the memory allocations for classes derived from it and makes them use the cAudio memory sys...
Definition: cMemoryOverride.h:14
cAudio::cAudioSourceBase::setMaxAttenuationDistance
virtual void setMaxAttenuationDistance(const float &maxDistance)
Sets the distance from the source where attenuation will stop.
Definition: cAudioSource.cpp:460
cAudio::cAudioSource::getCurrentAudioTime
virtual float getCurrentAudioTime()
Returns the current position in the audio stream in seconds. See IAudioDecoder for details.
Definition: cAudioSource.cpp:294
cAudio::cAudioSourceBase::setMinDistance
virtual void setMinDistance(const float &minDistance)
Sets the distance from the source where attenuation will begin.
Definition: cAudioSource.cpp:453
cAudio::cAudioSourceBase::Mutex
cAudioMutex Mutex
Mutex for thread synchronization.
Definition: cAudioSource.h:96
cAudio::IAudioDecoder
Interface for all Audio Decoders in cAudio.
Definition: IAudioDecoder.h:16
cAudio::cAudioSourceBase::setOuterConeVolume
virtual void setOuterConeVolume(const float &outerVolume)
Sets how much the volume of the source is scaled in the outer cone.
Definition: cAudioSource.cpp:510
cAudio::cAudioSourceBase::setDopplerVelocity
virtual void setDopplerVelocity(const cVector3 &dvelocity)
Overrides the doppler velocity vector. It is usually better to let the engine take care of it automat...
Definition: cAudioSource.cpp:524
cAudio::cAudioSourceBase::setDirection
virtual void setDirection(const cVector3 &direction)
Sets the direction the source is facing.
Definition: cAudioSource.cpp:428
cAudio::cAudioSourceBase::isPaused
virtual bool isPaused() const
Returns if the source is paused.
Definition: cAudioSource.cpp:393
cAudio::cAudioSourceBase::setPosition
virtual void setPosition(const cVector3 &position)
Sets the position of the source in 3D space.
Definition: cAudioSource.cpp:414
cAudio::cAudioSource::getCurrentAudioPosition
virtual int getCurrentAudioPosition()
Returns the current position in the decoded audio stream in bytes. See IAudioDecoder for details.
Definition: cAudioSource.cpp:301
cAudio::IAudioBuffer
interface for a sample (audio buffer): completely loaded into memory, shareable across sources
Definition: IAudioSource.h:19
cAudio::cAudioSourceBase::calculateGain
virtual float calculateGain() const
Return gain, taking into account volume as well as distance attenuation.
Definition: cAudioSource.cpp:609
cAudio::cVector3
Class for manipulating vectors in 3D space.
Definition: cVector3.h:23
cAudio::cAudioSource::loop
virtual void loop(const bool &toLoop)
Controls whether the source should loop or not.
Definition: cAudioSource.cpp:252
cAudio
Main namespace for the entire cAudio library.
Definition: cAudioCapture.h:16
cAudio::cAudioSourceBase::getDopplerStrength
virtual float getDopplerStrength() const
Returns the doppler strength, which enhances or diminishes the doppler effect.
Definition: cAudioSource.cpp:683
cAudio::cAudioSourceBase::isRelative
virtual bool isRelative() const
Return true for 2d sounds, false for 3d sounds.
Definition: cAudioSource.cpp:602
cAudio::cAudioSourceBase::isPlaying
virtual bool isPlaying() const
Returns if the source is playing.
Definition: cAudioSource.cpp:385
cAudio::cAudioSourceBase::getInnerConeAngle
virtual float getInnerConeAngle() const
Returns the angle of the inner sound cone of the source.
Definition: cAudioSource.cpp:659
cAudio::cAudioSource::pause
virtual void pause()
Pauses playback of the sound source.
Definition: cAudioSource.cpp:220
cAudio::cAudioSource::seek
virtual bool seek(const float &seconds, bool relative=false)
Seeks through the audio stream to a specific spot.
Definition: cAudioSource.cpp:258
cAudio::cAudioSource::play3d
virtual bool play3d(const cVector3 &position, const float &soundstr=1.0, const bool &toLoop=false)
Plays the source in 3D mode.
Definition: cAudioSource.cpp:208
cAudio::cAudioMutex
Definition: cMutex.h:39
cAudio::cAudioSourceBase::unRegisterAllEventHandlers
virtual void unRegisterAllEventHandlers()
Removes all event handlers attached to this source.
Definition: cAudioSource.cpp:907
cAudio::cAudioSourceBase::Source
ALuint Source
OpenAL source.
Definition: cAudioSource.h:108
cAudio::cAudioSourceBase::setVolume
virtual void setVolume(const float &volume)
Sets the source volume before attenuation and other effects.
Definition: cAudioSource.cpp:474
cAudio::cAudioSource::isLooping
virtual bool isLooping() const
Returns if the source is looping.
Definition: cAudioSource.cpp:409
cAudio::cAudioSource::getCompressedAudioSize
virtual int getCompressedAudioSize()
Returns the original size of the audio stream. See IAudioDecoder for details.
Definition: cAudioSource.cpp:289
cAudio::cAudioSourceBase::setRolloffFactor
virtual void setRolloffFactor(const float &rolloff)
Sets the factor used in attenuating the source over distance.
Definition: cAudioSource.cpp:435
cAudio::ISourceEventHandler
Interface for event handlers on Audio Sources.
Definition: ISourceEventHandler.h:11
cAudio::cAudioSourceBase::getMaxDistance
virtual float getMaxDistance() const
Returns the distance from the source where attenuation will stop.
Definition: cAudioSource.cpp:594
cAudio::cAudioSourceBase::getMinDistance
virtual float getMinDistance() const
Returns the distance from the source where attenuation will begin.
Definition: cAudioSource.cpp:586
cAudio::cAudioSourceBase::registerEventHandler
virtual void registerEventHandler(ISourceEventHandler *handler)
Registers a new event handler to this source.
Definition: cAudioSource.cpp:886
cAudio::cAudioSourceBase::setPitch
virtual void setPitch(const float &pitch)
Sets the pitch of the source.
Definition: cAudioSource.cpp:467
cAudio::cAudioSource::update
virtual bool update()
Normally called every frame by the audio manager to update the internal buffers. Note: For internal u...
Definition: cAudioSource.cpp:313
cAudio::cAudioSourceBase::eventHandlerList
cAudioVector< ISourceEventHandler * >::Type eventHandlerList
List of registered event handlers.
Definition: cAudioSource.h:113
cAudio::cAudioSourceBase::setDopplerStrength
virtual void setDopplerStrength(const float &dstrength)
Sets the doppler strength, which enhances or diminishes the doppler effect. Can be used to exaggerate...
Definition: cAudioSource.cpp:517
cAudio::cAudioSource::play
virtual bool play()
Plays the source with the last set parameters.
Definition: cAudioSource.cpp:159
cAudio::cAudioSourceBase::getRolloffFactor
virtual float getRolloffFactor() const
Returns the factor used in attenuating the source over distance.
Definition: cAudioSource.cpp:565
cAudio::cAudioSource::getTotalAudioTime
virtual float getTotalAudioTime()
Returns the total amount of time in the audio stream. See IAudioDecoder for details.
Definition: cAudioSource.cpp:279
cAudio::cAudioSource::getCurrentCompressedAudioPosition
virtual int getCurrentCompressedAudioPosition()
Returns the current position in the original audio stream in bytes. See IAudioDecoder for details.
Definition: cAudioSource.cpp:308
cAudio::cAudioSourceBase::move
virtual void move(const cVector3 &position)
Convenience function to automatically set the velocity and position for you in a single call.
Definition: cAudioSource.cpp:531
cAudio::cAudioSourceBase::getPitch
virtual float getPitch() const
Returns the pitch of the source.
Definition: cAudioSource.cpp:630
cAudio::cAudioSourceBase::getMinVolume
virtual float getMinVolume() const
Returns the minimum volume that the source can be attenuated to.
Definition: cAudioSource.cpp:643
cAudio::cAudioSourceBase::setVelocity
virtual void setVelocity(const cVector3 &velocity)
Sets the current velocity of the source for doppler effects.
Definition: cAudioSource.cpp:421
cAudio::cAudioSourceBase::setOuterConeAngle
virtual void setOuterConeAngle(const float &outerAngle)
Sets the angle of the outer sound cone of the source. The cone opens up in the direction of the sourc...
Definition: cAudioSource.cpp:503
cAudio::cAudioSourceBase::getDirection
virtual cVector3 getDirection() const
Returns the audio objects direction.
Definition: cAudioSource.cpp:557
cAudio::cAudioSourceBase::setMaxVolume
virtual void setMaxVolume(const float &maxVolume)
Sets the maximum volume that the source can achieve.
Definition: cAudioSource.cpp:489
cAudio::cAudioSourceBase::Volume
float Volume
Holds the current volume.
Definition: cAudioSource.h:105
cAudio::cAudioSourceBase::getVolume
virtual float getVolume() const
Returns the source volume before attenuation and other effects.
Definition: cAudioSource.cpp:638
cAudio::IAudioSource
Interface for a single audio source, which allow you to manipulate sound sources (speakers) in 2D or ...
Definition: IAudioSource.h:33
cAudio::cAudioSourceBase
Definition: cAudioSource.h:25
cAudio::cAudioSourceBase::getDopplerVelocity
virtual cVector3 getDopplerVelocity() const
Returns the override for the doppler velocity vector.
Definition: cAudioSource.cpp:691
cAudio::cAudioSourceBase::signalEvent
void signalEvent(Events sevent)
Signals a event to all event handlers.
Definition: cAudioSource.cpp:913
cAudio::cAudioSourceBase::getMaxVolume
virtual float getMaxVolume() const
Returns the maximum volume that the source can achieve.
Definition: cAudioSource.cpp:651
cAudio::cAudioSource::getTotalAudioSize
virtual int getTotalAudioSize()
Returns the total decoded size of the audio stream. See IAudioDecoder for details.
Definition: cAudioSource.cpp:284
cAudio::cAudioSourceBase::unRegisterEventHandler
virtual void unRegisterEventHandler(ISourceEventHandler *handler)
Removes a specified event handler from this source.
Definition: cAudioSource.cpp:895
cAudio::cAudioSourceBase::setStrength
virtual void setStrength(const float &soundstrength)
Sets how well the source carries over distance.
Definition: cAudioSource.cpp:442
cAudio::IAudioDeviceContext
Definition: IAudioDeviceContext.h:13
cAudio::cAudioSource::drop
virtual bool drop()
Decrements the reference count by one. If it hits zero, this object is deleted.
Definition: cAudioSource.cpp:148
cAudio::cAudioSource::isValid
virtual bool isValid() const
Returns if the source is ready to be used.
Definition: cAudioSource.cpp:380
cAudio::cAudioSourceBase::setMinVolume
virtual void setMinVolume(const float &minVolume)
Sets the minimum volume that the source can be attenuated to.
Definition: cAudioSource.cpp:482
cAudio::cAudioSource
Definition: cAudioSource.h:116
cAudio::cAudioSource::getBuffer
virtual IAudioBuffer * getBuffer()
Get the audio buffer associated with the source.
Definition: cAudioSource.h:135
cAudio::cAudioSourceBase::isStopped
virtual bool isStopped() const
Returns if the source is stopped.
Definition: cAudioSource.cpp:401
cAudio::cAudioSourceBase::getPosition
virtual cVector3 getPosition() const
Returns the audio objects position.
Definition: cAudioSource.cpp:542
cAudio::cAudioSourceBase::getOuterConeAngle
virtual float getOuterConeAngle() const
Returns the angle of the outer sound cone of the source.
Definition: cAudioSource.cpp:667
cAudio::cAudioSource::setBuffer
virtual bool setBuffer(IAudioBuffer *buffer)
Change the audio buffer associated with the source.
Definition: cAudioSource.h:134