UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AudioMixerSource.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "AudioMixerBuffer.h"
9
10namespace Audio
11{
12 class FMixerDevice;
13 class FMixerSourceVoice;
14 class FMixerSource;
15 class FMixerBuffer;
16 class ISourceListener;
17
25
30 class FMixerSource : public FSoundSource,
31 public ISourceListener
32 {
33 public:
36
39
40 //~ Begin FSoundSource Interface
41 virtual bool Init(FWaveInstance* InWaveInstance) override;
42 virtual void Update() override;
44 virtual bool IsPreparedToInit() override;
45 virtual bool IsInitialized() const override;
46 virtual void Play() override;
47 virtual void Stop() override;
48 virtual void StopNow() override;
49 virtual bool IsStopping() override { return bIsStopping; }
50 virtual void Pause() override;
51 virtual bool IsFinished() override;
52 virtual float GetPlaybackPercent() const override;
53 virtual int64 GetNumFramesPlayed() const override;
54 virtual float GetEnvelopeValue() const override;
55 virtual float GetRelativeRenderCost() const override;
56 //~ End FSoundSource Interface
57
58 //~ Begin ISourceListener
59 virtual void OnBeginGenerate() override;
60 virtual void OnDone() override;
61 virtual void OnEffectTailsDone() override;
62 virtual void OnLoopEnd() override { bLoopCallback = true; };
63 //~ End ISourceListener
64
65 private:
66
68 void SetupBusData(TArray<FInitAudioBusSend>* OutAudioBusSends = nullptr, bool bEnableBusSends = true);
69
71 void FreeResources();
72
74 void UpdatePitch();
75
77 void UpdateVolume();
78
80 void UpdateSpatialization();
81
83 void UpdateEffects();
84
86 void UpdateModulation();
87
89 void UpdateSourceBusSends();
90
92 void UpdateChannelMaps();
93
95 void UpdateRelativeRenderCost();
96
97#if ENABLE_AUDIO_DEBUG
99#endif // ENABLE_AUDIO_DEBUG
100
102 bool ComputeMonoChannelMap(Audio::FAlignedFloatBuffer& OutChannelMap);
103
105 bool ComputeStereoChannelMap(Audio::FAlignedFloatBuffer& OutChannelMap);
106
108 bool ComputeChannelMap(const int32 NumSourceChannels, Audio::FAlignedFloatBuffer& OutChannelMap);
109
111 bool UseObjectBasedSpatialization() const;
112
114 bool IsUsingObjectBasedSpatialization() const;
115
117 bool UseSpatializationPlugin() const;
118
120 bool UseOcclusionPlugin() const;
121
123 bool UseReverbPlugin() const;
124
126 bool UseSourceDataOverridePlugin() const;
127
129 float GetInheritedSubmixVolumeModulation() const;
130
131 private:
133
134 bool Is3D(const FSoundBuffer* SoundBuffer) const;
135
136 FMixerDevice* MixerDevice;
137 FMixerBuffer* MixerBuffer;
139 FMixerSourceVoice* MixerSourceVoice;
141 FMixerSubmixWeakPtr PreviousSubmixResolved;
142 TObjectKey<USoundSubmixBase> PrevousSubmix;
143
144 // These modulators are obtained from the submix and used only on binaural assets
145 bool bBypassingSubmixModulation;
146
147 uint32 bPreviousBusEnablement;
148 uint32 bPreviousBaseSubmixEnablement;
149
150 // This holds data copied from FSoundSourceBusSendInfo when a new sound starts playing
151 // so that distance-based level control can be calculated during rendering
152 struct FDynamicBusSendInfo
153 {
154 float SendLevel = 0.0f;
155 uint32 BusId = 0;
156#if ENABLE_AUDIO_DEBUG
157 FString BusName;
158#endif // ENABLE_AUDIO_DEBUG
161 float MinSendLevel = 0.0f;
162 float MaxSendLevel = 0.0f;
163 float MinSendDistance = 0.0f;
164 float MaxSendDistance = 0.0f;
165 FRuntimeFloatCurve CustomSendLevelCurve;
166 bool bIsInit = true;
167 };
168
169 // Mapping of channel map types to channel maps. Determined by what submixes this source sends its audio to.
171 FRWLock ChannelMapLock;
172
173 float PreviousAzimuth;
174 mutable float PreviousPlaybackPercent;
175
176 FSpatializationParams SpatializationParams;
177
178 EMixerSourceInitializationState InitializationState;
179
180 FThreadSafeBool bPlayedCachedBuffer;
181 FThreadSafeBool bPlaying;
182 FThreadSafeBool bIsStopping;
183 FThreadSafeBool bLoopCallback;
184 FThreadSafeBool bIsDone;
185 FThreadSafeBool bIsEffectTailsDone;
186 FThreadSafeBool bIsPlayingEffectTails;
187 FThreadSafeBool bFreeAsyncTask;
188
189 // Array of copied FSoundSourceBusSendInfo data for all the bus sends this
190 // source may need to live-update during its lifespan
191 TArray<FDynamicBusSendInfo> DynamicBusSendInfos;
192
193 // An array of submixes from previous update. Allows us to clear out submix sends if they are no longer being sent.
194 TSet<FMixerSubmixWeakPtr> PreviousSubmixSends;
195
196 // Whether or not we're currently releasing our resources. Prevents recycling the source until release is finished.
197 FThreadSafeBool bIsReleasing;
198
199 uint32 bEditorWarnedChangedSpatialization : 1;
200 uint32 bIs3D : 1;
201 uint32 bDebugMode : 1;
202 uint32 bIsVorbis : 1;
203 uint32 bIsStoppingVoicesEnabled : 1;
204 uint32 bSendingAudioToBuses : 1;
205 uint32 bPrevAllowedSpatializationSetting : 1;
206 };
207}
208
210{
211 switch(State)
212 {
216 default: break;
217 }
218 return TEXT("Unknown");
219}
const TCHAR * LexToString(const Audio::EMixerSourceInitializationState State)
Definition AudioMixerSource.h:209
EBusSendType
Definition Audio.h:169
#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::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
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
void Init()
Definition LockFreeList.h:4
ESourceBusSendLevelControlMethod
Definition SoundSourceBusSend.h:14
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition AudioMixerBuffer.h:28
Definition AudioMixerDevice.h:117
Definition AudioMixerSourceVoice.h:20
Definition AudioMixerSource.h:32
virtual bool IsInitialized() const override
Definition AudioMixerSource.cpp:1009
virtual bool IsPreparedToInit() override
Definition AudioMixerSource.cpp:941
virtual int64 GetNumFramesPlayed() const override
Definition AudioMixerSource.cpp:1228
virtual void OnBeginGenerate() override
Definition AudioMixerSource.cpp:1256
virtual bool IsFinished() override
Definition AudioMixerSource.cpp:1165
~FMixerSource()
Definition AudioMixerSource.cpp:187
virtual void OnLoopEnd() override
Definition AudioMixerSource.h:62
virtual bool PrepareForInitialization(FWaveInstance *InWaveInstance) override
Definition AudioMixerSource.cpp:816
virtual void Stop() override
Definition AudioMixerSource.cpp:1060
virtual void OnEffectTailsDone() override
Definition AudioMixerSource.cpp:1265
virtual void OnDone() override
Definition AudioMixerSource.cpp:1260
virtual void Pause() override
Definition AudioMixerSource.cpp:1145
virtual float GetRelativeRenderCost() const override
Definition AudioMixerSource.cpp:1247
virtual void Play() override
Definition AudioMixerSource.cpp:1014
virtual float GetPlaybackPercent() const override
Definition AudioMixerSource.cpp:1202
virtual void StopNow() override
Definition AudioMixerSource.cpp:1119
virtual float GetEnvelopeValue() const override
Definition AudioMixerSource.cpp:1238
virtual bool IsStopping() override
Definition AudioMixerSource.h:49
virtual void Update() override
Definition AudioMixerSource.cpp:745
Definition AudioMixerSourceManager.h:84
Definition AudioDevice.h:417
Definition Audio.h:551
Definition Audio.h:627
Definition ThreadSafeBool.h:17
Definition Array.h:670
Definition ObjectKey.h:228
Definition SharedPointer.h:692
Definition CriticalSection.h:14
NO_LOGGING.
Definition AudioMixerPlatformAndroid.cpp:53
EMixerSourceSubmixSendStage
Definition AudioMixerSubmix.h:65
EMixerSourceInitializationState
Definition AudioMixerSource.h:20
Definition CurveFloat.h:13
Definition SoundSubmixSend.h:84
Definition IAudioExtensionPlugin.h:69
Definition Audio.h:180