diff --git a/project/Easy2D/Easy2D.vcxproj b/project/Easy2D/Easy2D.vcxproj
index 82024beb..48fc5fed 100644
--- a/project/Easy2D/Easy2D.vcxproj
+++ b/project/Easy2D/Easy2D.vcxproj
@@ -1,6 +1,12 @@
+
+
+
+
+
+
@@ -8,10 +14,11 @@
-
+
+
@@ -32,7 +39,6 @@
-
@@ -69,18 +75,21 @@
-
-
+
+
+
+
+
+
-
@@ -94,7 +103,6 @@
-
@@ -117,10 +125,8 @@
-
-
diff --git a/project/Easy2D/Easy2D.vcxproj.filters b/project/Easy2D/Easy2D.vcxproj.filters
index bed14fd0..1e8ff355 100644
--- a/project/Easy2D/Easy2D.vcxproj.filters
+++ b/project/Easy2D/Easy2D.vcxproj.filters
@@ -16,15 +16,15 @@
{a9793a75-3212-4e31-a443-b23f18a1e136}
+
+ {836608a6-7443-48f9-8acd-18d3ba664348}
+
core
-
- core
-
core
@@ -94,21 +94,12 @@
utils
-
- utils
-
-
- utils
-
ui
ui
-
- core
-
core
@@ -232,14 +223,35 @@
dx
+
+ audio
+
+
+ audio
+
+
+ audio
+
+
+ audio
+
+
+ audio
+
+
+ core
+
+
+ audio
+
+
+ core
+
core
-
- core
-
core
@@ -297,21 +309,12 @@
utils
-
- utils
-
-
- utils
-
ui
ui
-
- core
-
core
@@ -372,5 +375,23 @@
dx
+
+ audio
+
+
+ audio
+
+
+ audio
+
+
+ audio
+
+
+ audio
+
+
+ audio
+
\ No newline at end of file
diff --git a/project/Samples/main.cpp b/project/Samples/main.cpp
index 1fcbbbb9..fa0bb2b8 100644
--- a/project/Samples/main.cpp
+++ b/project/Samples/main.cpp
@@ -25,11 +25,10 @@ class DemoApp
public:
DemoApp()
{
- Options options;
- options.title = L"Easy2D示例程序";
- options.width = WINDOW_WIDTH;
- options.height = WINDOW_HEIGHT;
+ // 使用 Audio 组件
+ Use(&Audio::Instance());
+ Options options(L"Easy2D示例程序", WINDOW_WIDTH, WINDOW_HEIGHT);
Init(options);
}
diff --git a/src/core/Music.cpp b/src/audio/Music.cpp
similarity index 95%
rename from src/core/Music.cpp
rename to src/audio/Music.cpp
index 8b8f47d3..d87bcbb8 100644
--- a/src/core/Music.cpp
+++ b/src/audio/Music.cpp
@@ -19,12 +19,10 @@
// THE SOFTWARE.
#include "Music.h"
-#include "../utils/Transcoder.h"
-#include "../utils/File.h"
-#include "../utils/string.h"
-#include "modules.h"
+#include "Transcoder.h"
#include "audio.h"
-#include "logs.h"
+#include "../core/logs.h"
+#include "../core/modules.h"
namespace easy2d
{
@@ -60,7 +58,7 @@ namespace easy2d
if (res.IsFileType())
{
- if (!File(res.GetFileName()).Exists())
+ if (!modules::Shlwapi::Get().PathFileExistsW(res.GetFileName().c_str()))
{
E2D_WARNING_LOG(L"Media file '%s' not found", res.GetFileName().c_str());
return false;
diff --git a/src/core/Music.h b/src/audio/Music.h
similarity index 93%
rename from src/core/Music.h
rename to src/audio/Music.h
index 298a044d..59282f19 100644
--- a/src/core/Music.h
+++ b/src/audio/Music.h
@@ -19,13 +19,15 @@
// THE SOFTWARE.
#pragma once
-#include "include-forwards.h"
-#include "audio.h"
-#include "Resource.h"
+#include "../core/include-forwards.h"
+#include "../core/Resource.h"
+#include "Voice.h"
namespace easy2d
{
- // 音乐
+ E2D_DECLARE_SMART_PTR(Music);
+
+ // 音乐对象
class E2D_API Music
: public virtual Object
{
diff --git a/src/utils/Player.cpp b/src/audio/Player.cpp
similarity index 99%
rename from src/utils/Player.cpp
rename to src/audio/Player.cpp
index 834d0d22..7f1b16d8 100644
--- a/src/utils/Player.cpp
+++ b/src/audio/Player.cpp
@@ -19,7 +19,6 @@
// THE SOFTWARE.
#include "Player.h"
-#include "../core/Music.h"
namespace easy2d
{
diff --git a/src/utils/Player.h b/src/audio/Player.h
similarity index 96%
rename from src/utils/Player.h
rename to src/audio/Player.h
index 340fa45b..1abae46d 100644
--- a/src/utils/Player.h
+++ b/src/audio/Player.h
@@ -20,14 +20,15 @@
#pragma once
#include "../core/include-forwards.h"
-#include "../core/Resource.h"
-#include
+#include "Music.h"
namespace easy2d
{
+ E2D_DECLARE_SMART_PTR(Player);
+
// 音乐播放器
class E2D_API Player
- : protected Noncopyable
+ : protected Object
{
using MusicMap = Map;
diff --git a/src/utils/Transcoder.cpp b/src/audio/Transcoder.cpp
similarity index 99%
rename from src/utils/Transcoder.cpp
rename to src/audio/Transcoder.cpp
index 58a3e2d1..d332b019 100644
--- a/src/utils/Transcoder.cpp
+++ b/src/audio/Transcoder.cpp
@@ -23,10 +23,10 @@
#endif
#include "Transcoder.h"
-#include "../core/modules.h"
+#include "audio-modules.h"
+#include "../core/ComPtr.hpp"
#include "../core/logs.h"
-#include "../DX/helper.hpp"
-#include
+#include "../core/modules.h"
namespace easy2d
{
diff --git a/src/utils/Transcoder.h b/src/audio/Transcoder.h
similarity index 98%
rename from src/utils/Transcoder.h
rename to src/audio/Transcoder.h
index a5320687..bc07e3b1 100644
--- a/src/utils/Transcoder.h
+++ b/src/audio/Transcoder.h
@@ -19,7 +19,6 @@
// THE SOFTWARE.
#pragma once
-#include "../core/macros.h"
#include "../core/Resource.h"
#include
#include
diff --git a/src/core/audio.cpp b/src/audio/Voice.cpp
similarity index 64%
rename from src/core/audio.cpp
rename to src/audio/Voice.cpp
index c4e7300f..fe46f23e 100644
--- a/src/core/audio.cpp
+++ b/src/audio/Voice.cpp
@@ -18,20 +18,11 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
+#include "Voice.h"
#include "audio.h"
-#include "include-forwards.h"
-#include "modules.h"
-#include "logs.h"
-#include
-#include
-#include
-#include
+
namespace easy2d
{
- //-------------------------------------------------------
- // Voice
- //-------------------------------------------------------
-
Voice::Voice()
: source_voice_(nullptr)
{
@@ -154,93 +145,4 @@ namespace easy2d
source_voice_ = source_voice;
}
-
- //-------------------------------------------------------
- // Audio
- //-------------------------------------------------------
-
- Audio::Audio()
- : x_audio2_(nullptr)
- , mastering_voice_(nullptr)
- {
- }
-
- Audio::~Audio()
- {
- }
-
- HRESULT Audio::Init()
- {
- E2D_LOG(L"Creating audio resources");
-
- HRESULT hr = modules::MediaFoundation::Get().MFStartup(MF_VERSION, MFSTARTUP_FULL);
-
- if (SUCCEEDED(hr))
- {
- hr = modules::XAudio2::Get().XAudio2Create(&x_audio2_, 0, XAUDIO2_DEFAULT_PROCESSOR);
- }
-
- if (SUCCEEDED(hr))
- {
- hr = x_audio2_->CreateMasteringVoice(&mastering_voice_);
- }
-
- return hr;
- }
-
- void Audio::Destroy()
- {
- E2D_LOG(L"Destroying audio resources");
-
- ClearVoiceCache();
-
- if (mastering_voice_)
- {
- mastering_voice_->DestroyVoice();
- mastering_voice_ = nullptr;
- }
-
- DX::SafeRelease(x_audio2_);
-
- modules::MediaFoundation::Get().MFShutdown();
- }
-
- HRESULT Audio::CreateVoice(Voice& voice, const WAVEFORMATEX* wfx)
- {
- HRESULT hr;
- IXAudio2SourceVoice* source_voice;
-
- hr = x_audio2_->CreateSourceVoice(&source_voice, wfx, 0, XAUDIO2_DEFAULT_FREQ_RATIO);
- if (SUCCEEDED(hr))
- {
- voice.SetSourceVoice(source_voice);
- voice_cache_.insert(&voice);
- }
- return hr;
- }
-
- void Audio::DeleteVoice(Voice* voice)
- {
- voice_cache_.erase(voice);
- }
-
- void Audio::ClearVoiceCache()
- {
- for (auto voice : voice_cache_)
- {
- voice->Destroy();
- }
- voice_cache_.clear();
- }
-
- void Audio::Open()
- {
- x_audio2_->StartEngine();
- }
-
- void Audio::Close()
- {
- x_audio2_->StopEngine();
- }
-
}
\ No newline at end of file
diff --git a/src/core/audio.h b/src/audio/Voice.h
similarity index 73%
rename from src/core/audio.h
rename to src/audio/Voice.h
index 355dfa09..583179f9 100644
--- a/src/core/audio.h
+++ b/src/audio/Voice.h
@@ -19,10 +19,8 @@
// THE SOFTWARE.
#pragma once
-#include "macros.h"
-#include "helper.hpp"
-#include "Singleton.hpp"
-#include "noncopyable.hpp"
+#include "../core/macros.h"
+#include "../core/noncopyable.hpp"
#include
namespace easy2d
@@ -73,44 +71,4 @@ namespace easy2d
IXAudio2SourceVoice* source_voice_;
};
-
- class E2D_API Audio
- : public Singleton