// Copyright Epic Games, Inc. All Rights Reserved. #include "Analysis/MetasoundFrontendVertexAnalyzerTriggerToTime.h" namespace Metasound { namespace Frontend { const FName& FVertexAnalyzerTriggerToTime::GetAnalyzerName() { static const FName AnalyzerName = "UE.Trigger.ToTime"; return AnalyzerName; } const FName& FVertexAnalyzerTriggerToTime::GetDataType() { return GetMetasoundDataTypeName(); } const FAnalyzerOutput& FVertexAnalyzerTriggerToTime::FOutputs::GetValue() { static FAnalyzerOutput Value = { "LastTriggerTime", GetMetasoundDataTypeName() }; return Value; } const TArray& FVertexAnalyzerTriggerToTime::FFactory::GetAnalyzerOutputs() const { static const TArray Outputs { FOutputs::GetValue() }; return Outputs; } FVertexAnalyzerTriggerToTime::FVertexAnalyzerTriggerToTime(const FCreateAnalyzerParams& InParams) : FVertexAnalyzerBase(InParams.AnalyzerAddress, InParams.VertexDataReference) , SampleRate(InParams.OperatorSettings.GetSampleRate()) , FramesPerBlock(InParams.OperatorSettings.GetNumFramesPerBlock()) , SecondsPerBlock(static_cast(FramesPerBlock) / SampleRate) , LastTriggerTime(TDataWriteReference::CreateNew()) { BindOutputData(FOutputs::GetValue().Name, InParams.OperatorSettings, TDataReadReference{ LastTriggerTime }); } void FVertexAnalyzerTriggerToTime::Execute() { const FTrigger& Triggers = GetVertexData(); Triggers.ExecuteBlock( [](int32, int32) {}, [this](const int32 TriggerFrame, int32) { const double OffsetSeconds = static_cast(TriggerFrame) / SampleRate; *LastTriggerTime = FTime::FromSeconds(OffsetSeconds + BlockStartTime); MarkOutputDirty(); }); BlockStartTime += SecondsPerBlock; } } }