From 6a48d6d664c7266a14280e71e6311c27466e10b0 Mon Sep 17 00:00:00 2001 From: Danilo Date: Tue, 28 May 2024 09:06:10 -0300 Subject: [PATCH] =?UTF-8?q?Implementa=C3=A7=C3=B5es=20em=20SoundEffects?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- framework/platform-dx/init.cpp | 3 +++ framework/platform-dx/soundeffect.cpp | 36 +++++++++++++++++++++++++-- inc/audio/readers/soundeffect.hpp | 8 +++++- inc/audio/soundeffect.hpp | 7 +++++- samples/01_blank/xna.cpp | 2 ++ 5 files changed, 52 insertions(+), 4 deletions(-) diff --git a/framework/platform-dx/init.cpp b/framework/platform-dx/init.cpp index d39447b..3d65c9d 100644 --- a/framework/platform-dx/init.cpp +++ b/framework/platform-dx/init.cpp @@ -1,6 +1,7 @@ #include "platform-dx/init.hpp" #include "csharp/type.hpp" #include "graphics/readers/texture2D.hpp" +#include "audio/readers/soundeffect.hpp" #include "content/typereadermanager.hpp" #include "content/defaultreaders.hpp" #include "platform-dx/implementations.hpp" @@ -47,6 +48,7 @@ namespace xna { insertRegisteredReader("Vector3Reader"); insertRegisteredReader("Vector4Reader"); insertRegisteredReader("Texture2DReader"); + insertRegisteredReader("SoundEffectReader"); } void PlatformInit::InitActivadors() @@ -74,5 +76,6 @@ namespace xna { insertActivadorReader(); insertActivadorReader(); insertActivadorReader(); + insertActivadorReader(); } } \ No newline at end of file diff --git a/framework/platform-dx/soundeffect.cpp b/framework/platform-dx/soundeffect.cpp index 5017b6f..2a1439b 100644 --- a/framework/platform-dx/soundeffect.cpp +++ b/framework/platform-dx/soundeffect.cpp @@ -11,6 +11,9 @@ namespace xna { impl = nullptr; } + SoundEffect::SoundEffect() { + } + SoundEffect::SoundEffect(String const& fileName) { if (!AudioEngine::impl || !AudioEngine::impl->_dxAudioEngine) return; @@ -19,8 +22,37 @@ namespace xna { impl->_dxSoundEffect = unew(AudioEngine::impl->_dxAudioEngine.get(), file.c_str()); } - SoundEffect::~SoundEffect() { - impl = nullptr; + SoundEffect::SoundEffect( + std::vector format, + std::vector data, + Int loopStart, + Int loopLength, + TimeSpan const& duration) { + if (!AudioEngine::impl || !AudioEngine::impl->_dxAudioEngine) + return; + + auto wavData = unew(data.size()); + for (size_t i = 0; i < data.size(); ++i) + wavData[i] = data[i]; + + auto wavFormat = reinterpret_cast(format.data()); + auto startAudio = wavData.get() + sizeof(WAVEFORMATEX); + /*auto se = new DxSoundEffect( + AudioEngine::impl->_dxAudioEngine.get(), + wavData, + wavFormat, + startAudio, + data.size(), + loopStart, + loopLength);*/ + impl->_dxSoundEffect = unew( + AudioEngine::impl->_dxAudioEngine.get(), + wavData, + wavFormat, + startAudio, + data.size(), + loopStart, + loopLength); } void SoundEffect::Play() { diff --git a/inc/audio/readers/soundeffect.hpp b/inc/audio/readers/soundeffect.hpp index 432af80..dc2df2c 100644 --- a/inc/audio/readers/soundeffect.hpp +++ b/inc/audio/readers/soundeffect.hpp @@ -12,7 +12,13 @@ namespace xna { SoundEffectReader() : ContentTypeReaderT(typeof()) {} PSoundEffect Read(ContentReader& input, PSoundEffect& existingInstance) override { - return nullptr; + const auto count1 = input.ReadInt32(); + auto format = input.ReadBytes(count1); + auto count2 = input.ReadInt32(); + auto data = input.ReadBytes(count2); + auto loopStart = input.ReadInt32(); + auto loopLength = input.ReadInt32(); + auto num = input.ReadInt32(); } }; } diff --git a/inc/audio/soundeffect.hpp b/inc/audio/soundeffect.hpp index 5de219d..db4fbb3 100644 --- a/inc/audio/soundeffect.hpp +++ b/inc/audio/soundeffect.hpp @@ -27,7 +27,12 @@ namespace xna { public: SoundEffect(); SoundEffect(String const& fileName); - ~SoundEffect(); + SoundEffect( + std::vector format, + std::vector data, + Int loopStart, + Int loopLength, + TimeSpan const& duration); void Play(); void Play(float volume, float pitch, float pan); uptr CreateInstance(); diff --git a/samples/01_blank/xna.cpp b/samples/01_blank/xna.cpp index d810dcf..a613eb4 100644 --- a/samples/01_blank/xna.cpp +++ b/samples/01_blank/xna.cpp @@ -27,6 +27,8 @@ namespace xna { void LoadContent() override { spriteBatch = New(*graphicsDevice); + auto effect = Content()->Load("ExitReached"); + Game::LoadContent(); }