cAudioManager.h
00001
00002
00003
00004
00005 #ifndef CAUDIOMANAGER_H_INCLUDED
00006 #define CAUDIOMANAGER_H_INCLUDED
00007
00008 #include <map>
00009 #include <string>
00010 #include <vector>
00011
00012 #include "cAudioSource.h"
00013 #include "../include/IAudioDecoderFactory.h"
00014 #include "cListener.h"
00015 #include "../include/IAudioManager.h"
00016 #include "../Headers/cMutex.h"
00017 #include "../Headers/cAudioEffects.h"
00018
00019 #include <AL/al.h>
00020 #include <AL/alc.h>
00021
00022 #ifdef CAUDIO_PLATFORM_LINUX
00023 #include <AL/alext.h>
00024 #endif
00025
00026 namespace cAudio
00027 {
00028 class IAudioSource;
00029
00030 class cAudioManager : public IAudioManager
00031 {
00032 public:
00033 enum Events{
00034 ON_INIT,
00035 ON_UPDATE,
00036 ON_RELEASE,
00037 ON_SOURCECREATE,
00038 ON_DECODERREGISTER,
00039 ON_DATASOURCEREGISTER,
00040 };
00041
00042 cAudioManager() : Device(NULL), Context(NULL), EFXSupported(false), Initialized(false) { }
00043 virtual ~cAudioManager() { }
00044
00045 virtual bool initialize(const char* deviceName = 0x0, int outputFrequency = -1, int eaxEffectSlots = 4);
00046 virtual void shutDown();
00047 virtual void update();
00048 virtual IAudioSource* getSoundByName(const char* name);
00049 virtual void releaseAllSources();
00050 virtual void release(IAudioSource* source);
00051
00052 virtual const char* getAvailableDeviceName(unsigned int index);
00053 virtual unsigned int getAvailableDeviceCount();
00054 virtual const char* getDefaultDeviceName();
00055
00056 virtual IAudioSource* create(const char* name, const char* filename, bool stream = false);
00057 virtual IAudioSource* createFromMemory(const char* name, const char* data, size_t length, const char* extension);
00058 virtual IAudioSource* createFromRaw(const char* name, const char* data, size_t length, unsigned int frequency, AudioFormats format);
00059
00060 virtual bool registerAudioDecoder(IAudioDecoderFactory* factory, const char* extension);
00061 virtual void unRegisterAudioDecoder(const char* extension);
00062 virtual bool isAudioDecoderRegistered(const char* extension);
00063 virtual IAudioDecoderFactory* getAudioDecoderFactory(const char* extension);
00064 virtual void unRegisterAllAudioDecoders();
00065
00066 virtual bool registerDataSource(IDataSourceFactory* factory, const char* name, int priority);
00067 virtual void unRegisterDataSource(const char* name);
00068 virtual bool isDataSourceRegistered(const char* name);
00069 virtual IDataSourceFactory* getDataSourceFactory(const char* name);
00070 virtual void unRegisterAllDataSources();
00071
00072 virtual void registerEventHandler(IManagerEventHandler* handler);
00073 virtual void unRegisterEventHandler(IManagerEventHandler* handler) ;
00074 virtual void unRegisterAllEventHandlers();
00075
00077 void getAvailableDevices();
00078
00079 virtual IListener* getListener() { return &initlistener; }
00080
00081 #ifdef CAUDIO_EFX_ENABLED
00082 virtual IAudioEffects* getEffects() { return &initEffects; }
00083 #endif
00084
00085 private:
00087 cAudioMutex Mutex;
00088
00090 ALCcontext* Context;
00092 ALCdevice* Device;
00093
00095 bool EFXSupported;
00096
00098 bool Initialized;
00099
00101 std::map<std::string, IAudioSource*> audioIndex;
00103 std::vector<IAudioSource*> audioSources;
00105 std::map<std::string, IAudioDecoderFactory*> decodermap;
00107 std::map<std::string, IDataSourceFactory*> datasourcemap;
00108 std::vector< std::pair<int, std::string> > dataSourcePriorityList;
00109
00111 cListener initlistener;
00112 #ifdef CAUDIO_EFX_ENABLED
00114 cAudioEffects initEffects;
00115 #endif
00117 bool checkError();
00118
00119 std::vector<std::string> AvailableDevices;
00120 std::string DefaultDevice;
00121
00123 void signalEvent(Events sevent);
00124
00126 std::list<IManagerEventHandler*> eventHandlerList;
00127 };
00128 }
00129
00130 #endif