cAudio  2.3.0
3d Audio Engine
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 
cAudio::AudioFormats
AudioFormats
Enumeration of audio formats supported by the engine.
Definition: EAudioFormats.h:11
cAudio::cAudioManager::createFromMemory
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.
Definition: cAudioManager.cpp:344
cAudio::cAudioManager::unRegisterAllDataSources
virtual void unRegisterAllDataSources()
Removes all previously registered data sources.
Definition: cAudioManager.cpp:556
cAudio::cAudioManager::releaseAllSources
virtual void releaseAllSources()
Releases ALL Audio Sources (but does not shutdown the manager)
Definition: cAudioManager.cpp:662
cAudio::cAudioManager::setSpeedOfSound
virtual void setSpeedOfSound(float speed)
Set Speed of Sound (for doppler computations)
Definition: cAudioManager.cpp:238
cAudio::cAudioManager
Definition: cAudioManager.h:24
cAudio::IAudioDecoderFactory
Interface for factories that create Audio Decoders for cAudio.
Definition: IAudioDecoderFactory.h:13
cAudio::cAudioManager::unRegisterEventHandler
virtual void unRegisterEventHandler(IManagerEventHandler *handler)
Unregisters a previously registered event handler from the manager.
Definition: cAudioManager.cpp:571
cAudio::cAudioManager::getSpeedOfSound
virtual float getSpeedOfSound() const
Get Speed of Sound (for doppler computations)
Definition: cAudioManager.cpp:244
cAudio::cMemoryOverride
Overrides the memory allocations for classes derived from it and makes them use the cAudio memory sys...
Definition: cMemoryOverride.h:14
cAudio::cAudioManager::getDataSourceFactory
virtual IDataSourceFactory * getDataSourceFactory(const char *name)
Returns a previously registered data source factory.
Definition: cAudioManager.cpp:544
cAudio::IManagerEventHandler
Interface for event handlers for playback manager events.
Definition: IManagerEventHandler.h:11
cAudio::IThreadWorker
Definition: IThread.h:20
cAudio::cAudioManager::createFromRaw
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.
Definition: cAudioManager.cpp:376
cAudio::IAudioBuffer
interface for a sample (audio buffer): completely loaded into memory, shareable across sources
Definition: IAudioSource.h:19
cAudio::cVector3
Class for manipulating vectors in 3D space.
Definition: cVector3.h:23
cAudio::cAudioManager::stopAllSounds
virtual void stopAllSounds()
Stops all playing sounds.
Definition: cAudioManager.cpp:260
cAudio::cAudioManager::registerAudioDecoder
virtual bool registerAudioDecoder(IAudioDecoderFactory *factory, const char *extension)
Register an Audio Decoder.
Definition: cAudioManager.cpp:449
cAudio::cAudioManager::createFromAudioBuffer
virtual IAudioSource * createFromAudioBuffer(const char *name, AudioCaptureBuffer *pBiffer, unsigned int frequency, AudioFormats format)
Creates an Audio Source from AudioCaptureBuffer in a memory buffer.
Definition: cAudioManager.cpp:371
cAudio
Main namespace for the entire cAudio library.
Definition: cAudioCapture.h:16
cAudio::cAudioManager::isDataSourceRegistered
virtual bool isDataSourceRegistered(const char *name)
Returns whether a data source is currently registered under a certain name.
Definition: cAudioManager.cpp:536
cAudio::cAudioManager::getDopplerFactor
virtual float getDopplerFactor() const
Get Doppler Factor.
Definition: cAudioManager.cpp:255
cAudio::cAudioManager::update
virtual void update()
If threading is disabled, you must call this function every frame to update the playback buffers of a...
Definition: cAudioManager.cpp:84
cAudio::cAudioManager::release
virtual void release(IAudioSource *source)
Releases a single Audio Source, removing it from the manager.
Definition: cAudioManager.cpp:701
cAudio::cAudioManager::create
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...
Definition: cAudioManager.cpp:306
cAudio::cAudioManager::unRegisterAllEventHandlers
virtual void unRegisterAllEventHandlers()
Unregisters all previously registered event handlers from the manager.
Definition: cAudioManager.cpp:579
cAudio::cAudioManager::play2D
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...
Definition: cAudioManager.cpp:167
cAudio::cAudioMutex
Definition: cMutex.h:39
cAudio::cAudioManager::registerDataSource
virtual bool registerDataSource(IDataSourceFactory *factory, const char *name, int priority)
Registers a data source with this manager.
Definition: cAudioManager.cpp:501
cAudio::cAudioManager::isUpdateThreadRunning
virtual bool isUpdateThreadRunning()
Returns if the thread used to update all Audio Managers is running.
Definition: cAudioManager.cpp:151
cAudio::cAudioManager::getMasterVolume
virtual float getMasterVolume() const
Get the master volume.
Definition: cAudioManager.cpp:233
cAudio::cAudioManager::getListener
virtual IListener * getListener()
Returns the interface for the listener.
Definition: cAudioManager.h:80
cAudio::cAudioManager::getSoundByName
virtual IAudioSource * getSoundByName(const char *name)
Returns an Audio Source by its "name" and NULL if the name is not found.
Definition: cAudioManager.cpp:650
cAudio::cAudioManager::unRegisterAudioDecoder
virtual void unRegisterAudioDecoder(const char *extension)
Unregister a previously registered Audio Decoder.
Definition: cAudioManager.cpp:458
cAudio::cAudioManager::createStatic
virtual IAudioSource * createStatic(IAudioBuffer *buffer)
Creates an Audio Source from an Audio Buffer object (see createAudioBuffer())
Definition: cAudioManager.cpp:440
cAudio::IAudioManager
Interface for the playback capabilities of cAudio.
Definition: IAudioManager.h:25
cAudio::cAudioManager::createBuffer
virtual IAudioBuffer * createBuffer(const char *filename)
Creates a Audio Sample using the highest priority data source that has the referenced filename.
Definition: cAudioManager.cpp:402
cAudio::IDataSourceFactory
Interface for creating data sources for use with the engine.
Definition: IDataSourceFactory.h:13
cAudio::cAudioManager::getAudioDecoderFactory
virtual IAudioDecoderFactory * getAudioDecoderFactory(const char *extension)
Returns a registered audio decoder factory.
Definition: cAudioManager.cpp:478
cAudio::cAudioManager::shutDown
virtual void shutDown()
Shuts the manager down, cleaning up audio sources in the process. Does not clean up decoders,...
Definition: cAudioManager.cpp:52
cAudio::cAudioManager::isAudioDecoderRegistered
virtual bool isAudioDecoderRegistered(const char *extension)
Returns whether an audio decoder is currently registered for this file type.
Definition: cAudioManager.cpp:470
cAudio::cAudioManager::initialize
virtual bool initialize(const char *deviceName=0x0, int outputFrequency=-1, int eaxEffectSlots=4)
Initializes the manager.
Definition: cAudioManager.cpp:29
cAudio::IListener
Interface for the listener in cAudio. This class provides abilities to move and orient where your cam...
Definition: IListener.h:14
cAudio::AudioCaptureBuffer
Definition: IAudioCapture.h:114
cAudio::cAudioManager::unRegisterDataSource
virtual void unRegisterDataSource(const char *name)
Removes a previously registered data source.
Definition: cAudioManager.cpp:513
cAudio::IAudioSource
Interface for a single audio source, which allow you to manipulate sound sources (speakers) in 2D or ...
Definition: IAudioSource.h:33
cAudio::cAudioManager::play3D
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...
Definition: cAudioManager.cpp:196
cAudio::cAudioManager::unRegisterAllAudioDecoders
virtual void unRegisterAllAudioDecoders()
Unregisters all attached Audio Decoders.
Definition: cAudioManager.cpp:490
cAudio::cAudioManager::setDopplerFactor
virtual void setDopplerFactor(float factor) const
Set Doppler Factor.
Definition: cAudioManager.cpp:249
cAudio::cAudioManager::setMasterVolume
virtual void setMasterVolume(float vol)
Sets master volume. (valid range [0 - 1.0])
Definition: cAudioManager.cpp:222
cAudio::cAudioManager::registerEventHandler
virtual void registerEventHandler(IManagerEventHandler *handler)
Registers a new event handler with the manager.
Definition: cAudioManager.cpp:563