Files
UnrealEngineUWP/Engine/Source/Runtime/AudioAnalyzer/Private/AudioAnalyzerSubsystem.cpp
Marc Audy 0c3be2b6ad Merge Release-Engine-Staging to Test @ CL# 18240298
[CL 18241953 by Marc Audy in ue5-release-engine-test branch]
2021-11-18 14:37:34 -05:00

75 lines
1.6 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "AudioAnalyzerSubsystem.h"
#include "Containers/Ticker.h"
#include "Engine/World.h"
#include "Engine/Engine.h"
UAudioAnalyzerSubsystem::UAudioAnalyzerSubsystem()
{
}
UAudioAnalyzerSubsystem::~UAudioAnalyzerSubsystem()
{
if (TickerHandle.IsValid())
{
FTSTicker::GetCoreTicker().RemoveTicker(TickerHandle);
TickerHandle.Reset();
}
AudioAnalyzers.Reset();
}
UAudioAnalyzerSubsystem* UAudioAnalyzerSubsystem::Get()
{
if (GEngine)
{
return GEngine->GetEngineSubsystem<UAudioAnalyzerSubsystem>();
}
return nullptr;
}
bool UAudioAnalyzerSubsystem::Tick(float DeltaTime)
{
// Loop through all analyzers and if they're ready to analyze, do it
for (UAudioAnalyzer* Analyzer : AudioAnalyzers)
{
if (Analyzer->IsReadyForAnalysis())
{
if (Analyzer->DoAnalysis())
{
Analyzer->BroadcastResults();
}
}
}
return true;
}
void UAudioAnalyzerSubsystem::Initialize(FSubsystemCollectionBase& Collection)
{
Super::Initialize(Collection);
}
void UAudioAnalyzerSubsystem::Deinitialize()
{
// Release our audio analyzers
AudioAnalyzers.Reset();
}
void UAudioAnalyzerSubsystem::RegisterAudioAnalyzer(UAudioAnalyzer* InAnalyzer)
{
if (!TickerHandle.IsValid())
{
TickerHandle = FTSTicker::GetCoreTicker().AddTicker(FTickerDelegate::CreateUObject(this, &UAudioAnalyzerSubsystem::Tick), 0.0f);
}
AudioAnalyzers.AddUnique(InAnalyzer);
}
void UAudioAnalyzerSubsystem::UnregisterAudioAnalyzer(UAudioAnalyzer* InAnalyzer)
{
AudioAnalyzers.Remove(InAnalyzer);
if (AudioAnalyzers.IsEmpty() && TickerHandle.IsValid())
{
FTSTicker::GetCoreTicker().RemoveTicker(TickerHandle);
TickerHandle.Reset();
}
}