cAudio  2.3.0
3d Audio Engine
 All Classes Namespaces Functions Variables Enumerations Pages
cAudioManager.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 "cListener.h"
8 #include "cMutex.h"
9 #include "cAudioEffects.h"
10 #include "cMemoryOverride.h"
11 #include "IAudioDecoderFactory.h"
12 #include "IAudioManager.h"
13 #include "cSTLAllocator.h"
14 #include "cAudioString.h"
15 #include "IThread.h"
16 #include "IAudioDeviceContext.h"
17 
18 namespace cAudio
19 {
20  class IAudioSource;
21  class IAudioBuffer;
22 
24  {
25  public:
26  enum Events{
27  ON_INIT,
28  ON_UPDATE,
29  ON_RELEASE,
30  ON_SOURCECREATE,
31  ON_DECODERREGISTER,
32  ON_DATASOURCEREGISTER,
33  };
34 
35  cAudioManager() : Initialized(false), AudioThread(NULL), AudioContext(NULL), MasterVolume(1.0f) { }
36  virtual ~cAudioManager();
37 
38  virtual bool initialize(const char* deviceName = 0x0, int outputFrequency = -1, int eaxEffectSlots = 4);
39  virtual void shutDown();
40  virtual void update();
41  virtual IAudioSource* getSoundByName(const char* name);
42  virtual void releaseAllSources();
43  virtual void release(IAudioSource* source);
44 
45  virtual IAudioSource* play2D(const char* filename, bool playLooped = false, bool startPaused = false);
46  virtual IAudioSource* play3D(const char* filename, cVector3 position, bool playLooped = false, bool startPaused = false);
47 
48  virtual void setMasterVolume(float vol);
49  virtual float getMasterVolume() const;
50  virtual void setSpeedOfSound(float speed);
51  virtual float getSpeedOfSound() const;
52  virtual void setDopplerFactor(float factor) const;
53  virtual float getDopplerFactor() const;
54  virtual void stopAllSounds();
55 
56  virtual IAudioSource* create(const char* name, const char* filename, bool stream = false);
57  virtual IAudioSource* createFromMemory(const char* name, const char* data, size_t length, const char* extension);
58  virtual IAudioSource* createFromRaw(const char* name, const char* data, size_t length, unsigned int frequency, AudioFormats format);
59  virtual IAudioSource* createFromAudioBuffer(const char* name, AudioCaptureBuffer* pBiffer, unsigned int frequency, AudioFormats format);
60 
61  virtual IAudioBuffer* createBuffer(const char* filename);
62  virtual IAudioSource* createStatic(IAudioBuffer* buffer);
63 
64  virtual bool registerAudioDecoder(IAudioDecoderFactory* factory, const char* extension);
65  virtual void unRegisterAudioDecoder(const char* extension);
66  virtual bool isAudioDecoderRegistered(const char* extension);
67  virtual IAudioDecoderFactory* getAudioDecoderFactory(const char* extension);
68  virtual void unRegisterAllAudioDecoders();
69 
70  virtual bool registerDataSource(IDataSourceFactory* factory, const char* name, int priority);
71  virtual void unRegisterDataSource(const char* name);
72  virtual bool isDataSourceRegistered(const char* name);
73  virtual IDataSourceFactory* getDataSourceFactory(const char* name);
74  virtual void unRegisterAllDataSources();
75 
76  virtual void registerEventHandler(IManagerEventHandler* handler);
77  virtual void unRegisterEventHandler(IManagerEventHandler* handler) ;
78  virtual void unRegisterAllEventHandlers();
79 
80  virtual IListener* getListener() { return &initlistener; }
81 
82  virtual bool isUpdateThreadRunning();
83 
84 #if CAUDIO_EFX_ENABLED == 1
85  virtual IAudioEffects* getEffects();
86 #endif
87 
88  virtual cAudioMutex *getMutex() { return &Mutex; }
89 
90  protected:
91  virtual void run();
92 
93  IAudioSource* createAudioSource(IAudioDecoder* decoder, const cAudioString& audioName, const cAudioString& dataSource);
94 
95  private:
97  cAudioMutex Mutex;
98 
100  bool Initialized;
101 
103  IThread* AudioThread;
104 
105  IAudioDeviceContext* AudioContext;
106 
107  float MasterVolume;
108 
110  cAudioMap<cAudioString, IAudioSource*>::Type audioIndex;
111  typedef cAudioMap<cAudioString, IAudioSource*>::Type::iterator audioIndexIterator;
113  cAudioVector<IAudioSource*>::Type audioSources;
114  cAudioVector<IAudioSource*>::Type updateSources;
116  cAudioVector<IAudioSource*>::Type managedAudioSources;
118  cAudioVector<IAudioSource*>::Type managedAudioSourcesDelBuffer;
120  cAudioMap<cAudioString, IAudioDecoderFactory*>::Type decodermap;
121  typedef cAudioMap<cAudioString, IAudioDecoderFactory*>::Type::iterator decodermapIterator;
123  cAudioMap<cAudioString, IDataSourceFactory*>::Type datasourcemap;
124  typedef cAudioMap<cAudioString, IDataSourceFactory*>::Type::iterator datasourcemapIterator;
125  cAudioVector< std::pair<int, cAudioString> >::Type dataSourcePriorityList;
126 
128  cListener initlistener;
129 
131  void signalEvent(Events sevent);
132 
134  cAudioList<IManagerEventHandler*>::Type eventHandlerList;
135  };
136 }
137 
virtual IAudioSource * createFromAudioBuffer(const char *name, AudioCaptureBuffer *pBiffer, unsigned int frequency, AudioFormats format)
Creates an Audio Source from AudioCaptureBuffer in a memory buffer.
virtual void setMasterVolume(float vol)
Sets master volume. (valid range [0 - 1.0])
virtual void stopAllSounds()
Stops all playing sounds.
virtual bool registerDataSource(IDataSourceFactory *factory, const char *name, int priority)
Registers a data source with this manager.
virtual IAudioSource * createFromMemory(const char *name, const char *data, size_t length, const char *extension)
Creates an Audio Source from a memory buffer using a specific audio codec.
virtual bool isAudioDecoderRegistered(const char *extension)
Returns whether an audio decoder is currently registered for this file type.
virtual float getDopplerFactor() const
Get Doppler Factor.
virtual void unRegisterAllEventHandlers()
Unregisters all previously registered event handlers from the manager.
virtual IAudioSource * play3D(const char *filename, cVector3 position, bool playLooped=false, bool startPaused=false)
Creates an Audio Source object using the highest priority data source that has the referenced filenam...
virtual void registerEventHandler(IManagerEventHandler *handler)
Registers a new event handler with the manager.
Interface for the playback capabilities of cAudio.
Definition: IAudioManager.h:24
virtual IListener * getListener()
Returns the interface for the listener.
Definition: cAudioManager.h:80
Interface for event handlers for playback manager events.
Interface for factories that create Audio Decoders for cAudio.
virtual void unRegisterAllDataSources()
Removes all previously registered data sources.
Interface for a single audio source, which allow you to manipulate sound sources (speakers) in 2D or ...
Definition: IAudioSource.h:32
virtual bool registerAudioDecoder(IAudioDecoderFactory *factory, const char *extension)
Register an Audio Decoder.
virtual bool initialize(const char *deviceName=0x0, int outputFrequency=-1, int eaxEffectSlots=4)
Initializes the manager.
Interface for the listener in cAudio. This class provides abilities to move and orient where your cam...
Definition: IListener.h:13
virtual IDataSourceFactory * getDataSourceFactory(const char *name)
Returns a previously registered data source factory.
virtual void update()
If threading is disabled, you must call this function every frame to update the playback buffers of a...
virtual void releaseAllSources()
Releases ALL Audio Sources (but does not shutdown the manager)
virtual void unRegisterAudioDecoder(const char *extension)
Unregister a previously registered Audio Decoder.
virtual float getMasterVolume() const
Get the master volume.
virtual IAudioSource * getSoundByName(const char *name)
Returns an Audio Source by its &quot;name&quot; and NULL if the name is not found.
virtual void release(IAudioSource *source)
Releases a single Audio Source, removing it from the manager.
virtual IAudioBuffer * createBuffer(const char *filename)
Creates a Audio Sample using the highest priority data source that has the referenced filename...
Class for manipulating vectors in 3D space.
Definition: cVector3.h:22
virtual IAudioSource * createFromRaw(const char *name, const char *data, size_t length, unsigned int frequency, AudioFormats format)
Creates an Audio Source from raw audio data in a memory buffer.
virtual void setDopplerFactor(float factor) const
Set Doppler Factor.
virtual void shutDown()
Shuts the manager down, cleaning up audio sources in the process. Does not clean up decoders...
virtual bool isDataSourceRegistered(const char *name)
Returns whether a data source is currently registered under a certain name.
Interface for creating data sources for use with the engine.
virtual void unRegisterDataSource(const char *name)
Removes a previously registered data source.
virtual bool isUpdateThreadRunning()
Returns if the thread used to update all Audio Managers is running.
virtual void unRegisterEventHandler(IManagerEventHandler *handler)
Unregisters a previously registered event handler from the manager.
interface for a sample (audio buffer): completely loaded into memory, shareable across sources ...
Definition: IAudioSource.h:18
virtual IAudioSource * createStatic(IAudioBuffer *buffer)
Creates an Audio Source from an Audio Buffer object (see createAudioBuffer())
virtual void unRegisterAllAudioDecoders()
Unregisters all attached Audio Decoders.
virtual void setSpeedOfSound(float speed)
Set Speed of Sound (for doppler computations)
virtual IAudioDecoderFactory * getAudioDecoderFactory(const char *extension)
Returns a registered audio decoder factory.
virtual float getSpeedOfSound() const
Get Speed of Sound (for doppler computations)
Overrides the memory allocations for classes derived from it and makes them use the cAudio memory sys...
virtual IAudioSource * play2D(const char *filename, bool playLooped=false, bool startPaused=false)
Creates an Audio Source object using the highest priority data source that has the referenced filenam...
virtual IAudioSource * create(const char *name, const char *filename, bool stream=false)
Creates an Audio Source object using the highest priority data source that has the referenced filenam...
AudioFormats
Enumeration of audio formats supported by the engine.
Definition: EAudioFormats.h:10