Files
UnrealEngine/Engine/Plugins/Runtime/ADM/Source/ADMSpatialization/Private/ADMSpatializationSettings.cpp
2025-05-18 13:04:45 +08:00

57 lines
1.8 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "ADMSpatializationSettings.h"
#include "ADMSpatialization.h"
#include "AudioDevice.h"
#include "AudioDeviceManager.h"
#include "Interfaces/IPv4/IPv4Endpoint.h"
#include "ADMSpatializationModule.h"
#if WITH_EDITOR
void UADMSpatializationSettings::ADMConnect()
{
using namespace UE::ADM::Spatialization;
FIPv4Address ADMAddress;
FIPv4Address::Parse(IPAddress, ADMAddress);
FIPv4Endpoint ADMEndpoint(ADMAddress, IPPort);
FModule& ADMSpatializationModule = FModuleManager::Get().LoadModuleChecked<FModule>("ADMSpatialization");
FADMSpatializationFactory& SpatFactory = ADMSpatializationModule.GetFactory();
SpatFactory.SetSendIPEndpoint(ADMEndpoint);
FAudioDeviceManager* AudioDeviceManager = FAudioDeviceManager::Get();
check(AudioDeviceManager);
AudioDeviceManager->IterateOverAllDevices([&SpatFactory, &ADMEndpoint](Audio::FDeviceId DeviceId, FAudioDevice* AudioDevice)
{
if (AudioDevice)
{
FAudioDevice::FAudioSpatializationInterfaceInfo Info = AudioDevice->GetCurrentSpatializationPluginInterfaceInfo();
if (Info.PluginName == SpatFactory.GetDisplayName())
{
if (FADMSpatialization* Spatializer = static_cast<FADMSpatialization*>(AudioDevice->GetSpatializationPluginInterface().Get()))
{
Spatializer->SetClient(FADMClient(ADMEndpoint));
}
}
}
});
}
void UADMSpatializationSettings::PostEditChangeProperty(FPropertyChangedEvent& InPropertyChangedEvent)
{
const FName PropName = InPropertyChangedEvent.GetPropertyName();
const bool bUpdatedADMClientSettings =
PropName == GET_MEMBER_NAME_CHECKED(UADMSpatializationSettings, IPAddress) ||
PropName == GET_MEMBER_NAME_CHECKED(UADMSpatializationSettings, IPPort);
if (bUpdatedADMClientSettings)
{
ADMConnect();
}
}
#endif // WITH_EDITOR