UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AudioDeviceManager.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "AudioDefines.h"
5#include "AudioDeviceHandle.h"
6#include "AudioThread.h"
7#include "CoreMinimal.h"
9
10
11#if ENABLE_AUDIO_DEBUG
12class FAudioDebugger;
13#endif // ENABLE_AUDIO_DEBUG
14
16class FSoundBuffer;
18class UAudioComponent;
19class USoundClass;
20class USoundMix;
22class USoundWave;
23class UWorld;
24class FAudioDevice;
27
28namespace Audio
29{
30 class FMixerDevice;
31 class FAudioDebugger;
32 class FAudioFormatSettings;
33}
34
35enum class ESoundType : uint8
36{
37 Class,
38 Cue,
39 Wave
40};
41
42// This enum is used in FAudioDeviceManager::RequestAudioDevice to map a given UWorld to an audio device.
44{
45 // Default to the behavior specified by the editor preferences.
46 Default,
47 // Use an audio device that can be shared by multiple worlds.
48 Shared,
49 // Create a new audio device specifically for this handle.
50 Unique
51};
52
53// Parameters passed into FAudioDeviceManager::RequestAudioDevice.
55{
56 // Optional world parameter. This allows tools to surface information about which worlds are being rendered through which audio devices.
58 // This should be set to EAudioDeviceScope::Unique if you'd like to force a new device to be created from scratch, or use EAudioDeviceScope::Shared to use an existing device if possible.
60 // Set this to true to get a handle to a non realtime audio renderer.
61 bool bIsNonRealtime = false;
62 // Use this to force this audio device to use a specific audio module. If nullptr, uses the default audio module.
64 // Buffer size override
66 // Num buffers override
68};
69
70// List of delegates for the audio device manager.
72{
73public:
74 // This delegate is called whenever an entirely new audio device is created.
77
78 // This delegate is called whenever an audio device is destroyed.
81};
82
87{
88public:
89
94
99
101 const FAudioDeviceHandle & GetMainAudioDeviceHandle() const { return MainAudioDeviceHandle; }
102 FAudioDevice* GetMainAudioDeviceRaw() const { return MainAudioDeviceHandle.GetAudioDevice(); }
103 Audio::FDeviceId GetMainAudioDeviceID() const { return MainAudioDeviceHandle.GetDeviceID(); }
104
105 static ENGINE_API FAudioDevice* GetAudioDeviceFromWorldContext(const UObject* WorldContextObject);
107
113
115
122
128
134
141
146
153 static ENGINE_API bool PreInitialize();
154
160 static ENGINE_API bool Initialize();
161
167
171 static ENGINE_API void Shutdown();
172
175
181
184
187
190
193 ENGINE_API void IterateOverAllDevices(TUniqueFunction<void(Audio::FDeviceId, const FAudioDevice*)> ForEachDevice) const;
194
197
200
202 ENGINE_API void RegisterSoundClass(USoundClass* SoundClass);
203
206
209
212
215
218
220 ENGINE_API void UnregisterSoundSubmix(const USoundSubmixBase* SoundSubmix);
221
224
226 UE_DEPRECATED(5.4, "Will be removed in upcoming versions of this code")
228
230 ENGINE_API void UpdateSourceEffectChain(const uint32 SourceEffectChainId, const TArray<FSourceEffectChainEntry>& SourceEffectChain, const bool bPlayEffectChainTails);
231
233 ENGINE_API void UpdateSubmix(USoundSubmixBase* SoundSubmix);
234
237
240
241 UE_DEPRECATED(5.5, "This is no longer used. Existing calls may be deleted")
245
246 UE_DEPRECATED(5.5, "This is no longer used. Existing calls may be deleted")
248
249 UE_DEPRECATED(5.5, "This is no longer used. Existing calls may be deleted")
251
252 UE_DEPRECATED(5.5, "This is no longer used. Existing calls may be deleted")
254
256 UE_DEPRECATED(5.5, "This is no longer used. Existing calls may be deleted")
258
260 ENGINE_API void RemoveSoundMix(USoundMix* SoundMix);
261
264
266 bool IsPlayAllDeviceAudio() const { return bPlayAllDeviceAudio; }
267
270
273
276
279
281 ENGINE_API float GetDynamicSoundVolume(ESoundType SoundType, const FName& SoundName) const;
283 ENGINE_API void SetDynamicSoundVolume(ESoundType SoundType, const FName& SoundName, float Volume);
284
285#if ENABLE_AUDIO_DEBUG
287 ENGINE_API Audio::FAudioDebugger& GetDebugger();
288 ENGINE_API const Audio::FAudioDebugger& GetDebugger() const;
289#endif // ENABLE_AUDIO_DEBUG
290
291public:
292
294 UE_DEPRECATED(5.5, "This is no longer used and should not be accessed directly.")
296
298 UE_DEPRECATED(5.5, "This is no longer used and should not be accessed directly.")
300
303
304 ENGINE_API TArray<UWorld*> GetWorldsUsingAudioDevice(const Audio::FDeviceId& InID) const;
305
306#if INSTRUMENT_AUDIODEVICE_HANDLES
309#endif
310
312
314
317
318private:
319
320#if ENABLE_AUDIO_DEBUG
323#endif // ENABLE_AUDIO_DEBUG
324
325 TPimplPtr<Audio::FAudioFormatSettings> AudioFormatSettings;
327
329 static bool bEnableAggregateDeviceSupport;
330
335 static FAudioDeviceManager* GetOrCreate();
336
338 ENGINE_API uint32 GetNewDeviceID();
339
341 ENGINE_API bool LoadDefaultAudioDeviceModule();
342
344
345 // Called exclusively by the FAudioDeviceHandle copy constructor and assignment operators:
346 ENGINE_API void IncrementDevice(Audio::FDeviceId DeviceID);
347
348 // Called exclusively by the FAudioDeviceHandle dtor.
349 ENGINE_API void DecrementDevice(Audio::FDeviceId DeviceID, UWorld* InWorld);
350
352 ENGINE_API void AppWillEnterBackground();
353
354 ENGINE_API void RegisterAudioInfoFactories();
355
360 bool IsInitialized() const { return InitPhase == EInitPhase::Initialized; }
361
369 ENGINE_API bool PreInitializeManager();
370
376 ENGINE_API bool InitializeManager();
377
379 IAudioDeviceModule* AudioDeviceModule;
380
382 FString AudioMixerModuleName;
383
385 FAudioDeviceHandle MainAudioDeviceHandle;
386
387 struct FAudioDeviceContainer
388 {
389 // Singularly owned device.
390 // Could be a TUniquePtr if FAudioDevice was not an incomplete type here.
391 FAudioDevice* Device;
392
393 // Ref count of FAudioDeviceHandles referencing this device.
394 int32 NumberOfHandlesToThisDevice;
395
397 TArray<UWorld*> WorldsUsingThisDevice;
398
400 EAudioDeviceScope Scope;
401
403 bool bIsNonRealtime;
404
406 IAudioDeviceModule* SpecifiedModule;
407
408 FAudioDeviceContainer(const FAudioDeviceParams& InParams, Audio::FDeviceId InDeviceID, FAudioDeviceManager* DeviceManager);
409 ~FAudioDeviceContainer();
410
411 FAudioDeviceContainer(const FAudioDeviceContainer& Other)
412 {
413 // We explicitly enforce that we invoke the move instructor.
414 // If this was hit, you likely need to call either Devices.Emplace(args) or Devices.Add(DeviceID, MoveTemp(Container));
415 checkNoEntry();
416 }
417
418 FAudioDeviceContainer(FAudioDeviceContainer&& Other);
419
420#if INSTRUMENT_AUDIODEVICE_HANDLES
422#endif
423
424 private:
425 FAudioDeviceContainer();
426 };
427
428 ENGINE_API FAudioDeviceHandle BuildNewHandle(FAudioDeviceContainer&Container, Audio::FDeviceId DeviceID, const FAudioDeviceParams &InParams);
429
433 static ENGINE_API bool CanUseAudioDevice(const FAudioDeviceParams& InParams, const FAudioDeviceContainer& InContainer);
434
435#if INSTRUMENT_AUDIODEVICE_HANDLES
437#endif
438
443 mutable FCriticalSection DeviceMapCriticalSection;
444
445 /* Counter used by GetNewDeviceID() to generate a unique ID for a given audio device. */
446 uint32 DeviceIDCounter;
447
449 int32 NextResourceID;
450
452 Audio::FDeviceId SoloDeviceHandle;
453
455 Audio::FDeviceId ActiveAudioDeviceID;
456
458 TMap<TTuple<ESoundType, FName>, float> DynamicSoundVolumes;
459
461 bool bPlayAllDeviceAudio;
462
464 FAudioCommandFence SyncFence;
465
469 enum class EInitPhase : uint32
470 {
471 Constructed,
472 PreInitialized,
474 };
475 EInitPhase InitPhase = EInitPhase::Constructed;
476
477 friend class FAudioDeviceHandle;
478 static ENGINE_API FAudioDeviceManager* Singleton;
479};
int Volume
Definition AndroidPlatformMisc.cpp:380
#define checkNoEntry()
Definition AssertionMacros.h:316
EAudioDeviceScope
Definition AudioDeviceManager.h:44
ESoundType
Definition AudioDeviceManager.h:36
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
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
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition AudioFormatSettings.h:16
Definition AudioMixerDevice.h:117
Definition AudioThread.h:103
Definition AudioDeviceHandle.h:28
ENGINE_API Audio::FDeviceId GetDeviceID() const
Definition AudioDeviceManager.cpp:1457
ENGINE_API FAudioDevice * GetAudioDevice() const
Definition AudioDeviceManager.cpp:1447
Definition AudioDeviceManager.h:72
DECLARE_TS_MULTICAST_DELEGATE_OneParam(FOnAudioDeviceCreated, Audio::FDeviceId)
static ENGINE_API FOnAudioDeviceCreated OnAudioDeviceCreated
Definition AudioDeviceManager.h:76
DECLARE_TS_MULTICAST_DELEGATE_OneParam(FOnAudioDeviceDestroyed, Audio::FDeviceId)
static ENGINE_API FOnAudioDeviceDestroyed OnAudioDeviceDestroyed
Definition AudioDeviceManager.h:80
Definition AudioDeviceManager.h:87
ENGINE_API void ToggleVisualize3dDebug()
Definition AudioDeviceManager.cpp:1231
const FAudioDeviceHandle & GetMainAudioDeviceHandle() const
Definition AudioDeviceManager.h:101
ENGINE_API void AddReferencedObjects(FReferenceCollector &Collector)
Definition AudioDeviceManager.cpp:846
ENGINE_API void InitSoundSubmixes()
Definition AudioDeviceManager.cpp:933
FAudioDevice * GetMainAudioDeviceRaw() const
Definition AudioDeviceManager.h:102
TArray< FSoundBuffer * > Buffers
Definition AudioDeviceManager.h:295
ENGINE_API uint8 GetNumMainAudioDeviceWorlds() const
Definition AudioDeviceManager.cpp:1026
ENGINE_API TArray< UWorld * > GetWorldsUsingAudioDevice(const Audio::FDeviceId &InID) const
Definition AudioDeviceManager.cpp:1056
ENGINE_API bool IsVisualizeDebug3dEnabled() const
Definition AudioDeviceManager.cpp:1222
TMap< int32, FSoundBuffer * > WaveBufferMap
Definition AudioDeviceManager.h:299
ENGINE_API void RegisterWorld(UWorld *InWorld, Audio::FDeviceId DeviceId)
Definition AudioDeviceManager.cpp:314
ENGINE_API void TogglePlayAllDeviceAudio()
Definition AudioDeviceManager.cpp:1198
ENGINE_API void UnregisterSoundClass(USoundClass *SoundClass)
Definition AudioDeviceManager.cpp:893
static ENGINE_API FAudioDevice * GetAudioDeviceFromWorldContext(const UObject *WorldContextObject)
Definition AudioDeviceManager.cpp:244
static ENGINE_API bool Initialize()
Definition AudioDeviceManager.cpp:715
static ENGINE_API bool IsAggregateDeviceSupportEnabled()
Definition AudioDeviceManager.cpp:1327
static ENGINE_API bool PreInitialize()
Definition AudioDeviceManager.cpp:692
ENGINE_API uint8 GetNumActiveAudioDevices() const
Definition AudioDeviceManager.cpp:1020
ENGINE_API void UpdateActiveAudioDevices(bool bGameTicking)
Definition AudioDeviceManager.cpp:790
ENGINE_API void RemoveSoundMix(USoundMix *SoundMix)
Definition AudioDeviceManager.cpp:1176
ENGINE_API void UpdateSourceEffectChain(const uint32 SourceEffectChainId, const TArray< FSourceEffectChainEntry > &SourceEffectChain, const bool bPlayEffectChainTails)
Definition AudioDeviceManager.cpp:948
ENGINE_API void SetAudioDevice(UWorld &InWorld, Audio::FDeviceId InDeviceID)
Definition AudioDeviceManager.cpp:673
ENGINE_API void SetSoloDevice(Audio::FDeviceId InAudioDeviceHandle)
Definition AudioDeviceManager.cpp:993
ENGINE_API IAudioDeviceModule * GetAudioDeviceModule()
Definition AudioDeviceManager.cpp:264
Audio::FDeviceId GetMainAudioDeviceID() const
Definition AudioDeviceManager.h:103
ENGINE_API void InitSoundEffectPresets()
Definition AudioDeviceManager.cpp:943
ENGINE_API ~FAudioDeviceManager()
Definition AudioDeviceManager.cpp:201
ENGINE_API void RemoveSoundBufferForResourceID(uint32 ResourceID)
Definition AudioDeviceManager.cpp:1172
ENGINE_API void FreeResource(USoundWave *SoundWave)
Definition AudioDeviceManager.cpp:1141
ENGINE_API void InitSoundClasses()
Definition AudioDeviceManager.cpp:903
ENGINE_API TArray< FAudioDevice * > GetAudioDevices() const
Definition AudioDeviceManager.cpp:1041
ENGINE_API FAudioDevice * GetAudioDeviceRaw(Audio::FDeviceId InDeviceID)
Definition AudioDeviceManager.cpp:645
static ENGINE_API FAudioDeviceManager * Get()
Definition AudioDeviceManager.cpp:734
ENGINE_API FAudioDeviceManager()
Definition AudioDeviceManager.cpp:178
ENGINE_API FAudioDeviceHandle RequestAudioDevice(const FAudioDeviceParams &InParams)
Definition AudioDeviceManager.cpp:287
ENGINE_API FAudioDeviceHandle GetActiveAudioDevice()
Definition AudioDeviceManager.cpp:775
ENGINE_API float GetDynamicSoundVolume(ESoundType SoundType, const FName &SoundName) const
Definition AudioDeviceManager.cpp:1252
bool IsPlayAllDeviceAudio() const
Definition AudioDeviceManager.h:266
ENGINE_API void ResetDynamicSoundVolume(ESoundType SoundType, const FName &SoundName)
Definition AudioDeviceManager.cpp:1284
ENGINE_API void IterateOverAllDevices(TUniqueFunction< void(Audio::FDeviceId, FAudioDevice *)> ForEachDevice)
Definition AudioDeviceManager.cpp:811
ENGINE_API void TrackResource(USoundWave *SoundWave, FSoundBuffer *Buffer)
Definition AudioDeviceManager.cpp:1128
ENGINE_API void StopSoundsUsingResource(class USoundWave *InSoundWave, TArray< UAudioComponent * > *StoppedComponents=nullptr)
Definition AudioDeviceManager.cpp:873
ENGINE_API void UnregisterWorld(UWorld *InWorld, Audio::FDeviceId DeviceId)
Definition AudioDeviceManager.cpp:332
ENGINE_API void UnregisterSoundSubmix(const USoundSubmixBase *SoundSubmix)
Definition AudioDeviceManager.cpp:923
ENGINE_API void SetDynamicSoundVolume(ESoundType SoundType, const FName &SoundName, float Volume)
Definition AudioDeviceManager.cpp:1303
static ENGINE_API Audio::FMixerDevice * GetAudioMixerDeviceFromWorldContext(const UObject *WorldContextObject)
Definition AudioDeviceManager.cpp:255
ENGINE_API Audio::FAudioFormatSettings & GetAudioFormatSettings() const
Definition AudioDeviceManager.cpp:1111
ENGINE_API void StopSourcesUsingBuffer(FSoundBuffer *Buffer)
Definition AudioDeviceManager.cpp:1123
ENGINE_API FAudioDeviceHandle GetAudioDevice(Audio::FDeviceId InDeviceID)
Definition AudioDeviceManager.cpp:629
static ENGINE_API void EnableAggregateDeviceSupport(const bool bInEnableAggregateDevice)
Definition AudioDeviceManager.cpp:1322
ENGINE_API void UpdateSubmix(USoundSubmixBase *SoundSubmix)
Definition AudioDeviceManager.cpp:958
ENGINE_API void LogListOfAudioDevices()
Definition AudioDeviceManager.cpp:1091
ENGINE_API bool IsValidAudioDevice(Audio::FDeviceId DeviceID) const
Definition AudioDeviceManager.cpp:534
ENGINE_API void RegisterSoundSubmix(USoundSubmixBase *SoundSubmix)
Definition AudioDeviceManager.cpp:913
ENGINE_API FSoundBuffer * GetSoundBufferForResourceID(uint32 ResourceID)
Definition AudioDeviceManager.cpp:1166
ENGINE_API bool CreateMainAudioDevice()
Definition AudioDeviceManager.cpp:446
static ENGINE_API void Shutdown()
Definition AudioDeviceManager.cpp:765
ENGINE_API void FreeBufferResource(FSoundBuffer *SoundBuffer)
Definition AudioDeviceManager.cpp:1154
ENGINE_API FAudioDeviceParams GetDefaultParamsForNewWorld()
Definition AudioDeviceManager.cpp:269
ENGINE_API void RegisterSoundClass(USoundClass *SoundClass)
Definition AudioDeviceManager.cpp:883
ENGINE_API void SetActiveDevice(uint32 InAudioDeviceHandle)
Definition AudioDeviceManager.cpp:968
ENGINE_API void ResetAllDynamicSoundVolumes()
Definition AudioDeviceManager.cpp:1265
ENGINE_API bool IsAlwaysPlayNonRealtimeDeviceAudio() const
Definition AudioDeviceManager.cpp:1217
Definition AudioDevice.h:417
Definition NameTypes.h:617
Definition UObjectGlobals.h:2492
Definition AudioDecompress.h:414
Definition Audio.h:551
Definition AudioMixer.h:871
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition FunctionFwd.h:19
Definition UniquePtr.h:107
Definition Object.h:95
Definition SoundClass.h:209
Definition SoundMix.h:173
Definition SoundSubmix.h:174
Definition SoundWave.h:417
Definition World.h:918
NO_LOGGING.
Definition AudioMixerPlatformAndroid.cpp:53
uint32 FDeviceId
Definition AudioDefines.h:66
Definition AudioDeviceManager.h:55
IAudioDeviceModule * AudioModule
Definition AudioDeviceManager.h:63
int32 BufferSizeOverride
Definition AudioDeviceManager.h:65
UWorld * AssociatedWorld
Definition AudioDeviceManager.h:57
bool bIsNonRealtime
Definition AudioDeviceManager.h:61
int32 NumBuffersOverride
Definition AudioDeviceManager.h:67
EAudioDeviceScope Scope
Definition AudioDeviceManager.h:59
Definition ResourceArray.h:31
Definition SoundEffectSource.h:31
Definition PimplPtr.h:50