caudio/Headers/cAudioManager.h
Joshua Jones 75ece68dcf Added cross-platform Mutex and Thread classes.
Made cAudio, cAudioCapture, cAudioManager and other classes thread safe.
Made cAudioManager use a seperate update thread by default.
Added cAudioSleep, a cross-platform sleep() function
Moved global defines to cAudioDefines
Added defines to disable thread safety or the internal update thread if the user wishes it
Updated tutorials to reflect the changes made
2009-08-29 11:24:31 +00:00

86 lines
3.1 KiB
C++

#ifndef CAUDIOMANAGER_H_INCLUDED
#define CAUDIOMANAGER_H_INCLUDED
#include <map>
#include <string>
#include <vector>
#include "cAudio.h"
#include "../include/IAudioDecoderFactory.h"
#include "cListener.h"
#include "cAudioCapture.h"
#include "../include/IAudioManager.h"
#include "../Headers/cMutex.h"
namespace cAudio
{
class IAudio;
class cAudioManager : public IAudioManager
{
public:
//!Inits the audio manager calling the alut/etc start ups
virtual void init(int argc,char* argv[]);
//!Shuts everything down
virtual void shutDown();
//!Creates the cAudio object
virtual IAudio* createFromFile(const std::string& identifier,const std::string& file,bool stream = false);
//!Loads ogg from memory or virtual file system
virtual IAudio* createFromMemory(const std::string& identifier, const char* data, size_t length, std::string ext);
//!Loads raw audio from memory.
virtual IAudio* createFromRaw(const std::string& identifier,const char* data, size_t length, unsigned int frequency, AudioFormats format);
//!Register Audio Codec
virtual bool registerAudioDecoder(IAudioDecoderFactory* factory, std::string extension);
//!Unregister Audio Codec (allows you to prevent an file type from being playable with new sound sources)
//!Note that all current sound sources will still continue to use any currently allocated decoders.
//!Will delete the factory instance
virtual void unRegisterAudioDecoder(std::string extension);
//!Returns whether an audio decoder is currently registered for this file type
virtual bool isAudioDecoderRegistered(std::string extension);
//!Returns a registered audio decoder factory
virtual IAudioDecoderFactory* getAudioDecoderFactory(std::string extension);
//!Allows you to set the listener position (DEPRECIATED! USE getListener() INSTEAD!)
virtual void setListenerPos(float x,float y,float z);
//!Set Listener Orientation (DEPRECIATED! USE getListener() INSTEAD!)
virtual void setListenerOrientation(float ux,float uy,float uz);
//!Updates the cAudio playback
virtual void update();
//!Gets you the cAudio object you want
virtual IAudio *getSound(std::string identifier);
//!Releases "ALL" cAudio objects
virtual void release();
virtual IListener* getListener() { return &initlistener; }
virtual IAudioCapture* getAudioCapture() { return &initCapture; }
virtual bool IsThreadRunning() { return RunThread; }
static cAudioManager* Instance()
{
return &m_cAudioManager;
}
protected:
cAudioManager() : RunThread(false){ }
private:
//Mutex for thread syncronization
cAudioMutex Mutex;
bool RunThread;
//!Global cAudioManager
static cAudioManager m_cAudioManager;
//!The map that holds the cAudio objects
std::map<std::string, IAudio*> audiomap;
//!Decoder map that holds all decoders by file extension
std::map<std::string, IAudioDecoderFactory*> decodermap;
//!The listener object
cListener initlistener;
//!The audio capture instance
cAudioCapture initCapture;
};
}
#endif //! CAUDIOMANAGER_H_INCLUDED