cAudioManager.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 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 
 All Classes Namespaces Functions Variables Enumerations

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