增加Audio类
This commit is contained in:
parent
2e161ff6a8
commit
637fe89e37
|
|
@ -0,0 +1,60 @@
|
|||
#include "..\e2dbase.h"
|
||||
|
||||
|
||||
e2d::Audio * e2d::Audio::_instance = nullptr;
|
||||
|
||||
e2d::Audio * e2d::Audio::getInstance()
|
||||
{
|
||||
if (!_instance)
|
||||
{
|
||||
_instance = new (std::nothrow) Audio;
|
||||
}
|
||||
return _instance;
|
||||
}
|
||||
|
||||
void e2d::Audio::destroyInstance()
|
||||
{
|
||||
if (_instance)
|
||||
{
|
||||
delete _instance;
|
||||
_instance = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
IXAudio2 * e2d::Audio::getXAudio2()
|
||||
{
|
||||
return _xAudio2;
|
||||
}
|
||||
|
||||
IXAudio2MasteringVoice * e2d::Audio::getMasteringVoice()
|
||||
{
|
||||
return _masteringVoice;
|
||||
}
|
||||
|
||||
e2d::Audio::Audio()
|
||||
: _xAudio2(nullptr)
|
||||
, _masteringVoice(nullptr)
|
||||
{
|
||||
::CoInitialize(nullptr);
|
||||
|
||||
ThrowIfFailed(
|
||||
XAudio2Create(&_xAudio2, 0)
|
||||
);
|
||||
|
||||
ThrowIfFailed(
|
||||
_xAudio2->CreateMasteringVoice(&_masteringVoice)
|
||||
);
|
||||
}
|
||||
|
||||
e2d::Audio::~Audio()
|
||||
{
|
||||
if (_masteringVoice)
|
||||
{
|
||||
_masteringVoice->DestroyVoice();
|
||||
_masteringVoice = nullptr;
|
||||
}
|
||||
|
||||
SafeRelease(_xAudio2);
|
||||
|
||||
::CoUninitialize();
|
||||
}
|
||||
|
|
@ -22,6 +22,12 @@ void operator delete(void * block, e2d::autorelease_t const &) E2D_NOEXCEPT
|
|||
}
|
||||
|
||||
|
||||
e2d::GC * e2d::GC::getInstance()
|
||||
{
|
||||
static GC _instance;
|
||||
return &_instance;
|
||||
}
|
||||
|
||||
e2d::GC::GC()
|
||||
: _notifyed(false)
|
||||
, _cleanup(false)
|
||||
|
|
@ -32,12 +38,29 @@ e2d::GC::GC()
|
|||
e2d::GC::~GC()
|
||||
{
|
||||
// 删除所有对象
|
||||
this->clear();
|
||||
Game::getInstance()->clearAllScenes();
|
||||
Timer::getInstance()->clearAllTasks();
|
||||
ActionManager::getInstance()->clearAll();
|
||||
|
||||
// 헌뇜暠튬뻠닸
|
||||
_cleanup = true;
|
||||
for (const auto& ref : _pool)
|
||||
{
|
||||
delete ref;
|
||||
}
|
||||
_pool.clear();
|
||||
_cleanup = false;
|
||||
|
||||
// 헌뇜뻠닸
|
||||
Image::clearCache();
|
||||
}
|
||||
|
||||
// 헌뇜데절
|
||||
Player::destroyInstance();
|
||||
Audio::destroyInstance();
|
||||
Renderer::destroyInstance();
|
||||
Input::destroyInstance();
|
||||
Window::destroyInstance();
|
||||
Game::destroyInstance();
|
||||
}
|
||||
|
||||
void e2d::GC::flush()
|
||||
{
|
||||
|
|
@ -59,37 +82,6 @@ void e2d::GC::flush()
|
|||
}
|
||||
}
|
||||
|
||||
void e2d::GC::clear()
|
||||
{
|
||||
_cleanup = true;
|
||||
|
||||
Game::getInstance()->clearAllScenes();
|
||||
Timer::getInstance()->clearAllTasks();
|
||||
ActionManager::getInstance()->clearAll();
|
||||
|
||||
for (const auto& ref : _pool)
|
||||
{
|
||||
delete ref;
|
||||
}
|
||||
_pool.clear();
|
||||
_cleanup = false;
|
||||
|
||||
// 헌뇜뻠닸
|
||||
Image::clearCache();
|
||||
|
||||
// 헌뇜데절
|
||||
Game::destroyInstance();
|
||||
Renderer::destroyInstance();
|
||||
Input::destroyInstance();
|
||||
Window::destroyInstance();
|
||||
}
|
||||
|
||||
e2d::GC * e2d::GC::getInstance()
|
||||
{
|
||||
static GC _instance;
|
||||
return &_instance;
|
||||
}
|
||||
|
||||
void e2d::GC::autorelease(Ref * ref)
|
||||
{
|
||||
if (ref)
|
||||
|
|
|
|||
|
|
@ -22,44 +22,6 @@ inline bool TraceError(wchar_t* sPrompt, HRESULT hr)
|
|||
}
|
||||
|
||||
|
||||
e2d::Music::XAudio2Tool::XAudio2Tool()
|
||||
{
|
||||
::CoInitialize(nullptr);
|
||||
|
||||
ThrowIfFailed(
|
||||
XAudio2Create(&_xAudio2, 0)
|
||||
);
|
||||
|
||||
ThrowIfFailed(
|
||||
_xAudio2->CreateMasteringVoice(&_masteringVoice)
|
||||
);
|
||||
}
|
||||
|
||||
e2d::Music::XAudio2Tool::~XAudio2Tool()
|
||||
{
|
||||
_masteringVoice->DestroyVoice();
|
||||
_xAudio2->Release();
|
||||
|
||||
::CoUninitialize();
|
||||
}
|
||||
|
||||
e2d::Music::XAudio2Tool* e2d::Music::XAudio2Tool::getInstance()
|
||||
{
|
||||
static XAudio2Tool instance;
|
||||
return &instance;
|
||||
}
|
||||
|
||||
IXAudio2 * e2d::Music::XAudio2Tool::getXAudio2()
|
||||
{
|
||||
return _xAudio2;
|
||||
}
|
||||
|
||||
IXAudio2MasteringVoice * e2d::Music::XAudio2Tool::getMasteringVoice()
|
||||
{
|
||||
return _masteringVoice;
|
||||
}
|
||||
|
||||
|
||||
e2d::Music::Music()
|
||||
: _opened(false)
|
||||
, _wfx(nullptr)
|
||||
|
|
@ -70,8 +32,6 @@ e2d::Music::Music()
|
|||
, _voice(nullptr)
|
||||
, _voiceCallback()
|
||||
{
|
||||
auto xAudio2 = XAudio2Tool::getInstance()->getXAudio2();
|
||||
xAudio2->AddRef();
|
||||
}
|
||||
|
||||
e2d::Music::Music(const e2d::String & filePath)
|
||||
|
|
@ -84,9 +44,6 @@ e2d::Music::Music(const e2d::String & filePath)
|
|||
, _voice(nullptr)
|
||||
, _voiceCallback()
|
||||
{
|
||||
auto xAudio2 = XAudio2Tool::getInstance()->getXAudio2();
|
||||
xAudio2->AddRef();
|
||||
|
||||
this->open(filePath);
|
||||
}
|
||||
|
||||
|
|
@ -100,18 +57,12 @@ e2d::Music::Music(const Resource& res)
|
|||
, _voice(nullptr)
|
||||
, _voiceCallback()
|
||||
{
|
||||
auto xAudio2 = XAudio2Tool::getInstance()->getXAudio2();
|
||||
xAudio2->AddRef();
|
||||
|
||||
this->open(res);
|
||||
}
|
||||
|
||||
e2d::Music::~Music()
|
||||
{
|
||||
close();
|
||||
|
||||
auto xAudio2 = XAudio2Tool::getInstance()->getXAudio2();
|
||||
xAudio2->Release();
|
||||
}
|
||||
|
||||
bool e2d::Music::open(const e2d::String & filePath)
|
||||
|
|
@ -173,7 +124,7 @@ bool e2d::Music::open(const e2d::String & filePath)
|
|||
}
|
||||
|
||||
// ´´½¨ÒôÔ´
|
||||
auto xAudio2 = XAudio2Tool::getInstance()->getXAudio2();
|
||||
auto xAudio2 = Audio::getInstance()->getXAudio2();
|
||||
HRESULT hr = xAudio2->CreateSourceVoice(&_voice, _wfx, 0, XAUDIO2_DEFAULT_FREQ_RATIO, &_voiceCallback);
|
||||
|
||||
if (FAILED(hr))
|
||||
|
|
@ -251,7 +202,7 @@ bool e2d::Music::open(const Resource& res)
|
|||
}
|
||||
|
||||
// ´´½¨ÒôÔ´
|
||||
auto xAudio2 = XAudio2Tool::getInstance()->getXAudio2();
|
||||
auto xAudio2 = Audio::getInstance()->getXAudio2();
|
||||
HRESULT hr = xAudio2->CreateSourceVoice(&_voice, _wfx, 0, XAUDIO2_DEFAULT_FREQ_RATIO, &_voiceCallback);
|
||||
|
||||
if (FAILED(hr))
|
||||
|
|
|
|||
|
|
@ -1,6 +1,26 @@
|
|||
#include "..\e2dtool.h"
|
||||
|
||||
|
||||
e2d::Player * e2d::Player::_instance = nullptr;
|
||||
|
||||
e2d::Player * e2d::Player::getInstance()
|
||||
{
|
||||
if (!_instance)
|
||||
{
|
||||
_instance = new (std::nothrow) Player;
|
||||
}
|
||||
return _instance;
|
||||
}
|
||||
|
||||
void e2d::Player::destroyInstance()
|
||||
{
|
||||
if (_instance)
|
||||
{
|
||||
delete _instance;
|
||||
_instance = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
e2d::Player::Player()
|
||||
: _volume(1.f)
|
||||
{
|
||||
|
|
@ -15,8 +35,6 @@ e2d::Player::~Player()
|
|||
delete pair.second;
|
||||
}
|
||||
}
|
||||
|
||||
CoUninitialize();
|
||||
}
|
||||
|
||||
bool e2d::Player::preload(const String & filePath)
|
||||
|
|
|
|||
152
core/e2dbase.h
152
core/e2dbase.h
|
|
@ -139,65 +139,6 @@ private:
|
|||
};
|
||||
|
||||
|
||||
// 输入设备
|
||||
class Input
|
||||
{
|
||||
public:
|
||||
// 获取输入设备实例
|
||||
static Input * getInstance();
|
||||
|
||||
// 销毁输入设备实例
|
||||
static void destroyInstance();
|
||||
|
||||
// 检测键盘某按键是否正被按下
|
||||
bool isDown(
|
||||
KeyCode key
|
||||
);
|
||||
|
||||
// 检测鼠标按键是否正被按下
|
||||
bool isDown(
|
||||
MouseCode code
|
||||
);
|
||||
|
||||
// 获得鼠标X轴坐标值
|
||||
float getMouseX();
|
||||
|
||||
// 获得鼠标Y轴坐标值
|
||||
float getMouseY();
|
||||
|
||||
// 获得鼠标坐标值
|
||||
Point getMousePos();
|
||||
|
||||
// 获得鼠标X轴坐标增量
|
||||
float getMouseDeltaX();
|
||||
|
||||
// 获得鼠标Y轴坐标增量
|
||||
float getMouseDeltaY();
|
||||
|
||||
// 获得鼠标Z轴(鼠标滚轮)坐标增量
|
||||
float getMouseDeltaZ();
|
||||
|
||||
// 刷新输入设备状态
|
||||
void update();
|
||||
|
||||
protected:
|
||||
Input();
|
||||
|
||||
~Input();
|
||||
|
||||
E2D_DISABLE_COPY(Input);
|
||||
|
||||
protected:
|
||||
IDirectInput8W* _directInput;
|
||||
IDirectInputDevice8W* _keyboardDevice;
|
||||
IDirectInputDevice8W* _mouseDevice;
|
||||
DIMOUSESTATE _mouseState;
|
||||
char _keyBuffer[256];
|
||||
|
||||
static Input * _instance;
|
||||
};
|
||||
|
||||
|
||||
// 渲染器
|
||||
class Renderer
|
||||
{
|
||||
|
|
@ -283,6 +224,96 @@ protected:
|
|||
};
|
||||
|
||||
|
||||
// 输入设备
|
||||
class Input
|
||||
{
|
||||
public:
|
||||
// 获取输入设备实例
|
||||
static Input * getInstance();
|
||||
|
||||
// 销毁输入设备实例
|
||||
static void destroyInstance();
|
||||
|
||||
// 检测键盘某按键是否正被按下
|
||||
bool isDown(
|
||||
KeyCode key
|
||||
);
|
||||
|
||||
// 检测鼠标按键是否正被按下
|
||||
bool isDown(
|
||||
MouseCode code
|
||||
);
|
||||
|
||||
// 获得鼠标X轴坐标值
|
||||
float getMouseX();
|
||||
|
||||
// 获得鼠标Y轴坐标值
|
||||
float getMouseY();
|
||||
|
||||
// 获得鼠标坐标值
|
||||
Point getMousePos();
|
||||
|
||||
// 获得鼠标X轴坐标增量
|
||||
float getMouseDeltaX();
|
||||
|
||||
// 获得鼠标Y轴坐标增量
|
||||
float getMouseDeltaY();
|
||||
|
||||
// 获得鼠标Z轴(鼠标滚轮)坐标增量
|
||||
float getMouseDeltaZ();
|
||||
|
||||
// 刷新输入设备状态
|
||||
void update();
|
||||
|
||||
protected:
|
||||
Input();
|
||||
|
||||
~Input();
|
||||
|
||||
E2D_DISABLE_COPY(Input);
|
||||
|
||||
protected:
|
||||
IDirectInput8W * _directInput;
|
||||
IDirectInputDevice8W* _keyboardDevice;
|
||||
IDirectInputDevice8W* _mouseDevice;
|
||||
DIMOUSESTATE _mouseState;
|
||||
char _keyBuffer[256];
|
||||
|
||||
static Input * _instance;
|
||||
};
|
||||
|
||||
|
||||
// 音频设备
|
||||
class Audio
|
||||
{
|
||||
public:
|
||||
// 获取音频设备实例
|
||||
static Audio * getInstance();
|
||||
|
||||
// 销毁实例
|
||||
static void destroyInstance();
|
||||
|
||||
// 获取 XAudio2 实例对象
|
||||
IXAudio2 * getXAudio2();
|
||||
|
||||
// 获取 MasteringVoice 实例对象
|
||||
IXAudio2MasteringVoice* getMasteringVoice();
|
||||
|
||||
protected:
|
||||
Audio();
|
||||
|
||||
virtual ~Audio();
|
||||
|
||||
E2D_DISABLE_COPY(Audio);
|
||||
|
||||
protected:
|
||||
IXAudio2 * _xAudio2;
|
||||
IXAudio2MasteringVoice* _masteringVoice;
|
||||
|
||||
static Audio * _instance;
|
||||
};
|
||||
|
||||
|
||||
class Timer;
|
||||
class ActionManager;
|
||||
class Scene;
|
||||
|
|
@ -395,9 +426,6 @@ public:
|
|||
// 刷新内存池
|
||||
void flush();
|
||||
|
||||
// 回收内存池中的所有对象
|
||||
void clear();
|
||||
|
||||
private:
|
||||
GC();
|
||||
|
||||
|
|
|
|||
|
|
@ -115,27 +115,6 @@ public:
|
|||
// 삿혤 IXAudio2SourceVoice 뚤蹶
|
||||
IXAudio2SourceVoice * getIXAudio2SourceVoice() const;
|
||||
|
||||
public:
|
||||
class XAudio2Tool
|
||||
{
|
||||
public:
|
||||
XAudio2Tool();
|
||||
|
||||
~XAudio2Tool();
|
||||
|
||||
static XAudio2Tool* getInstance();
|
||||
|
||||
// 获取 XAudio2 实例对象
|
||||
IXAudio2 * getXAudio2();
|
||||
|
||||
// 获取 MasteringVoice 实例对象
|
||||
IXAudio2MasteringVoice* getMasteringVoice();
|
||||
|
||||
protected:
|
||||
IXAudio2 * _xAudio2;
|
||||
IXAudio2MasteringVoice* _masteringVoice;
|
||||
};
|
||||
|
||||
protected:
|
||||
bool _readMMIO();
|
||||
|
||||
|
|
@ -169,12 +148,12 @@ protected:
|
|||
// 稜있꺄렴포
|
||||
class Player
|
||||
{
|
||||
friend class Game;
|
||||
|
||||
public:
|
||||
Player();
|
||||
// 获取播放器实例
|
||||
static Player * getInstance();
|
||||
|
||||
~Player();
|
||||
// 销毁实例
|
||||
static void destroyInstance();
|
||||
|
||||
// 渡속潼稜있栗都
|
||||
bool preload(
|
||||
|
|
@ -258,9 +237,18 @@ public:
|
|||
// 헌왕稜있뻠닸
|
||||
void clearCache();
|
||||
|
||||
private:
|
||||
protected:
|
||||
Player();
|
||||
|
||||
~Player();
|
||||
|
||||
E2D_DISABLE_COPY(Player);
|
||||
|
||||
protected:
|
||||
float _volume;
|
||||
std::map<size_t, Music*> _musicList;
|
||||
|
||||
static Player * _instance;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@
|
|||
<ClCompile Include="..\..\core\Action\ScaleTo.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\Sequence.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\Spawn.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\Audio.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\Game.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\GC.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\Input.cpp" />
|
||||
|
|
|
|||
|
|
@ -238,5 +238,8 @@
|
|||
<ClCompile Include="..\..\core\Node\Canvas.cpp">
|
||||
<Filter>Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Base\Audio.cpp">
|
||||
<Filter>Base</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
@ -195,6 +195,7 @@
|
|||
<ClCompile Include="..\..\core\Action\ScaleTo.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\Sequence.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\Spawn.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\Audio.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\Game.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\GC.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\Input.cpp" />
|
||||
|
|
|
|||
|
|
@ -238,5 +238,8 @@
|
|||
<ClCompile Include="..\..\core\Node\Canvas.cpp">
|
||||
<Filter>Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Base\Audio.cpp">
|
||||
<Filter>Base</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
@ -215,6 +215,7 @@
|
|||
<ClCompile Include="..\..\core\Action\Sequence.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\FiniteTimeAction.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\Spawn.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\Audio.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\Game.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\GC.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\Input.cpp" />
|
||||
|
|
|
|||
|
|
@ -231,6 +231,9 @@
|
|||
<ClCompile Include="..\..\core\Node\Canvas.cpp">
|
||||
<Filter>Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Base\Audio.cpp">
|
||||
<Filter>Base</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\core\easy2d.h" />
|
||||
|
|
|
|||
Loading…
Reference in New Issue