UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AudioBusSubsystem.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6#include "Misc/TVariant.h"
10
11#include "AudioBusSubsystem.generated.h"
12
13class UAudioBus;
14
15namespace Audio
16{
17 // Forward declarations
18 class FMixerAudioBus;
19 class FMixerSourceManager;
20
22 {
23 uint32 ObjectId = INDEX_NONE; // from a corresponding UObject (UAudioBus) if applicable
25
27 : InstanceId(InstanceIdCounter++)
28 {
29 }
30
31 // For construction with a given UObject unique id
36
37 const bool IsValid() const
38 {
40 }
41
42 inline friend uint32 GetTypeHash(const FAudioBusKey& Key)
43 {
44 return HashCombineFast(Key.ObjectId, Key.InstanceId);
45 }
46
47 inline friend bool operator==(const FAudioBusKey& InLHS, const FAudioBusKey& InRHS)
48 {
49 return (InLHS.ObjectId == InRHS.ObjectId) && (InLHS.InstanceId == InRHS.InstanceId);
50 }
51
52 inline friend bool operator!=(const FAudioBusKey& InLHS, const FAudioBusKey& InRHS)
53 {
54 return !(InLHS == InRHS);
55 }
56
57
58 private:
59 static AUDIOMIXER_API std::atomic<uint32> InstanceIdCounter;
60 };
61}
62
66UCLASS(MinimalAPI)
68{
70
71public:
73 virtual ~UAudioBusSubsystem() = default;
74
75 //~ Begin USubsystem interface
76 AUDIOMIXER_API virtual bool ShouldCreateSubsystem(UObject* Outer) const override;
78 AUDIOMIXER_API virtual void Deinitialize() override;
79 //~ End USubsystem interface
80
81 // Audio bus API from FMixerDevice
82 UE_DEPRECATED(5.6, "Use the StartAudioBus version that requires an AudioBus name.")
83 AUDIOMIXER_API void StartAudioBus(Audio::FAudioBusKey InAudioBusKey, int32 InNumChannels, bool bInIsAutomatic);
84
85 AUDIOMIXER_API void StartAudioBus(Audio::FAudioBusKey InAudioBusKey, const FString& InAudioBusName, int32 InNumChannels, bool bInIsAutomatic);
86 AUDIOMIXER_API void StopAudioBus(Audio::FAudioBusKey InAudioBusKey);
87 AUDIOMIXER_API bool IsAudioBusActive(Audio::FAudioBusKey InAudioBusKey) const;
88
89 AUDIOMIXER_API Audio::FPatchInput AddPatchInputForAudioBus(Audio::FAudioBusKey InAudioBusKey, int32 InFrames, int32 InChannels, float InGain = 1.f);
90 AUDIOMIXER_API Audio::FPatchOutputStrongPtr AddPatchOutputForAudioBus(Audio::FAudioBusKey InAudioBusKey, int32 InFrames, int32 InChannels, float InGain = 1.f);
91
92 AUDIOMIXER_API Audio::FPatchInput AddPatchInputForSoundAndAudioBus(uint64 SoundInstanceID, Audio::FAudioBusKey AudioBusKey, int32 InFrames, int32 NumChannels, float InGain = 1.f);
93 AUDIOMIXER_API Audio::FPatchOutputStrongPtr AddPatchOutputForSoundAndAudioBus(uint64 SoundInstanceID, Audio::FAudioBusKey AudioBusKey, int32 InFrames, int32 NumChannels, float InGain = 1.f);
94 AUDIOMIXER_API void ConnectPatches(uint64 SoundInstanceID);
95 AUDIOMIXER_API void RemoveSound(uint64 SoundInstanceID);
96
97 AUDIOMIXER_API void InitDefaultAudioBuses();
98 AUDIOMIXER_API void ShutdownDefaultAudioBuses();
99
100private:
101 struct FActiveBusData
102 {
103 Audio::FAudioBusKey BusKey = 0;
104 int32 NumChannels = 0;
105 bool bIsAutomatic = false;
106 };
107
108 TArray<TStrongObjectPtr<UAudioBus>> DefaultAudioBuses;
109 // The active audio bus list accessible on the game thread
110 TMap<Audio::FAudioBusKey, FActiveBusData> ActiveAudioBuses_GameThread;
111
112 struct FPendingConnection
113 {
115 FPatchVariant PatchVariant;
116 Audio::FAudioBusKey AudioBusKey;
117 int32 BlockSizeFrames = 0;
118 int32 NumChannels = 0;
119 bool bIsAutomatic = false;
120 };
121
122 void AddPendingConnection(uint64 SoundInstanceID, FPendingConnection&& PendingConnection);
123
124 struct FSoundInstanceConnections
125 {
126 TArray<FPendingConnection> PendingConnections;
127 };
128
129 TArray<FPendingConnection> ExtractPendingConnectionsIfReady(uint64 SoundInstanceID);
130
131 TMap<uint64, FSoundInstanceConnections> SoundInstanceConnectionMap;
133};
@ 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
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UCLASS(...)
Definition ObjectMacros.h:776
constexpr uint32 HashCombineFast(uint32 A, uint32 B)
Definition TypeHash.h:74
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition SubsystemCollection.h:15
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition TVariant.h:48
Definition AudioBusSubsystem.h:68
virtual ~UAudioBusSubsystem()=default
Definition AudioBus.h:76
Definition AudioEngineSubsystem.h:46
Definition Object.h:95
NO_LOGGING.
Definition AudioMixerPlatformAndroid.cpp:53
UE::FRecursiveMutex Mutex
Definition MeshPaintVirtualTexture.cpp:164
Definition AudioBusSubsystem.h:22
const bool IsValid() const
Definition AudioBusSubsystem.h:37
friend bool operator==(const FAudioBusKey &InLHS, const FAudioBusKey &InRHS)
Definition AudioBusSubsystem.h:47
FAudioBusKey(uint32 InObjectId)
Definition AudioBusSubsystem.h:32
uint32 ObjectId
Definition AudioBusSubsystem.h:23
friend uint32 GetTypeHash(const FAudioBusKey &Key)
Definition AudioBusSubsystem.h:42
FAudioBusKey()
Definition AudioBusSubsystem.h:26
friend bool operator!=(const FAudioBusKey &InLHS, const FAudioBusKey &InRHS)
Definition AudioBusSubsystem.h:52
uint32 InstanceId
Definition AudioBusSubsystem.h:24