// Copyright Epic Games, Inc. All Rights Reserved. #include "AudioMeterAnalyzer.h" #include "AudioDeviceManager.h" #include "AudioInsightsEditorModule.h" #include "AudioMeter.h" #include "AudioMixerDevice.h" namespace UE::Audio::Insights { namespace FAudioMeterAnalyzerPrivate { TSharedRef CreateAudioMeter(TWeakObjectPtr InExternalAudioBus) { using namespace ::Audio; const FAudioInsightsEditorModule AudioInsightsEditorModule = FAudioInsightsEditorModule::GetChecked(); const FDeviceId AudioDeviceId = AudioInsightsEditorModule.GetDeviceId(); if (const FAudioDeviceManager* AudioDeviceManager = FAudioDeviceManager::Get()) { if (const FMixerDevice* MixerDevice = static_cast(AudioDeviceManager->GetAudioDeviceRaw(AudioDeviceId))) { return MakeShared(InExternalAudioBus.IsValid() ? InExternalAudioBus->GetNumChannels() : MixerDevice->GetNumDeviceChannels(), AudioDeviceId, InExternalAudioBus.Get()); } } return MakeShared(1, AudioDeviceId); } } FAudioMeterAnalyzer::FAudioMeterAnalyzer(TWeakObjectPtr InExternalAudioBus) : AudioMeter(FAudioMeterAnalyzerPrivate::CreateAudioMeter(InExternalAudioBus)) { } void FAudioMeterAnalyzer::RebuildAudioMeter(TWeakObjectPtr InExternalAudioBus) { using namespace ::Audio; FAudioDeviceManager* AudioDeviceManager = FAudioDeviceManager::Get(); if (!AudioDeviceManager) { return; } const FAudioInsightsEditorModule AudioInsightsEditorModule = FAudioInsightsEditorModule::GetChecked(); const FDeviceId AudioDeviceId = AudioInsightsEditorModule.GetDeviceId(); const FMixerDevice* MixerDevice = static_cast(AudioDeviceManager->GetAudioDeviceRaw(AudioDeviceId)); if (!MixerDevice) { return; } AudioMeter->Init(InExternalAudioBus.IsValid() ? InExternalAudioBus->GetNumChannels() : MixerDevice->GetNumDeviceChannels(), AudioDeviceId, InExternalAudioBus.Get()); } } // namespace UE::Audio::Insights