00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _XAUDIO2AUDIOSYSTEM_
00019 #define _XAUDIO2AUDIOSYSTEM_
00020
00021 #include <map>
00022 #include <vector>
00023 #include <xaudio2.h>
00024
00025 #include "sound/AbstractAudioSystem.h"
00026
00027 class XAudio2AudioSystem : public AbstractAudioSystem
00028 {
00029 friend class XAudio2SoundEffect;
00030 friend class VoiceCallback;
00031 private:
00032 typedef std::map<IXAudio2SourceVoice*, XAudio2SoundEffect*> SourceVoiceMap;
00033 IXAudio2* m_pXAudio2;
00034
00035 IXAudio2MasteringVoice* m_pMasterVoice;
00036
00037 SourceVoiceMap m_sourceVoices;
00038 std::vector<VoiceCallback*> m_callbacks;
00039 IXAudio2SourceVoice* GetFreeVoice(XAudio2SoundEffect* pSF);
00040 public:
00041 XAudio2AudioSystem();
00042 virtual ~XAudio2AudioSystem();
00043
00044 virtual bool Initialize(const Settings& settings);
00045 virtual void Shutdown();
00046
00047 virtual void StopAllSounds();
00048 virtual void ResumeAllSounds();
00049
00050 virtual void SetVolume(const int nVolume);
00051 virtual int GetVolume() const;
00052
00053 virtual AbstractSoundEffectPtr CreateSoundEffect(SoundResourceHandlePtr pSoundResourceHandle);
00054 virtual void DestroySoundEffect(AbstractSoundEffectPtr pEffect) { }
00055
00056 };
00057
00058 #endif