diff --git a/Source/Engine/Audio/AudioSource.cpp b/Source/Engine/Audio/AudioSource.cpp index cff89e7e1..c15084dc3 100644 --- a/Source/Engine/Audio/AudioSource.cpp +++ b/Source/Engine/Audio/AudioSource.cpp @@ -168,7 +168,7 @@ void AudioSource::Play() else { // Source was nt properly added to the Audio Backend - LOG(Warning, "Cannot play unitialized audio source."); + LOG(Warning, "Cannot play uninitialized audio source."); } } @@ -395,6 +395,9 @@ void AudioSource::Update() AudioBackend::Source::VelocityChanged(SourceID, _velocity); } + if (Math::NearEqual(GetTime(), _startTime) && _isActuallyPlayingSth && _startingToPlay) + ClipStarted(); + // Reset starting to play value once time is greater than zero if (_startingToPlay && GetTime() > 0.0f) { @@ -416,6 +419,7 @@ void AudioSource::Update() { Stop(); } + ClipFinished(); } } @@ -486,6 +490,7 @@ void AudioSource::Update() { Stop(); } + ClipFinished(); } ASSERT(_streamingFirstChunk < clip->Buffers.Count()); @@ -583,3 +588,11 @@ void AudioSource::BeginPlay(SceneBeginData* data) SetTime(GetStartTime()); } } + +void AudioSource::EndPlay() +{ + Actor::EndPlay(); + + ClipStarted.UnbindAll(); + ClipFinished.UnbindAll(); +} diff --git a/Source/Engine/Audio/AudioSource.h b/Source/Engine/Audio/AudioSource.h index b83a2b408..4e05d1594 100644 --- a/Source/Engine/Audio/AudioSource.h +++ b/Source/Engine/Audio/AudioSource.h @@ -76,6 +76,16 @@ public: API_FIELD(Attributes="EditorOrder(10), DefaultValue(null), EditorDisplay(\"Audio Source\")") AssetReference Clip; + /// + /// Event fired when the audio clip starts. + /// + API_EVENT() Delegate<> ClipStarted; + + /// + /// Event fired when the audio clip finishes. + /// + API_EVENT() Delegate<> ClipFinished; + /// /// Gets the velocity of the source. Determines pitch in relation to AudioListener's position. Only relevant for spatial (3D) sources. /// @@ -326,4 +336,5 @@ protected: void OnDisable() override; void OnTransformChanged() override; void BeginPlay(SceneBeginData* data) override; + void EndPlay() override; };