Files
UnrealEngine/Engine/Source/Runtime/AudioMixer/Public/AudioDeviceNotificationSubsystem.h
2025-05-18 13:04:45 +08:00

118 lines
4.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Subsystems/EngineSubsystem.h"
#include "Engine/Engine.h"
#include "AudioMixer.h"
#include "Delegates/Delegate.h"
#include "AudioDeviceNotificationSubsystem.generated.h"
/**
* EAudioDeviceChangedRole
*/
UENUM(BlueprintType)
enum class EAudioDeviceChangedRole : uint8
{
Invalid,
Console,
Multimedia,
Communications,
Count UMETA(Hidden)
};
/**
* EAudioDeviceChangedState
*/
UENUM(BlueprintType)
enum class EAudioDeviceChangedState : uint8
{
Invalid,
Active,
Disabled,
NotPresent,
Unplugged,
Count UMETA(Hidden)
};
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnAudioDefaultDeviceChanged, EAudioDeviceChangedRole, AudioDeviceRole, FString, DeviceId);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnAudioDeviceStateChanged, FString, DeviceId, EAudioDeviceChangedState, NewState);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnAudioDeviceChange, FString, DeviceId);
DECLARE_MULTICAST_DELEGATE_TwoParams(FOnAudioDefaultDeviceChangedNative, EAudioDeviceChangedRole, FString);
DECLARE_MULTICAST_DELEGATE_TwoParams(FOnAudioDeviceStateChangedNative, FString, EAudioDeviceChangedState);
DECLARE_MULTICAST_DELEGATE_OneParam(FOnAudioDeviceChangeNative, FString);
/**
* UAudioDeviceNotificationSubsystem
*/
UCLASS(MinimalAPI)
class UAudioDeviceNotificationSubsystem : public UEngineSubsystem
, public Audio::IAudioMixerDeviceChangedListener
{
GENERATED_BODY()
public:
virtual ~UAudioDeviceNotificationSubsystem() = default;
static UAudioDeviceNotificationSubsystem* Get() { return GEngine->GetEngineSubsystem<UAudioDeviceNotificationSubsystem>(); }
//~ Begin UEngineSubsystem Interface
AUDIOMIXER_API virtual void Initialize(FSubsystemCollectionBase& Collection) override;
AUDIOMIXER_API virtual void Deinitialize() override;
//~ End UEngineSubsystem Interface
//~ Begin IAudioMixerDeviceChangedListener Interface
AUDIOMIXER_API virtual void OnDefaultCaptureDeviceChanged(const Audio::EAudioDeviceRole InAudioDeviceRole, const FString& DeviceId) override;
AUDIOMIXER_API virtual void OnDefaultRenderDeviceChanged(const Audio::EAudioDeviceRole InAudioDeviceRole, const FString& DeviceId) override;
AUDIOMIXER_API virtual void OnDeviceAdded(const FString& DeviceId, bool bIsRenderDevice) override;
AUDIOMIXER_API virtual void OnDeviceRemoved(const FString& DeviceId, bool bIsRenderDevice) override;
AUDIOMIXER_API virtual void OnDeviceStateChanged(const FString& DeviceId, const Audio::EAudioDeviceState InState, bool bIsRenderDevice) override;
//~ End IAudioMixerDeviceChangedListener Interface
AUDIOMIXER_API virtual void OnDeviceSwitched(const FString& DeviceId);
/** Multicast delegate triggered when default capture device changes */
UPROPERTY(BlueprintAssignable, Category = "Audio Delegates")
FOnAudioDefaultDeviceChanged DefaultCaptureDeviceChanged;
/** Multicast delegate triggered when default capture device changes (native code only) */
FOnAudioDefaultDeviceChangedNative DefaultCaptureDeviceChangedNative;
/** Multicast delegate triggered when default render device changes */
UPROPERTY(BlueprintAssignable, Category = "Audio Delegates")
FOnAudioDefaultDeviceChanged DefaultRenderDeviceChanged;
/** Multicast delegate triggered when default render device changes (native code only) */
FOnAudioDefaultDeviceChangedNative DefaultRenderDeviceChangedNative;
/** Multicast delegate triggered when a device is added */
UPROPERTY(BlueprintAssignable, Category = "Audio Delegates")
FOnAudioDeviceChange DeviceAdded;
/** Multicast delegate triggered when a device is added (native code only) */
FOnAudioDeviceChangeNative DeviceAddedNative;
/** Multicast delegate triggered when a device is removed */
UPROPERTY(BlueprintAssignable, Category = "Audio Delegates")
FOnAudioDeviceChange DeviceRemoved;
/** Multicast delegate triggered when a device is removed (native code only) */
FOnAudioDeviceChangeNative DeviceRemovedNative;
/** Multicast delegate triggered on device state change */
UPROPERTY(BlueprintAssignable, Category = "Audio Delegates")
FOnAudioDeviceStateChanged DeviceStateChanged;
/** Multicast delegate triggered on device state change (native code only) */
FOnAudioDeviceStateChangedNative DeviceStateChangedNative;
/** Multicast delegate triggered on device switch */
UPROPERTY(BlueprintAssignable, Category = "Audio Delegates")
FOnAudioDeviceChange DeviceSwitched;
/** Multicast delegate triggered on device switch (native code only) */
FOnAudioDeviceChangeNative DeviceSwitchedNative;
protected:
AUDIOMIXER_API EAudioDeviceChangedRole GetDeviceChangedRole(Audio::EAudioDeviceRole InRole) const;
AUDIOMIXER_API EAudioDeviceChangedState GetDeviceChangedState(Audio::EAudioDeviceState InState) const;
};