UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AudioMixerSourceBuffer.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"
8#include "Sound/SoundWave.h"
10
11namespace Audio
12{
13 static const int32 MAX_BUFFERS_QUEUED = 3;
14 static const int32 LOOP_FOREVER = -1;
16
17 struct FProceduralAudioTaskData;
18 struct FProceduralAudioTaskResults;
19
38
48
50
66
69 {
70 public:
72
74
75 bool Init();
76
77 // Sets the decoder to use for realtime async decoding
79
80 // Sets the raw PCM data buffer to use for the source buffer
82
83 // Sets the precached buffers
85
86 // Called by source manager when needing more buffers
87 void OnBufferEnd();
88
89 // Return the number of buffers enqueued on the mixer source buffer
91
92 // Returns the next enqueued buffer, returns nullptr if no buffers enqueued
94
95 // Returns if buffer looped
96 bool DidBufferLoop() const { return bLoopCallback; }
97
98 // Returns true if buffer finished
99 bool DidBufferFinish() const { return bBufferFinished; }
100
101 // Returns true if the last buffer has been read
102 bool IsEndOfAudio() const;
103
104 // Called to start an async task to read more data
106
107 // Returns true if async task is in progress
108 bool IsAsyncTaskInProgress() const;
109
110 // Returns true if the async task is done
111 bool IsAsyncTaskDone() const;
112
113 // Get the unique instance ID (transmitter ID) for the source
114 uint64 GetInstanceID() const;
115
116 // Returns some diagnostic state
118 {
120 float RunTimeInSecs=0.f;
121 bool bInFlight=false;
122 bool bProcedural=false;
123 };
125
126 // Ensures the async task finishes
128
129 // Begin and end generation on the audio render thread (audio mixer only)
130 void OnBeginGenerate();
131 void OnEndGenerate();
132 void ClearWave() { SoundWave = nullptr; }
133
134#if ENABLE_AUDIO_DEBUG
135 double GetCPUCoreUtilization() const;
136#endif // ENABLE_AUDIO_DEBUG
137
138 // Returns the runtime render cost
139 float GetRelativeRenderCost() const;
140
141 // Note: can be called either directly on the rendering thread or from a background decode task.
142 void DoProceduralRendering(const FProceduralAudioTaskData& ProceduralTaskData, FProceduralAudioTaskResults& ProceduralResult);
144
145 private:
147
148 void SubmitInitialPCMBuffers();
149 void SubmitInitialRealtimeBuffers();
150 void SubmitRealTimeSourceData(const bool bFinishedOrLooped);
151 void ProcessRealTimeSource();
153 void DeleteDecoder();
154 void ConnectToBuses();
155
156 int32 NumBuffersQeueued;
157 FRawPCMDataBuffer RawPCMDataBuffer;
158
161 int32 CurrentBuffer;
162 // SoundWaves are only set for procedural sound waves
163 USoundWave* SoundWave;
164 ISoundGeneratorPtr SoundGenerator;
165 IAudioTask* AsyncRealtimeAudioTask;
166 ICompressedAudioInfo* DecompressionState;
167 ELoopingMode LoopingMode;
168 int32 NumChannels;
169 Audio::EBufferType::Type BufferType;
170 int32 NumPrecacheFrames;
171 Audio::FDeviceId AuioDeviceID;
172 uint64 InstanceID;
173 TArray<uint8> CachedRealtimeFirstBuffer;
174 FName WaveName;
175 uint64 AsyncTaskStartTimeInCycles=0;
176
177#if ENABLE_AUDIO_DEBUG
178 int32 SampleRate = 0;
179 std::atomic<double> CPUCoreUtilization = 0.0;
181#endif // ENABLE_AUDIO_DEBUG
182
183 std::atomic<float> RelativeRenderCost = 1.0f;
184 void SetRelativeRenderCost(float InRelativeRenderCost);
185
186 mutable FCriticalSection SoundWaveCritSec;
187 mutable FCriticalSection DecodeTaskCritSec;
188
189 uint32 bInitialized : 1;
190 uint32 bBufferFinished : 1;
191 uint32 bPlayedCachedBuffer : 1;
192 uint32 bIsSeeking : 1;
193 uint32 bLoopCallback : 1;
194 uint32 bProcedural : 1;
195 uint32 bIsBus : 1;
196 uint32 bForceSyncDecode : 1;
197 uint32 bHasError : 1;
198 uint32 bDirectRendering : 1;
199
200 virtual bool OnBeginDestroy(class USoundWave* Wave) override;
201 virtual bool OnIsReadyForFinishDestroy(class USoundWave* Wave) const override;
202 virtual void OnFinishDestroy(class USoundWave* Wave) override;
203 };
204}
ELoopingMode
Definition Audio.h:97
@ LOOP_Never
Definition Audio.h:99
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
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 AudioMixerSourceBuffer.h:69
void OnBufferEnd()
Definition AudioMixerSourceBuffer.cpp:206
int32 GetNumBuffersQueued() const
Definition AudioMixerSourceBuffer.cpp:234
void EnsureAsyncTaskFinishes()
Definition AudioMixerSourceBuffer.cpp:774
void ClearWave()
Definition AudioMixerSourceBuffer.h:132
uint64 GetInstanceID() const
Definition AudioMixerSourceBuffer.cpp:718
bool DidBufferLoop() const
Definition AudioMixerSourceBuffer.h:96
bool IsEndOfAudio() const
Definition AudioMixerSourceBuffer.cpp:653
bool IsAsyncTaskDone() const
Definition AudioMixerSourceBuffer.cpp:708
void GetDiagnosticState(FDiagnosticState &OutState)
Definition AudioMixerSourceBuffer.cpp:763
bool DidBufferFinish() const
Definition AudioMixerSourceBuffer.h:99
bool ReadMoreRealtimeData(ICompressedAudioInfo *InDecoder, int32 BufferIndex, EBufferReadMode BufferReadMode)
Definition AudioMixerSourceBuffer.cpp:447
bool IsAsyncTaskInProgress() const
Definition AudioMixerSourceBuffer.cpp:702
float GetRelativeRenderCost() const
Definition AudioMixerSourceBuffer.cpp:723
TSharedPtr< FAlignedFloatBuffer, ESPMode::ThreadSafe > GetNextBuffer()
Definition AudioMixerSourceBuffer.cpp:245
void FinishProceduralRendering(const FProceduralAudioTaskResults &TaskResult)
Definition AudioMixerSourceBuffer.cpp:335
void DoProceduralRendering(const FProceduralAudioTaskData &ProceduralTaskData, FProceduralAudioTaskResults &ProceduralResult)
Definition AudioMixerSourceBuffer.cpp:284
~FMixerSourceBuffer()
Definition AudioMixerSourceBuffer.cpp:139
void OnBeginGenerate()
Definition AudioMixerSourceBuffer.cpp:786
void SetCachedRealtimeFirstBuffers(TArray< uint8 > &&InPrecachedBuffer)
Definition AudioMixerSourceBuffer.cpp:172
bool Init()
Definition AudioMixerSourceBuffer.cpp:177
void SetDecoder(ICompressedAudioInfo *InCompressedAudioInfo)
Definition AudioMixerSourceBuffer.cpp:158
void SetPCMData(const FRawPCMDataBuffer &InPCMDataBuffer)
Definition AudioMixerSourceBuffer.cpp:166
void OnEndGenerate()
Definition AudioMixerSourceBuffer.cpp:808
Definition AudioMixerSourceDecode.h:156
Definition NameTypes.h:617
Definition AudioDecompress.h:31
Definition ArrayView.h:139
Definition Array.h:670
Definition Queue.h:48
Definition SharedPointer.h:692
Definition SoundWave.h:417
Type
Definition AudioMixerBuffer.h:14
NO_LOGGING.
Definition AudioMixerPlatformAndroid.cpp:53
EBufferReadMode
Definition AudioMixerSourceBuffer.h:41
uint32 FDeviceId
Definition AudioDefines.h:66
int32 DirectProceduralRenderingCVar
Definition AudioMixerSourceBuffer.cpp:12
Definition AudioMixerSourceBuffer.h:52
uint64 InstanceID
Definition AudioMixerSourceBuffer.h:55
FDeviceId AudioDeviceID
Definition AudioMixerSourceBuffer.h:53
ELoopingMode LoopingMode
Definition AudioMixerSourceBuffer.h:60
uint64 AudioComponentID
Definition AudioMixerSourceBuffer.h:54
USoundWave * SoundWave
Definition AudioMixerSourceBuffer.h:59
bool bIsSeeking
Definition AudioMixerSourceBuffer.h:62
bool bForceSyncDecode
Definition AudioMixerSourceBuffer.h:63
bool bIsPreviewSound
Definition AudioMixerSourceBuffer.h:64
int32 SampleRate
Definition AudioMixerSourceBuffer.h:56
float StartTime
Definition AudioMixerSourceBuffer.h:61
int32 AudioMixerNumOutputFrames
Definition AudioMixerSourceBuffer.h:57
FMixerBuffer * Buffer
Definition AudioMixerSourceBuffer.h:58
Definition AudioMixerSourceBuffer.h:118
float RunTimeInSecs
Definition AudioMixerSourceBuffer.h:120
FName WaveName
Definition AudioMixerSourceBuffer.h:119
bool bProcedural
Definition AudioMixerSourceBuffer.h:122
bool bInFlight
Definition AudioMixerSourceBuffer.h:121
Definition AudioMixerSourceDecode.h:21
Definition AudioMixerSourceDecode.h:106
Definition AudioMixerSourceBuffer.h:21
int32 LoopCount
Definition AudioMixerSourceBuffer.h:24
uint8 * Data
Definition AudioMixerSourceBuffer.h:22
FRawPCMDataBuffer()
Definition AudioMixerSourceBuffer.h:30
uint32 NumSamples
Definition AudioMixerSourceBuffer.h:26
bool GetNextBuffer(TArrayView< float > OutSourceBufferPtr, const uint32 NumSampleToGet)
Definition AudioMixerSourceBuffer.cpp:21
uint32 DataSize
Definition AudioMixerSourceBuffer.h:23
uint32 CurrentSample
Definition AudioMixerSourceBuffer.h:25
Definition SoundWave.h:406