From affa6f0dd8cc94340e36364dda3bbf3e6b167b22 Mon Sep 17 00:00:00 2001 From: Glence Date: Mon, 16 Jan 2023 21:05:21 +0800 Subject: [PATCH] added implantation for audio scripting --- Assets/Scripts/SC_SoundsBoard.cs | 13 ++- .../src/AudioSystem/SHAudioSystem.cpp | 4 +- SHADE_Engine/src/AudioSystem/SHAudioSystem.h | 4 +- SHADE_Managed/src/Audio/Audio.cxx | 31 +++++++ SHADE_Managed/src/Audio/Audio.hxx | 9 ++ SHADE_Managed/src/Audio/AudioClip.cxx | 89 +++++++++++++++++++ SHADE_Managed/src/Audio/AudioClip.hxx | 83 +++++++++++++++++ 7 files changed, 227 insertions(+), 6 deletions(-) create mode 100644 SHADE_Managed/src/Audio/AudioClip.cxx create mode 100644 SHADE_Managed/src/Audio/AudioClip.hxx diff --git a/Assets/Scripts/SC_SoundsBoard.cs b/Assets/Scripts/SC_SoundsBoard.cs index 839450a9..fdfaa02b 100644 --- a/Assets/Scripts/SC_SoundsBoard.cs +++ b/Assets/Scripts/SC_SoundsBoard.cs @@ -4,6 +4,7 @@ using System; public class SoundsBoard : Script { + AudioClipHandler test; protected override void awake() { /* @@ -31,13 +32,21 @@ event:/Homeowner/homeowner_humming event:/Homeowner/homeowner_footsteps event:/Homeowner/homeowner_detect_raccoon */ + test = Audio.CreateAudioClip("event:/Music/player_undetected"); + Audio.AddAudioClipToSFXChannelGroup(test); + } + + protected override void start() + { + test.Play(); } protected override void update() { + if (Input.GetKeyDown(Input.KeyCode.Q)) - Audio.PlayBGMOnce2D("event:/UI/mouse_down_element"); + test.Play(); if (Input.GetKeyDown(Input.KeyCode.W)) - Audio.PlayBGMOnce2D("event:/UI/mouse_down_empty"); + test.Stop(true); if (Input.GetKeyDown(Input.KeyCode.E)) Audio.PlayBGMOnce2D("event:/UI/mouse_enter_element"); if (Input.GetKeyDown(Input.KeyCode.R)) diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp index a31383fb..543523e0 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp @@ -372,13 +372,13 @@ namespace SHADE { if (auto transform = SHComponentManager::GetComponent_s(eid)) { - handle->transformRef = transform; + //handle->transformRef = transform; } } void SHAudioSystem::DetachAudioClipToObject(Handle handle, EntityID eid) { - handle->transformRef = nullptr; + //handle->transformRef = nullptr; } //AudioClip* SHAudioSystem::CreateAudioClip(const char* path) diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.h b/SHADE_Engine/src/AudioSystem/SHAudioSystem.h index 153ec86a..d1fc325a 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.h +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.h @@ -23,7 +23,7 @@ namespace SHADE class SHAudioListenerComponent; - class AudioClip + class SH_API AudioClip { public: //expose to sxripting @@ -39,7 +39,7 @@ namespace SHADE friend class SHAudioSystem; private: FMOD::Studio::EventInstance* instance = nullptr; - SHTransformComponent* transformRef = nullptr; + EntityID transformRef = MAX_EID; }; class SH_API SHAudioSystem : public SHSystem diff --git a/SHADE_Managed/src/Audio/Audio.cxx b/SHADE_Managed/src/Audio/Audio.cxx index 52e29529..a4600df1 100644 --- a/SHADE_Managed/src/Audio/Audio.cxx +++ b/SHADE_Managed/src/Audio/Audio.cxx @@ -98,4 +98,35 @@ namespace SHADE auto audioSys = SHSystemManager::GetSystem(); audioSys->StopAllSounds(); } + + AudioClipHandler Audio::CreateAudioClip(System::String^ path) + { + auto audioSys = SHSystemManager::GetSystem(); + return AudioClipHandler(audioSys->CreateAudioClip(Convert::ToNative(path).data())); + } + + void Audio::AddAudioClipToBGMChannelGroup(AudioClipHandler handle) + { + auto audioSys = SHSystemManager::GetSystem(); + audioSys->AddAudioClipToBGMChannelGroup(handle.NativeObject); + } + + void Audio::AddAudioClipToSFXChannelGroup(AudioClipHandler handle) + { + auto audioSys = SHSystemManager::GetSystem(); + audioSys->AddAudioClipToSFXChannelGroup(handle.NativeObject); + } + + void Audio::AttachAudioClipToObject(AudioClipHandler handle, EntityID eid) + { + auto audioSys = SHSystemManager::GetSystem(); + audioSys->AttachAudioClipToObject(handle.NativeObject, eid); + } + + void Audio::DetachAudioClipToObject(AudioClipHandler handle, EntityID eid) + { + auto audioSys = SHSystemManager::GetSystem(); + audioSys->DetachAudioClipToObject(handle.NativeObject, eid); + } + } diff --git a/SHADE_Managed/src/Audio/Audio.hxx b/SHADE_Managed/src/Audio/Audio.hxx index d568dc90..1a5ced53 100644 --- a/SHADE_Managed/src/Audio/Audio.hxx +++ b/SHADE_Managed/src/Audio/Audio.hxx @@ -13,6 +13,7 @@ of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ #pragma once #include "Engine/GameObject.hxx" +#include "Audio/AudioClip.hxx" namespace SHADE { @@ -99,5 +100,13 @@ namespace SHADE /// Stops playback of all sound effects and music. /// static void StopAllSounds(); + + + //to comment ltr + static AudioClipHandler CreateAudioClip(System::String^ path); + static void AddAudioClipToBGMChannelGroup(AudioClipHandler handle); + static void AddAudioClipToSFXChannelGroup(AudioClipHandler handle); + static void AttachAudioClipToObject(AudioClipHandler handle, EntityID eid); + static void DetachAudioClipToObject(AudioClipHandler handle, EntityID eid); }; } diff --git a/SHADE_Managed/src/Audio/AudioClip.cxx b/SHADE_Managed/src/Audio/AudioClip.cxx new file mode 100644 index 00000000..021a3437 --- /dev/null +++ b/SHADE_Managed/src/Audio/AudioClip.cxx @@ -0,0 +1,89 @@ +/************************************************************************************//*! +\file AudioClip.cxx +\author Glence Low +\par email: glence.low\@digipen.edu +\date Jan 16, 2023 +\brief Contains the implementation of the functions in managed AudioClip + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "AudioClip.hxx" +// Standard Library +#include +// Project Includes +#include "Utility/Convert.hxx" +#include "Resource/SHResourceManagerInterface.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Properties */ + /*---------------------------------------------------------------------------------*/ + Handle AudioClipHandler::NativeObject::get() + try + { + return Handle(Convert::ToNative(audioClipInstHandle)); + } + catch (const BadHandleCastException&) + { + return Handle(); + } + GenericHandle AudioClipHandler::NativeObjectHandle::get() + { + return audioClipInstHandle; + } + AssetID AudioClipHandler::NativeAssetID::get() + { + return SHResourceManagerInterface::GetAssetID(Convert::ToNative(audioClipInstHandle)).value_or(INVALID_ASSET_ID); + } + + /*---------------------------------------------------------------------------------*/ + /* Constructors/Destructor */ + /*---------------------------------------------------------------------------------*/ + AudioClipHandler::AudioClipHandler(Handle audioClip) + : audioClipInstHandle{ Handle(audioClip) } + {} + + /*---------------------------------------------------------------------------------*/ + /* AudioClip Properties Functions */ + /*---------------------------------------------------------------------------------*/ + void AudioClipHandler::Play() + { + NativeObject->Play(); + } + + void AudioClipHandler::Stop(bool fadeOut) + { + NativeObject->Stop(fadeOut); + } + + void AudioClipHandler::SetPause(bool pause) + { + NativeObject->SetPause(pause); + } + + bool AudioClipHandler::IsPaused() + { + return NativeObject->IsPaused(); + } + + void AudioClipHandler::SetParameter(System::String^ paramName, float value) + { + NativeObject->SetParameter(Convert::ToNative(paramName).data(), value); + } + + float AudioClipHandler::GetParameterValue(System::String^ paramName) + { + return NativeObject->GetParameterValue(Convert::ToNative(paramName).data()); + } + + + +} \ No newline at end of file diff --git a/SHADE_Managed/src/Audio/AudioClip.hxx b/SHADE_Managed/src/Audio/AudioClip.hxx new file mode 100644 index 00000000..09f6a2d1 --- /dev/null +++ b/SHADE_Managed/src/Audio/AudioClip.hxx @@ -0,0 +1,83 @@ +/************************************************************************************//*! +\file AudioClip.hxx +\author Glence Low +\par email: glence.low\@digipen.edu +\date Jan 16, 2023 +\brief Contains the definition of the managed Audio Clip class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// External Dependencies +#include "Resource/SHHandle.h" +#include "AudioSystem/SHAudioSystem.h" +#include "Assets/SHAssetMacros.h" +// Project Includes +#include "Engine/GenericHandle.hxx" + +namespace SHADE +{ + /// + /// Managed counterpart of the AudioSystem containing Audioclip + /// that can be fed to Audioscripting for creating clips. + /// + public value struct AudioClipHandler + { + internal: + /*-----------------------------------------------------------------------------*/ + /* Properties */ + /*-----------------------------------------------------------------------------*/ + /// + /// Copy of the Handle to the native object. + /// + property Handle NativeObject + { + Handle get(); + } + /// + /// Generic handle for the native object + /// + property GenericHandle NativeObjectHandle + { + GenericHandle get(); + } + /// + /// The raw asset ID of the asset. + /// + property AssetID NativeAssetID + { + AssetID get(); + } + + /*-----------------------------------------------------------------------------*/ + /* Constructors/Destructor */ + /*-----------------------------------------------------------------------------*/ + /// + /// Constructor for the AudioClip + /// + /// Handle to the native material object. + AudioClipHandler(Handle audioclip); + + public: + + //to comment ltr + void Play(); + void Stop(bool fadeOut); + void SetPause(bool pause); + bool IsPaused(); + void SetParameter(System::String^ paramName, float value); + float GetParameterValue(System::String^ paramName); + + protected: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + GenericHandle audioClipInstHandle; + }; +} +