UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AudioMixerWasapi.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "AudioMixer.h"
10
13
15
17#include <mmdeviceapi.h> // IMMNotificationClient
18#include <audiopolicy.h> // IAudioSessionEvents
20
23
24namespace Audio
25{
26 class FWasapiDefaultRenderStream;
27
41
43 {
44 virtual bool IsNewDeviceReady() const override
45 {
46 return NewDeviceManager.IsValid();
47 }
48
50 bool bIsAggregateDevice = false;
51 };
52
57 {
58 public:
59
61 virtual ~FAudioMixerWasapi() override;
62
63 //~ Begin IAudioMixerPlatformInterface
64 virtual FString GetPlatformApi() const override { return TEXT("WASAPIMixer"); }
65 virtual bool InitializeHardware() override;
66 virtual bool TeardownHardware() override;
67 virtual bool IsInitialized() const override;
68 virtual int32 GetNumFrames(const int32 InNumRequestedFrames) override;
69 virtual bool GetNumOutputDevices(uint32& OutNumOutputDevices) override;
70 virtual bool GetOutputDeviceInfo(const uint32 InDeviceIndex, FAudioPlatformDeviceInfo& OutInfo) override;
71 virtual bool GetDefaultOutputDeviceIndex(uint32& OutDefaultDeviceIndex) const override;
72 virtual bool OpenAudioStream(const FAudioMixerOpenStreamParams& Params) override;
73 virtual bool CloseAudioStream() override;
74 virtual bool StartAudioStream() override;
75 virtual bool StopAudioStream() override;
76 virtual FAudioPlatformDeviceInfo GetPlatformDeviceInfo() const override;
77 virtual void SubmitBuffer(const uint8* Buffer) override;
78 virtual void SubmitDirectOutBuffer(const int32 InDirectOutIndex, const FAlignedFloatBuffer& InBuffer) override;
79 virtual FString GetDefaultDeviceName() override;
80 virtual FAudioPlatformSettings GetPlatformSettings() const override;
81 virtual IAudioPlatformDeviceInfoCache* GetDeviceInfoCache() const override;
82 virtual bool IsDeviceInfoValid(const FAudioPlatformDeviceInfo& InDeviceInfo) const override;
83 virtual bool ShouldUseDeviceInfoCache() const override { return true; }
84 //~ End IAudioMixerPlatformInterface
85
86 //~ Begin IAudioMixerDeviceChangedListener
87 virtual void RegisterDeviceChangedListener() override;
88 virtual void UnregisterDeviceChangedListener() override;
89 virtual void OnDefaultCaptureDeviceChanged(const EAudioDeviceRole InAudioDeviceRole, const FString& DeviceId) override;
90 virtual void OnDefaultRenderDeviceChanged(const EAudioDeviceRole InAudioDeviceRole, const FString& DeviceId) override;
91 virtual void OnDeviceAdded(const FString& DeviceId, bool bIsRenderDevice) override;
92 virtual void OnDeviceRemoved(const FString& DeviceId, bool bIsRenderDevice) override;
93 virtual void OnDeviceStateChanged(const FString& DeviceId, const EAudioDeviceState InState, bool bIsRenderDevice) override;
94 virtual void OnFormatChanged(const FString& InDeviceId, const FFormatChangedData& InFormat) override;
96 virtual FString GetDeviceId() const override;
97 //~ End IAudioMixerDeviceChangedListener
98
99 //~ Begin FAudioMixerPlatformSwappable
100 virtual bool InitializeDeviceSwapContext(const FString& InRequestedDeviceID, const TCHAR* InReason) override;
101 virtual bool CheckThreadedDeviceSwap() override;
102 virtual bool PreDeviceSwap() override;
103 virtual void EnqueueAsyncDeviceSwap() override;
104 virtual void SynchronousDeviceSwap() override;
105 virtual bool PostDeviceSwap() override;
106 //~ End FAudioMixerPlatformSwappable
107
108 protected:
113
114 private:
115
118
121
123 bool bIsInitialized = false;
124
126 TUniquePtr<FWasapiDeviceSwapContext> DeviceSwapContext;
127
129 TComPtr<IMMDevice> GetMMDevice(const FString& InDeviceID) const;
130
134 FString ExtractAggregateDeviceName(const FString& InDeviceID) const;
135
137 static void CreateDeviceManager(const bool bInUseAggregateDevice, TUniquePtr<IAudioMixerWasapiDeviceManager>& InDeviceManager);
138
142
145
146#if PLATFORM_WINDOWS
148 static void RegisterForSessionEvents(const FString& InDeviceId);
149 static void UnregisterForSessionEvents();
150#endif //PLATFORM_WINDOWS
151
152
153 };
154
155 }
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define THIRD_PARTY_INCLUDES_START
Definition GenericPlatformCompilerPreSetup.h:63
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition AudioMixer.h:802
Definition AudioMixerWasapi.h:57
virtual void SynchronousDeviceSwap() override
Definition AudioMixerWasapi.cpp:568
bool InitDeviceSwapContextInternal(const FString &InRequestedDeviceID, const TCHAR *InReason, const TOptional< FAudioPlatformDeviceInfo > &InDeviceInfo)
Definition AudioMixerWasapi.cpp:497
virtual int32 GetNumFrames(const int32 InNumRequestedFrames) override
Definition AudioMixerWasapi.cpp:77
virtual FString GetDefaultDeviceName() override
Definition AudioMixerWasapi.cpp:403
virtual void SubmitDirectOutBuffer(const int32 InDirectOutIndex, const FAlignedFloatBuffer &InBuffer) override
Definition AudioMixerWasapi.cpp:393
virtual bool PostDeviceSwap() override
Definition AudioMixerWasapi.cpp:689
virtual bool StopAudioStream() override
Definition AudioMixerWasapi.cpp:339
virtual void RegisterDeviceChangedListener() override
Definition AudioMixerWasapiDeviceListener.cpp:46
virtual bool CloseAudioStream() override
Definition AudioMixerWasapi.cpp:281
virtual void SubmitBuffer(const uint8 *Buffer) override
Definition AudioMixerWasapi.cpp:383
virtual bool IsDeviceInfoValid(const FAudioPlatformDeviceInfo &InDeviceInfo) const override
Definition AudioMixerWasapi.cpp:427
FAudioMixerWasapi()
Definition AudioMixerWasapi.cpp:12
virtual FString GetPlatformApi() const override
Definition AudioMixerWasapi.h:64
virtual void OnSessionDisconnect(Audio::IAudioMixerDeviceChangedListener::EDisconnectReason InReason) override
Definition AudioMixerWasapi.cpp:439
virtual bool IsInitialized() const override
Definition AudioMixerWasapi.cpp:72
virtual FAudioPlatformSettings GetPlatformSettings() const override
Definition AudioMixerWasapi.cpp:408
virtual void OnDeviceAdded(const FString &DeviceId, bool bIsRenderDevice) override
Definition AudioMixerWasapiDeviceListener.cpp:120
virtual void OnDefaultRenderDeviceChanged(const EAudioDeviceRole InAudioDeviceRole, const FString &DeviceId) override
Definition AudioMixerWasapiDeviceListener.cpp:93
virtual bool PreDeviceSwap() override
Definition AudioMixerWasapi.cpp:660
virtual bool CheckThreadedDeviceSwap() override
Definition AudioMixerWasapi.cpp:459
virtual bool GetOutputDeviceInfo(const uint32 InDeviceIndex, FAudioPlatformDeviceInfo &OutInfo) override
Definition AudioMixerWasapi.cpp:105
virtual bool GetNumOutputDevices(uint32 &OutNumOutputDevices) override
Definition AudioMixerWasapi.cpp:87
virtual FString GetDeviceId() const override
Definition AudioMixerWasapiDeviceListener.cpp:257
virtual void OnDeviceRemoved(const FString &DeviceId, bool bIsRenderDevice) override
Definition AudioMixerWasapiDeviceListener.cpp:150
virtual IAudioPlatformDeviceInfoCache * GetDeviceInfoCache() const override
Definition AudioMixerWasapi.cpp:417
virtual bool OpenAudioStream(const FAudioMixerOpenStreamParams &Params) override
Definition AudioMixerWasapi.cpp:195
virtual bool GetDefaultOutputDeviceIndex(uint32 &OutDefaultDeviceIndex) const override
Definition AudioMixerWasapi.cpp:133
virtual bool StartAudioStream() override
Definition AudioMixerWasapi.cpp:305
virtual ~FAudioMixerWasapi() override
Definition AudioMixerWasapi.cpp:16
virtual void UnregisterDeviceChangedListener() override
Definition AudioMixerWasapiDeviceListener.cpp:69
virtual FAudioPlatformDeviceInfo GetPlatformDeviceInfo() const override
Definition AudioMixerWasapi.cpp:378
virtual void OnDefaultCaptureDeviceChanged(const EAudioDeviceRole InAudioDeviceRole, const FString &DeviceId) override
Definition AudioMixerWasapiDeviceListener.cpp:85
virtual void OnDeviceStateChanged(const FString &DeviceId, const EAudioDeviceState InState, bool bIsRenderDevice) override
Definition AudioMixerWasapiDeviceListener.cpp:178
virtual bool TeardownHardware() override
Definition AudioMixerWasapi.cpp:50
virtual bool InitializeHardware() override
Definition AudioMixerWasapi.cpp:34
virtual bool InitializeDeviceSwapContext(const FString &InRequestedDeviceID, const TCHAR *InReason) override
Definition AudioMixerWasapi.cpp:468
virtual void EnqueueAsyncDeviceSwap() override
Definition AudioMixerWasapi.cpp:545
virtual void OnFormatChanged(const FString &InDeviceId, const FFormatChangedData &InFormat) override
Definition AudioMixerWasapiDeviceListener.cpp:218
virtual bool ShouldUseDeviceInfoCache() const override
Definition AudioMixerWasapi.h:83
EDisconnectReason
Definition AudioMixer.h:427
Definition AudioMixer.h:232
Definition Array.h:670
Definition COMPointer.h:19
Definition AndroidPlatformMisc.h:14
Definition UniquePtr.h:107
NO_LOGGING.
Definition AudioMixerPlatformAndroid.cpp:53
EAudioDeviceState
Definition AudioMixer.h:340
EAudioDeviceRole
Definition AudioMixer.h:331
Definition Voronoi.cpp:10
Definition AudioMixer.h:250
Definition AudioMixer.h:152
Definition AudioMixer.h:451
Definition AudioMixer.h:465
Definition AudioMixerWasapi.h:29
TArray< FWasapiRenderStreamParams > StreamParams
Definition AudioMixerWasapi.h:36
FWasapiDeviceSwapContext(const FString &InRequestedDeviceID, const FString &InReason)
Definition AudioMixerWasapi.h:31
TFunction< void()> ReadNextBufferCallback
Definition AudioMixerWasapi.h:37
TUniquePtr< IAudioMixerWasapiDeviceManager > OldDeviceManager
Definition AudioMixerWasapi.h:38
bool bIsAggregateDevice
Definition AudioMixerWasapi.h:39
FAudioPlatformSettings PlatformSettings
Definition AudioMixerWasapi.h:35
Definition AudioMixerWasapi.h:43
TUniquePtr< IAudioMixerWasapiDeviceManager > NewDeviceManager
Definition AudioMixerWasapi.h:49
virtual bool IsNewDeviceReady() const override
Definition AudioMixerWasapi.h:44
bool bIsAggregateDevice
Definition AudioMixerWasapi.h:50
Definition AudioMixerTypes.h:63
Definition Optional.h:131