123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- #pragma once
- #include "MovieSceneSection.h"
- #include "AkInclude.h"
- #include "AkAudioEvent.h"
- #include "WwiseEventTracking.h"
- #include "Dom/JsonObject.h"
- #include "MovieSceneAkAudioEventSection.generated.h"
- class FAkAudioDevice;
- struct FWwiseEventTracker;
- enum class AkEventSectionState : uint8
- {
- EUninitialized = 0,
- EUnrecognized,
- EInitialized
- };
- UCLASS(MinimalAPI)
- class UMovieSceneAkAudioEventSection : public UMovieSceneSection
- {
- GENERATED_BODY()
- FCriticalSection WAAPISection;
-
- UPROPERTY(EditAnywhere, Category = "AkAudioEvent", meta = (NoResetToDefault))
- UAkAudioEvent* Event = nullptr;
-
- UPROPERTY(EditAnywhere, Category = "AkAudioEvent")
- bool RetriggerEvent = false;
-
- UPROPERTY(EditAnywhere, Category = "AkAudioEvent",
- meta = (ClampMin = "30", ClampMax = "500", UIMin = "30", UIMax = "500"))
- int ScrubTailLengthMs = FWwiseEventTracker::GetScrubTimeMs();
-
- UPROPERTY(EditAnywhere, Category = "AkAudioEvent")
- bool StopAtSectionEnd = true;
-
- UPROPERTY(EditAnywhere, AdvancedDisplay, Category = "AkAudioEvent")
- FString EventName = "";
-
- UPROPERTY(VisibleAnywhere, Category = "AkAudioEvent")
- float MaxSourceDuration = -1.0f;
-
- UPROPERTY()
- FString MaxDurationSourceID = "";
- public:
-
- AKAUDIO_API void Initialize();
-
- AKAUDIO_API UAkAudioEvent* GetEvent() const { return Event; }
- AKAUDIO_API FString GetEventName() const { return (Event == nullptr) ? EventName : Event->GetName(); }
- AKAUDIO_API bool EventShouldStopAtSectionEnd() const;
- AKAUDIO_API int32 GetMaxEventDuration() const;
- AKAUDIO_API float GetStartTime() const;
- AKAUDIO_API float GetEndTime() const;
-
- AKAUDIO_API FFloatRange GetEventDuration() const;
- bool RequiresUpdate = false;
- AkEventSectionState InitState = AkEventSectionState::EUninitialized;
-
- TSharedPtr<FWwiseEventTracker> EventTracker = MakeShareable(new FWwiseEventTracker());
-
- bool ShouldRetriggerEvent() const { return RetriggerEvent; }
-
- FGuid GetEventWwiseGUID() const;
-
- FString GetEventWwiseName() const;
- virtual void BeginDestroy() override;
- #if WITH_EDITOR
-
- uint64 iTrimBeginSubscriptionID = 0;
- uint64 iTrimEndSubscriptionID = 0;
- uint64 iChildAddedSubscriptionID = 0;
- uint64 iChildRemovedSubscriptionID = 0;
- uint64 iChildAddedInitializeSubscriptionID = 0;
- TArray<uint64> EventActionSubscriptionIDs;
- FThreadSafeCounter iCallbackCounter = 0;
-
- TArray<double> AudioSourcePeaks;
-
- float TrimBegin = 0.0f;
-
- AKAUDIO_API void UpdateAudioSourceInfo();
-
- AKAUDIO_API void MatchSectionLengthToEventLength();
-
- AKAUDIO_API void UpdateAudioSourcePeaks(int in_iNumPeaks);
-
- AKAUDIO_API void UpdateAudioSourcePeaks(int in_iNumPeaks, double in_dTimeFrom, double in_dTimeTo);
-
- AKAUDIO_API const int GetNumMinMaxPairs() const;
-
- AKAUDIO_API const TArray<double>& GetAudioSourcePeaks() const;
-
- AKAUDIO_API const float GetMaxSourceDuration() const;
-
- AKAUDIO_API void InvalidateAudioSourceInfo();
-
- AKAUDIO_API bool AudioSourceInfoIsValid() const;
- #if !UE_4_26_OR_LATER
-
- AKAUDIO_API virtual FMovieSceneEvalTemplatePtr GenerateTemplate() const override;
- #endif
-
- AKAUDIO_API void CheckForWorkunitChanges(bool in_bNotifyTrack = false);
-
- AKAUDIO_API bool UpdateAkEventInfo();
- bool IsValid() const { return Event != nullptr || !EventName.IsEmpty(); }
- bool GetStopAtSectionEnd() const { return StopAtSectionEnd; }
-
- float GetTrimBegin() const { return TrimBegin; }
-
- int GetScrubTailLength() const { return ScrubTailLengthMs; }
-
- bool DoesEventRetrigger() const { return RetriggerEvent; }
- virtual void PostEditChangeProperty(struct FPropertyChangedEvent& e) override;
-
- bool SetEvent(UAkAudioEvent* AudioEvent, const FString& Name);
-
- void WAAPIGetPeaks(const char* in_uri, TSharedRef<FJsonObject> in_getPeaksArgs,
- TSharedRef<FJsonObject> in_getPeaksOptions, TSharedPtr<FJsonObject> in_getPeaksResults);
-
- void UpdateTrimData();
-
- void SubscribeToTrimChanges();
-
- void SubscribeToEventChildren();
-
- void SubscribeToChildAddedRemoved(FString in_sParentID, uint64& in_iAddedSubID, uint64& in_iRemovedSubID);
-
- void SubscribeToEventChildAddedRemoved();
-
- void UnsubscribeWAAPICallback(uint64& in_iSubID);
-
- void UnsubscribeAllWAAPICallbacks();
-
- bool CheckWorkunitChangesForID(FGuid in_objectGUID);
- #endif
- };
|