UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AudioMixerSourceManager.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "AudioBusSubsystem.h"
5#include "AudioMixerBuffer.h"
6#include "AudioMixerBus.h"
7#include "AudioMixerDevice.h"
9#include "AudioMixerSubmix.h"
10#include "AudioMixerTrace.h"
20#include "ISoundfieldFormat.h"
21#include "Misc/SpinLock.h"
24#include "Stats/Stats.h"
25
26#if UE_AUDIO_PROFILERTRACE_ENABLED
28#endif // UE_AUDIO_PROFILERTRACE_ENABLED
29
30#include "AudioMixerSourceManager.generated.h"
31
32// Default this to on (it's quite a small memory footprint).
33#ifndef WITH_AUDIO_MIXER_THREAD_COMMAND_DEBUG
34 #define WITH_AUDIO_MIXER_THREAD_COMMAND_DEBUG (1)
35#endif //WITH_AUDIO_MIXER_THREAD_COMMAND_DEBUG
36
37// Tracks the time it takes to up the source manager (computes source buffers, source effects, sample rate conversion)
39
40// The time it takes to compute the source buffers (handle decoding tasks, resampling)
42
43// The time it takes to process the source buffers through their source effects
45
46// The time it takes to apply channel maps and get final pre-submix source buffers
48
49// The time it takes to process the HRTF effect.
51
52// For diagnostics, keep track of what phase of updating the Source manager is in currently.
53UENUM()
73
74namespace Audio
75{
76 class FMixerSubmix;
77 class FMixerDevice;
78 class FMixerSourceVoice;
79 class FMixerSourceBuffer;
80 class ISourceListener;
81 class FMixerSourceSubmixOutputBuffer;
82
84 {
85 public:
86 virtual ~ISourceListener() = default;
87
88 // Called before a source begins to generate audio.
89 virtual void OnBeginGenerate() = 0;
90
91 // Called when a loop point is hit
92 virtual void OnLoopEnd() = 0;
93
94 // Called when the source finishes on the audio render thread
95 virtual void OnDone() = 0;
96
97 // Called when the source's effect tails finish on the audio render thread.
98 virtual void OnEffectTailsDone() = 0;
99
100 };
101
103 {
104 // The submix ptr
106
107 // The amount of audio that is to be mixed into this submix
108 float SendLevel = 0.0f;
109
110 // Whather or not this is the primary send (i.e. first in the send chain)
111 bool bIsMainSend = false;
112
113 // Whether or not this is a pre-distance attenuation send
115
116 // If this is a soundfield submix, this is a pointer to the submix's Soundfield Factory.
117 // If this is nullptr, the submix is not a soundfield submix.
119 };
120
121 // Struct holding mappings of bus ids (unique ids) to send level
123 {
125 float SendLevel = 0.0f;
127#if ENABLE_AUDIO_DEBUG
128 FString AudioBusName;
129#endif // ENABLE_AUDIO_DEBUG
130 };
131
133 {
140#if ENABLE_AUDIO_DEBUG
141 FString AudioBusName;
142#endif // ENABLE_AUDIO_DEBUG
143 float SourceBusDuration = 0.0f;
152 FString DebugName;
157
159
161
163
165
168 bool bIs3D = false;
171 bool bIsExternalSend = false;
172 bool bIsDebugMode = false;
173 bool bEnableBusSends = false;
174 bool bEnableBaseSubmix = false;
175 bool bEnableSubmixSends = false;
176 bool bIsVorbis = false;
177 bool bIsSoundfield = false;
178 bool bIsSeeking = false;
180
183 };
184
186 {
187 // Total number of sources to use in the source manager
189 };
190
192 {
193 public:
196
197 void Init(const FSourceManagerInitParams& InitParams);
198 void Update(bool bTimedOut = false);
199
203
204 void ReleaseSourceId(const int32 SourceId);
205 void InitSource(const int32 SourceId, const FMixerSourceVoiceInitParams& InitParams);
206
207 // Creates and starts an audio bus manually.
208 UE_DEPRECATED(5.6, "Use the StartAudioBus version that requires an AudioBus name.")
210
212
213 // Stops an audio bus manually
215
216 // Queries if an audio bus is active. Must be called from the audio thread.
218
219 // Returns the number of channels currently set for the audio bus associated with
220 // the provided BusId. Returns 0 if the audio bus is inactive.
222
223 // Adds a patch output for an audio bus from the Audio Render Thread
225
226 // Adds a patch output for an audio bus from the Audio Thread
228
229 // Adds a patch input for an audio bus
231
232 // Adds a patch input for an audio bus from the Audio Thread
234
235 void Play(const int32 SourceId);
236 void Stop(const int32 SourceId);
237 void CancelQuantizedSound(const int32 SourceId);
238 void StopInternal(const int32 SourceId);
239 void StopFade(const int32 SourceId, const int32 NumFrames);
240 void Pause(const int32 SourceId);
241 void SetPitch(const int32 SourceId, const float Pitch);
242 void SetVolume(const int32 SourceId, const float Volume);
243 void SetDistanceAttenuation(const int32 SourceId, const float DistanceAttenuation);
244 void SetSpatializationParams(const int32 SourceId, const FSpatializationParams& InParams);
245 void SetChannelMap(const int32 SourceId, const uint32 NumInputChannels, const Audio::FAlignedFloatBuffer& InChannelMap, const bool bInIs3D, const bool bInIsCenterChannelOnly);
246 void SetLPFFrequency(const int32 SourceId, const float Frequency);
247 void SetHPFFrequency(const int32 SourceId, const float Frequency);
248
249 // Sets base (i.e. carrier) frequency of modulatable parameters
250 void SetModPitch(const int32 SourceId, const float InModPitch);
251 void SetModVolume(const int32 SourceId, const float InModVolume);
252 void SetModLPFFrequency(const int32 SourceId, const float InModFrequency);
253 void SetModHPFFrequency(const int32 SourceId, const float InModFrequency);
254
255 void SetModulationRouting(const int32 SourceId, FSoundModulationDefaultSettings& ModulationSettings);
256
258
259 void SetListenerTransforms(const TArray<FTransform>& ListenerTransforms);
261
262 int64 GetNumFramesPlayed(const int32 SourceId) const;
263 float GetEnvelopeValue(const int32 SourceId) const;
264
265 float GetVolumeModulationValue(const int32 SourceId) const;
266
267#if ENABLE_AUDIO_DEBUG
268 double GetCPUCoreUtilization(const int32 SourceId) const;
269#endif // ENABLE_AUDIO_DEBUG
270 float GetRelativeRenderCost(const int32 SourceId) const;
271 bool IsUsingHRTFSpatializer(const int32 SourceId) const;
272 bool NeedsSpeakerMap(const int32 SourceId) const;
274 void UpdateSourceState();
275 void ClearStoppingSounds();
277 void RenderSource(const int32 SourceId);
278
279 // Retrieves a channel map for the given source ID for the given output channels
280 // can be used even when a source is 3D if the source is doing any kind of bus sending or otherwise needs a channel map
282
283 // Called by a soundfield submix to get encoded audio.
284 // If this source wasn't encoded (possibly because it is paused or finished playing),
285 // this returns nullptr.
286 // Returned nonnull pointers are only guaranteed to be valid on the audio mixer render thread.
287 const ISoundfieldAudioPacket* GetEncodedOutput(const int32 SourceId, const FSoundfieldEncodingKey& InKey) const;
288
289 const FQuat GetListenerRotation(const int32 SourceId) const;
290
291 void SetSubmixSendInfo(const int32 SourceId, const FMixerSourceSubmixSend& SubmixSend);
292 void ClearSubmixSendInfo(const int32 SourceId, const FMixerSourceSubmixSend& SubmixSend);
293
294 void SetBusSendInfo(const int32 SourceId, EBusSendType InAudioBusSendType, uint32 AudiobusId, float BusSendLevel, const FString& InBusName);
295
297
298 void UpdateSourceEffectChain(const uint32 SourceEffectChainId, const TArray<FSourceEffectChainEntry>& SourceEffectChain, const bool bPlayEffectChainTails);
299
300
301 // Quantized event methods
302 void PauseSoundForQuantizationCommand(const int32 SourceId);
303 void SetSubBufferDelayForSound(const int32 SourceId, const int32 FramesToDelay);
304 void UnPauseSoundForQuantizationCommand(const int32 SourceId);
305
306 // Buffer getters
307 const float* GetPreDistanceAttenuationBuffer(const int32 SourceId) const;
308 const float* GetPreEffectBuffer(const int32 SourceId) const;
309 const float* GetPreviousSourceBusBuffer(const int32 SourceId) const;
310 const float* GetPreviousAudioBusBuffer(const int32 AudioBusId) const;
311 int32 GetNumChannels(const int32 SourceId) const;
312 int32 GetNumOutputFrames() const { return NumOutputFrames; }
313 bool IsSourceBus(const int32 SourceId) const;
314 void PumpCommandQueue();
315 void UpdatePendingReleaseData(bool bForceWait = false);
316 void FlushCommandQueue(bool bPumpCommandQueue = false);
317
318 // Pushes a TFUnction command into an MPSC queue from an arbitrary thread to the audio render thread
319 void AudioMixerThreadMPSCCommand(TFunction<void()>&& InCommand, const char* InDebugString=nullptr);
320
321 void AddPendingAudioBusConnection(FAudioBusKey AudioBusKey, int32 NumChannels, bool bIsAutomatic, FPatchInput PatchInput, uint64 InstanceID = INDEX_NONE)
322 {
323 PendingAudioBusConnections.Enqueue(FPendingAudioBusConnection{ FPendingAudioBusConnection::FPatchVariant(TInPlaceType<FPatchInput>(), MoveTemp(PatchInput)), MoveTemp(AudioBusKey), NumChannels, bIsAutomatic, InstanceID });
324 }
325
326 void AddPendingAudioBusConnection(FAudioBusKey AudioBusKey, int32 NumChannels, bool bIsAutomatic, FPatchOutputStrongPtr PatchOutputStrongPtr, uint64 InstanceID = INDEX_NONE)
327 {
328 PendingAudioBusConnections.Enqueue(FPendingAudioBusConnection{ FPendingAudioBusConnection::FPatchVariant(TInPlaceType<FPatchOutputStrongPtr>(), MoveTemp(PatchOutputStrongPtr)), MoveTemp(AudioBusKey), NumChannels, bIsAutomatic, InstanceID });
329 }
330
332 {
333 return MixerDevice->GetRenderScheduler();
334 }
335
336 private:
337#define INVALID_AUDIO_RENDER_THREAD_ID static_cast<uint32>(-1)
338 uint32 AudioRenderThreadId = INVALID_AUDIO_RENDER_THREAD_ID;
339 void ReleaseSource(const int32 SourceId);
340 void BuildSourceEffectChain(const int32 SourceId, FSoundEffectSourceInitData& InitData, const TArray<FSourceEffectChainEntry>& SourceEffectChain, TArray<TSoundEffectSourcePtr>& OutSourceEffects);
341 void ResetSourceEffectChain(const int32 SourceId);
342 void ReadSourceFrame(const int32 SourceId);
343
344 void GenerateSourceAudio(const bool bGenerateBuses);
345 void GenerateSourceAudio(const bool bGenerateBuses, const int32 SourceIdStart, const int32 SourceIdEnd);
346
347 void ComputeSourceBuffer(const bool bGenerateBuses, const int32 SourceId);
348 void ComputePostSourceEffectBuffer(const bool bGenerateBuses, const int32 SourceId);
349 void ComputeOutputBuffers(const bool bGenerateBuses, const int32 SourceId);
350
351 void ConnectBusPatches();
352 void ComputeBuses();
353 void UpdateBuses();
354 void AddBusPatchDependency(const uint64 InstanceID, const FAudioRenderStepId FirstStep, const FAudioRenderStepId SecondStep);
355 void RemoveBusPatchDependencies(const uint64 InstanceID);
356
357 float GetFloatCompareTolerance() const;
358 float GetCommandQueueFillPercentage() const;
359
360 struct FAudioMixerThreadCommand
361 {
362 // ctor
363 FAudioMixerThreadCommand() = default;
364 FAudioMixerThreadCommand(TFunction<void()>&& InFunction, const char* InDebugString, bool bInDeferExecution = false);
365
366 // function-call operator
367 void operator()() const;
368
369 // data
371
372 // Defers the execution by a single call to PumpCommandQueue()
373 // (used for commands that affect a playing source,
374 // and that source gets initialized after the command executes
375 bool bDeferExecution = false;
376
377#if WITH_AUDIO_MIXER_THREAD_COMMAND_DEBUG
378 const char* DebugString=nullptr; // Statically defined string from macro AUDIO_MIXER_THREAD_COMMAND_STRING
379 mutable uint64_t StartExecuteTimeInCycles=0; // Set just before Function is called, for diagnostics.
380#endif // #if WITH_AUDIO_MIXER_THREAD_COMMAND_DEBUG
381
382 FString GetSafeDebugString() const;
383 float GetExecuteTimeInSeconds() const;
384 };
385
386 void AudioMixerThreadCommand(TFunction<void()>&& InFunction, const char* InDebugString = nullptr, bool bInDeferExecution = false);
387
388#if UE_AUDIO_PROFILERTRACE_ENABLED
389 void OnTraceStarted(FTraceAuxiliary::EConnectionType TraceType, const FString& TraceDestination);
390
393
396
399
402#endif // UE_AUDIO_PROFILERTRACE_ENABLED
403
404 // Critical section to ensure mutating effect chains is thread-safe
405 FCriticalSection EffectChainMutationCriticalSection;
406
407 FMixerDevice* MixerDevice;
408
409 // Info about spatialization plugin
411
412 // Cached ptr to an optional source data override plugin
413 TAudioSourceDataOverridePtr SourceDataOverridePlugin;
414
415 IAudioLinkFactory* AudioLinkFactory = nullptr;
416
417 // Array of pointers to game thread audio source objects
418 TArray<FMixerSourceVoice*> MixerSources;
419
420 // A command queue to execute commands from audio thread (or game thread) to audio mixer device thread.
421 struct FCommands
422 {
423 FThreadSafeCounter NumTimesOvergrown = 0;
424 TArray<FAudioMixerThreadCommand> SourceCommandQueue;
425 };
426
427 FCommands CommandBuffers[2];
428 FThreadSafeCounter RenderThreadCommandBufferIndex;
429
430 FEvent* CommandsProcessedEvent;
431 FCriticalSection CommandBufferIndexCriticalSection;
432
433 TArray<int32> DebugSoloSources;
434
435 using FAudioMixerMpscCommand = FAudioMixerThreadCommand;
436 TMpscQueue<FAudioMixerMpscCommand> MpscCommandQueue;
437
438 struct FSourceInfo : public IAudioMixerRenderStep
439 {
440 FSourceInfo() : Resampler(1 /* NumChannels */) {}
441 ~FSourceInfo() {}
442
443 // The owning source manager
444 FMixerSourceManager* SourceManager;
445
446 // Object which handles source buffer decoding
448 ISourceListener* SourceListener;
449
450 // Data used for rendering sources
452
453 // The post-attenuation source buffer, used to send audio to submixes
454 Audio::FAlignedFloatBuffer SourceBuffer;
455 Audio::FAlignedFloatBuffer PreEffectBuffer;
456 Audio::FAlignedFloatBuffer PreDistanceAttenuationBuffer;
457 Audio::FAlignedFloatBuffer SourceEffectScratchBuffer;
458
459 // Data used for delaying the rendering of source audio for sample-accurate quantization
460 int32 SubCallbackDelayLengthInFrames{ 0 };
461 Audio::TCircularAudioBuffer<float> SourceBufferDelayLine;
462
463 TArray<float> CurrentFrameValues;
464 TArray<float> NextFrameValues;
465 float CurrentFrameAlpha;
466 int32 CurrentFrameIndex;
467 int64 NumFramesPlayed;
468
470
471 // What audio bus Id this source is sonfiying, if it is a source bus. This is INDEX_NONE for sources which are not source buses.
472 uint32 AudioBusId;
473
474 // Number of samples to count for source bus
475 int64 SourceBusDurationFrames;
476
477 // What buses this source is sending its audio to. Used to remove this source from the bus send list.
479
480 // Interpolated source params
481 FParam PitchSourceParam;
482 float VolumeSourceStart;
483 float VolumeSourceDestination;
484 float VolumeFadeSlope;
485 float VolumeFadeStart;
486 int32 VolumeFadeFramePosition;
487 int32 VolumeFadeNumFrames;
488
489 float DistanceAttenuationSourceStart;
490 float DistanceAttenuationSourceDestination;
491
492 // Legacy filter LFP & HPF frequency set directly (not by modulation) on source
493 float LowPassFreq;
494 float HighPassFreq;
495
496 // One-Pole LPFs and HPFs per source
497 Audio::FInterpolatedLPF LowPassFilter;
498 Audio::FInterpolatedHPF HighPassFilter;
499
500 // Source effect instances
501 uint32 SourceEffectChainId;
502 TArray<TSoundEffectSourcePtr> SourceEffects;
503 TArray<USoundEffectSourcePreset*> SourceEffectPresets;
504 bool bEffectTailsDone;
505 FSoundEffectSourceInputData SourceEffectInputData;
506
507 FAudioPluginSourceOutputData AudioPluginOutputData;
508
509 // A DSP object which tracks the amplitude envelope of a source.
510 Audio::FInlineEnvelopeFollower SourceEnvelopeFollower;
511 float SourceEnvelopeValue;
512
513 // Modulation destinations
514 Audio::FModulationDestination VolumeModulation;
515 Audio::FModulationDestination PitchModulation;
516 Audio::FModulationDestination LowpassModulation;
517 Audio::FModulationDestination HighpassModulation;
518
519 // Modulation Base (i.e. Carrier) Values
520 float VolumeModulationBase;
521 float PitchModulationBase;
522 float LowpassModulationBase;
523 float HighpassModulationBase;
524
525 FSpatializationParams SpatParams;
526 Audio::FAlignedFloatBuffer ScratchChannelMap;
527
528 // Quantization data
529 FQuartzQuantizedCommandHandle QuantizedCommandHandle;
530
531 // Optional Source buffer listener.
532 FSharedISourceBufferListenerPtr SourceBufferListener;
533
534 // Optional AudioLink.
536
537 // State management
538 uint8 bIs3D:1;
539 uint8 bIsCenterChannelOnly:1;
540 uint8 bIsActive:1;
541 uint8 bIsPlaying:1;
542 uint8 bIsPaused:1;
543 uint8 bIsPausedForQuantization:1;
544 uint8 bDelayLineSet:1;
545 uint8 bIsStopping:1;
546 uint8 bHasStarted:1;
547 uint8 bIsBusy:1;
548 uint8 bUseHRTFSpatializer:1;
549 uint8 bIsExternalSend:1;
550 uint8 bUseOcclusionPlugin:1;
551 uint8 bUseReverbPlugin:1;
552 uint8 bIsDone:1;
553 uint8 bIsLastBuffer:1;
554 uint8 bEnableBusSends : 1;
555 uint8 bEnableBaseSubmix : 1;
556 uint8 bEnableSubmixSends : 1;
557 uint8 bIsVorbis:1;
558 uint8 bIsSoundfield:1;
559 uint8 bHasPreDistanceAttenuationSend:1;
560 uint8 bModFiltersUpdated : 1;
561 uint8 bShouldSourceBufferListenerZeroBuffer : 1;
562 uint8 bResampling : 1;
563
564 // Source format info
565 int32 NumInputChannels;
566 int32 NumPostEffectChannels;
567 int32 NumInputFrames;
568
569 uint32 PlayOrder;
570 uint32 ActiveSoundPlayOrder;
571
572 // ID for associated Audio Component if there is one, 0 otherwise
573 uint64 AudioComponentID;
574
575 // Resampler instance
576 FRuntimeResampler Resampler;
577
578 FORCEINLINE void ResetModulators(const Audio::FDeviceId InDeviceId)
579 {
580 VolumeModulation.Init(InDeviceId, FName("Volume"), false /* bInIsBuffered */, true /* bInValueLinear */);
581 PitchModulation.Init(InDeviceId, FName("Pitch"));
582 HighpassModulation.Init(InDeviceId, FName("HPFCutoffFrequency"));
583 LowpassModulation.Init(InDeviceId, FName("LPFCutoffFrequency"));
584
585 VolumeModulationBase = 0.0f;
586 PitchModulationBase = 0.0f;
587 HighpassModulationBase = MIN_FILTER_FREQUENCY;
588 LowpassModulationBase = MAX_FILTER_FREQUENCY;
589 }
590
591 //Helper function for determining if OutputToBusOnly is enabled
592 bool IsRenderingToSubmixes() const;
593
594#if AUDIO_MIXER_ENABLE_DEBUG_MODE
595 uint8 bIsDebugMode : 1;
596 FString DebugName;
597#endif // AUDIO_MIXER_ENABLE_DEBUG_MODE
598 FString GetDebugName() const
599 {
600#if AUDIO_MIXER_ENABLE_DEBUG_MODE
601 return DebugName;
602#else
603 return {};
604#endif //AUDIO_MIXER_ENABLE_DEBUG_MODE
605
606 }
607
608 // return the number of sample frames in the current input PCM buffer (if any)
609 int32 GetCurrentAudioChunkNumFrames() const
610 {
611 if (CurrentPCMBuffer)
612 {
613 check(NumInputChannels != 0);
614 return CurrentPCMBuffer->Num() / NumInputChannels;
615 }
616 else
617 {
618 return 0;
619 }
620 }
621
622 virtual void DoRenderStep() override;
623 virtual const TCHAR* GetRenderStepName() override;
624 };
625
626 static void ApplyDistanceAttenuation(FSourceInfo& InSourceInfo, int32 NumSamples);
627 void ComputePluginAudio(FSourceInfo& InSourceInfo, FMixerSourceSubmixOutputBuffer& InSourceSubmixOutputBuffer, int32 SourceId, int32 NumSamples);
628
629 // Hang/crash diagnostics.
630 void DoStallDiagnostics();
631
632 void LogRenderThreadStall();
633 void LogInflightAsyncTasks();
634 void LogCallstacks();
635 void LogCallstack(uint32 InThreadId);
636
637 TSharedRef<FMixerAudioBus> FindOrAddAudioBus(const FAudioBusKey BusKey, const int32 InNumChannels, const bool bIsAutomatic, bool* bOutAlreadyExisted = nullptr);
638
639 // Array of listener transforms
640 TArray<FTransform> ListenerTransforms;
641
642 // Array of source infos.
643 TArray<FSourceInfo> SourceInfos;
644
645 // This array is independent of SourceInfos array to optimize for cache coherency
646 TArray<FMixerSourceSubmixOutputBuffer> SourceSubmixOutputBuffers;
647
648 // Map of bus object Id's to audio bus data.
650 TArray<FAudioBusKey> AudioBusKeys_AudioThread;
651
652 // Array of task data waiting to finished. Processed on audio render thread.
654
655 // General information about sources in source manager accessible from game thread
656 struct FGameThreadInfo
657 {
658 TArray<int32> FreeSourceIndices;
659 TArray<bool> bIsBusy;
660 TArray<bool> bNeedsSpeakerMap;
661 TArray<bool> bIsDebugMode;
662 TArray<bool> bIsUsingHRTFSpatializer;
663#if ENABLE_AUDIO_DEBUG
665#endif // #if ENABLE_AUDIO_DEBUG
666 TArray<float> RelativeRenderCost;
667 TArray<float> ModulationVolume;
668 } GameThreadInfo;
669
670 int32 NumActiveSources;
671 int32 NumTotalSources;
672 int32 NumOutputFrames;
673 int32 NumOutputSamples;
674
675 // Commands queued up to execute
676 FThreadSafeCounter NumCommands;
677
678 uint8 bInitialized : 1;
679 uint8 bUsingSpatializationPlugin : 1;
680 uint8 bUsingSourceDataOverridePlugin : 1;
681
682 // Set to true when the audio source manager should pump the command queue
683 FThreadSafeBool bPumpQueue;
684 std::atomic<uint64> LastPumpCompleteTimeInCycles=0;
685 std::atomic<ESourceManagerRenderThreadPhase> RenderThreadPhase=ESourceManagerRenderThreadPhase::Begin;
686 FRWLock CurrentlyExecutingCmdLock; // R/W slim lock for the currently executing cmd, so we can safely query it.
687 FAudioMixerThreadCommand CurrentlyExecuteingCmd; // Keep this as a member so we can't always peek the executing cmd.
688
689 struct FPendingAudioBusConnection
690 {
692 FPatchVariant PatchVariant;
693 FAudioBusKey AudioBusKey;
694 int32 NumChannels = 0;
695 bool bIsAutomatic = false;
696 uint64 InstanceID = INDEX_NONE;
697 };
698
699 TMpscQueue<FPendingAudioBusConnection> PendingAudioBusConnections;
700
702
703 friend class FMixerSourceVoice;
704 };
705}
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
int Volume
Definition AndroidPlatformMisc.cpp:380
#define FORCEINLINE
Definition AndroidPlatform.h:140
#define check(expr)
Definition AssertionMacros.h:314
#define MIN_FILTER_FREQUENCY
Definition AudioDefines.h:47
#define MAX_FILTER_FREQUENCY
Definition AudioDefines.h:48
ESourceManagerRenderThreadPhase
Definition AudioMixerSourceManager.h:55
#define INVALID_AUDIO_RENDER_THREAD_ID
Definition AudioMixerSourceManager.h:337
EBusSendType
Definition Audio.h:169
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#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
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
#define DECLARE_CYCLE_STAT_EXTERN(CounterName, StatId, GroupId, API)
Definition Stats.h:679
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
void Init()
Definition LockFreeList.h:4
#define UENUM(...)
Definition ObjectMacros.h:749
@ Stop
Definition PrecomputedVolumetricLightmapStreaming.cpp:26
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition AudioRenderScheduler.h:75
Definition EnvelopeFollower.h:323
Definition InterpolatedOnePole.h:82
Definition InterpolatedOnePole.h:11
Definition AudioMixerDevice.h:117
FAudioRenderScheduler & GetRenderScheduler() const
Definition AudioMixerDevice.h:361
Definition AudioMixerSourceManager.h:192
const FQuat GetListenerRotation(const int32 SourceId) const
Definition AudioMixerSourceManager.cpp:3581
void AddPatchInputForAudioBus(FAudioBusKey InAudioBusKey, const FPatchInput &InPatchInput)
Definition AudioMixerSourceManager.cpp:1623
void ClearSubmixSendInfo(const int32 SourceId, const FMixerSourceSubmixSend &SubmixSend)
Definition AudioMixerSourceManager.cpp:2139
void StartAudioBus(FAudioBusKey InAudioBusKey, int32 InNumChannels, bool bInIsAutomatic)
Definition AudioMixerSourceManager.cpp:1501
bool IsAudioBusActive(FAudioBusKey InAudioBusKey) const
Definition AudioMixerSourceManager.cpp:1576
int32 GetNumActiveAudioBuses() const
Definition AudioMixerSourceManager.cpp:1135
void ComputeNextBlockOfSamples()
Definition AudioMixerSourceManager.cpp:3782
void SetSourceBufferListener(const int32 SourceId, FSharedISourceBufferListenerPtr &InSourceBufferListener, bool InShouldSourceBufferListenerZeroBuffer)
Definition AudioMixerSourceManager.cpp:2030
void SetPitch(const int32 SourceId, const float Pitch)
Definition AudioMixerSourceManager.cpp:1812
void SetBusSendInfo(const int32 SourceId, EBusSendType InAudioBusSendType, uint32 AudiobusId, float BusSendLevel, const FString &InBusName)
Definition AudioMixerSourceManager.cpp:2187
void AddPendingAudioBusConnection(FAudioBusKey AudioBusKey, int32 NumChannels, bool bIsAutomatic, FPatchOutputStrongPtr PatchOutputStrongPtr, uint64 InstanceID=INDEX_NONE)
Definition AudioMixerSourceManager.h:326
void ClearStoppingSounds()
Definition AudioMixerSourceManager.cpp:3888
void StopFade(const int32 SourceId, const int32 NumFrames)
Definition AudioMixerSourceManager.cpp:1749
void UpdateDeviceChannelCount(const int32 InNumOutputChannels)
Definition AudioMixerSourceManager.cpp:3587
void UnPauseSoundForQuantizationCommand(const int32 SourceId)
Definition AudioMixerSourceManager.cpp:3715
void FlushCommandQueue(bool bPumpCommandQueue=false)
Definition AudioMixerSourceManager.cpp:4077
void SetModPitch(const int32 SourceId, const float InModPitch)
Definition AudioMixerSourceManager.cpp:2061
void SetSubmixSendInfo(const int32 SourceId, const FMixerSourceSubmixSend &SubmixSend)
Definition AudioMixerSourceManager.cpp:2076
float GetVolumeModulationValue(const int32 SourceId) const
Definition AudioMixerSourceManager.cpp:2263
const TArray< FTransform > * GetListenerTransforms() const
Definition AudioMixerSourceManager.cpp:2245
void AddPatchOutputForAudioBus(FAudioBusKey InAudioBusKey, const FPatchOutputStrongPtr &InPatchOutputStrongPtr)
Definition AudioMixerSourceManager.cpp:1594
int32 GetAudioBusNumChannels(FAudioBusKey InAudioBusKey) const
Definition AudioMixerSourceManager.cpp:1582
int64 GetNumFramesPlayed(const int32 SourceId) const
Definition AudioMixerSourceManager.cpp:2251
bool GetFreeSourceId(int32 &OutSourceId)
Definition AudioMixerSourceManager.cpp:1108
void StopAudioBus(FAudioBusKey InAudioBusKey)
Definition AudioMixerSourceManager.cpp:1539
void CancelQuantizedSound(const int32 SourceId)
Definition AudioMixerSourceManager.cpp:1675
void SetChannelMap(const int32 SourceId, const uint32 NumInputChannels, const Audio::FAlignedFloatBuffer &InChannelMap, const bool bInIs3D, const bool bInIsCenterChannelOnly)
Definition AudioMixerSourceManager.cpp:1888
float GetEnvelopeValue(const int32 SourceId) const
Definition AudioMixerSourceManager.cpp:2257
void SetListenerTransforms(const TArray< FTransform > &ListenerTransforms)
Definition AudioMixerSourceManager.cpp:2237
void SetDistanceAttenuation(const int32 SourceId, const float DistanceAttenuation)
Definition AudioMixerSourceManager.cpp:1853
void UpdateSourceEffectChain(const uint32 SourceEffectChainId, const TArray< FSourceEffectChainEntry > &SourceEffectChain, const bool bPlayEffectChainTails)
Definition AudioMixerSourceManager.cpp:3629
bool IsSourceBus(const int32 SourceId) const
Definition AudioMixerSourceManager.cpp:3777
void SetModLPFFrequency(const int32 SourceId, const float InModFrequency)
Definition AudioMixerSourceManager.cpp:1958
void SetModulationRouting(const int32 SourceId, FSoundModulationDefaultSettings &ModulationSettings)
Definition AudioMixerSourceManager.cpp:1990
bool IsUsingHRTFSpatializer(const int32 SourceId) const
Definition AudioMixerSourceManager.cpp:2283
const float * GetPreDistanceAttenuationBuffer(const int32 SourceId) const
Definition AudioMixerSourceManager.cpp:3728
void RenderSource(const int32 SourceId)
Definition AudioMixerSourceManager.cpp:3548
void AudioMixerThreadMPSCCommand(TFunction< void()> &&InCommand, const char *InDebugString=nullptr)
Definition AudioMixerSourceManager.cpp:3908
void Get2DChannelMap(const int32 SourceId, int32 InNumOutputChannels, Audio::FAlignedFloatBuffer &OutChannelMap)
Definition AudioMixerSourceManager.cpp:3556
void MixOutputBuffers(const int32 SourceId, int32 InNumOutputChannels, const float InSendLevel, EMixerSourceSubmixSendStage InSubmixSendStage, FAlignedFloatBuffer &OutWetBuffer) const
Definition AudioMixerSourceManager.cpp:3533
int32 GetNumOutputFrames() const
Definition AudioMixerSourceManager.h:312
void AddPatchInputForAudioBus_AudioThread(FAudioBusKey InAudioBusKey, const FPatchInput &InPatchInput)
Definition AudioMixerSourceManager.cpp:1644
const float * GetPreviousSourceBusBuffer(const int32 SourceId) const
Definition AudioMixerSourceManager.cpp:3752
bool NeedsSpeakerMap(const int32 SourceId) const
Definition AudioMixerSourceManager.cpp:2289
void SetLPFFrequency(const int32 SourceId, const float Frequency)
Definition AudioMixerSourceManager.cpp:1919
void SetHPFFrequency(const int32 SourceId, const float Frequency)
Definition AudioMixerSourceManager.cpp:1939
const float * GetPreEffectBuffer(const int32 SourceId) const
Definition AudioMixerSourceManager.cpp:3740
void InitSource(const int32 SourceId, const FMixerSourceVoiceInitParams &InitParams)
Definition AudioMixerSourceManager.cpp:1140
const ISoundfieldAudioPacket * GetEncodedOutput(const int32 SourceId, const FSoundfieldEncodingKey &InKey) const
Definition AudioMixerSourceManager.cpp:3565
void ReleaseSourceId(const int32 SourceId)
Definition AudioMixerSourceManager.cpp:1463
void PumpCommandQueue()
Definition AudioMixerSourceManager.cpp:3992
void StopInternal(const int32 SourceId)
Definition AudioMixerSourceManager.cpp:1728
void SetModHPFFrequency(const int32 SourceId, const float InModFrequency)
Definition AudioMixerSourceManager.cpp:1974
float GetRelativeRenderCost(const int32 SourceId) const
Definition AudioMixerSourceManager.cpp:2278
int32 GetNumActiveSources() const
Definition AudioMixerSourceManager.cpp:1130
void UpdateSourceState()
Definition AudioMixerSourceManager.cpp:3854
void SetVolume(const int32 SourceId, const float Volume)
Definition AudioMixerSourceManager.cpp:1826
int32 GetNumChannels(const int32 SourceId) const
Definition AudioMixerSourceManager.cpp:3772
void SetSubBufferDelayForSound(const int32 SourceId, const int32 FramesToDelay)
Definition AudioMixerSourceManager.cpp:3705
FAudioRenderScheduler & GetRenderScheduler() const
Definition AudioMixerSourceManager.h:331
void AddPendingAudioBusConnection(FAudioBusKey AudioBusKey, int32 NumChannels, bool bIsAutomatic, FPatchInput PatchInput, uint64 InstanceID=INDEX_NONE)
Definition AudioMixerSourceManager.h:321
void AddPatchOutputForAudioBus_AudioThread(FAudioBusKey InAudioBusKey, const FPatchOutputStrongPtr &InPatchOutputStrongPtr)
Definition AudioMixerSourceManager.cpp:1615
~FMixerSourceManager()
Definition AudioMixerSourceManager.cpp:430
const float * GetPreviousAudioBusBuffer(const int32 AudioBusId) const
Definition AudioMixerSourceManager.cpp:3761
void SetSpatializationParams(const int32 SourceId, const FSpatializationParams &InParams)
Definition AudioMixerSourceManager.cpp:1874
void PauseSoundForQuantizationCommand(const int32 SourceId)
Definition AudioMixerSourceManager.cpp:3694
void SetModVolume(const int32 SourceId, const float InModVolume)
Definition AudioMixerSourceManager.cpp:2046
Definition AudioMixerSourceVoice.h:20
Definition MultithreadedPatching.h:96
Definition AudioMixerSourceManager.h:84
virtual void OnLoopEnd()=0
virtual ~ISourceListener()=default
virtual void OnEffectTailsDone()=0
virtual void OnBeginGenerate()=0
virtual void OnDone()=0
Definition Dsp.h:834
Definition Event.h:21
Definition NameTypes.h:617
Definition ThreadSafeBool.h:17
Definition ThreadSafeCounter.h:14
EConnectionType
Definition TraceAuxiliary.h:78
Definition IAudioLinkFactory.h:21
Definition IConsoleManager.h:558
Definition ISoundfieldFormat.h:137
Definition ISoundfieldFormat.h:254
Definition Array.h:670
Definition AndroidPlatformMisc.h:14
Definition UnrealString.h.inl:34
Definition MpscQueue.h:18
void Enqueue(ArgTypes &&... Args)
Definition MpscQueue.h:49
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition CriticalSection.h:14
Definition IAudioExtensionPlugin.h:483
Definition IAudioExtensionPlugin.h:598
Definition IAudioExtensionPlugin.h:398
Definition IAudioExtensionPlugin.h:185
NO_LOGGING.
Definition AudioMixerPlatformAndroid.cpp:53
EMixerSourceSubmixSendStage
Definition AudioMixerSubmix.h:65
@ PostDistanceAttenuation
Definition AudioMixerSubmix.h:67
uint32 FDeviceId
Definition AudioDefines.h:66
IMAGECORE_API int NumChannels(Type Format)
Definition ImageCore.cpp:1452
Definition AudioBusSubsystem.h:22
Definition AudioMixerSourceManager.h:123
uint32 AudioBusId
Definition AudioMixerSourceManager.h:124
int32 BusChannels
Definition AudioMixerSourceManager.h:126
float SendLevel
Definition AudioMixerSourceManager.h:125
Definition AudioMixerSourceManager.h:103
EMixerSourceSubmixSendStage SubmixSendStage
Definition AudioMixerSourceManager.h:114
float SendLevel
Definition AudioMixerSourceManager.h:108
bool bIsMainSend
Definition AudioMixerSourceManager.h:111
FMixerSubmixWeakPtr Submix
Definition AudioMixerSourceManager.h:105
ISoundfieldFactory * SoundfieldFactory
Definition AudioMixerSourceManager.h:118
Definition AudioMixerSourceManager.h:133
bool bIs3D
Definition AudioMixerSourceManager.h:168
int32 NumInputFrames
Definition AudioMixerSourceManager.h:149
TArray< FInitAudioBusSend > AudioBusSends[(int32) EBusSendType::Count]
Definition AudioMixerSourceManager.h:137
FQuartzQuantizedRequestData QuantizedRequestData
Definition AudioMixerSourceManager.h:160
UReverbPluginSourceSettingsBase * ReverbPluginSettings
Definition AudioMixerSourceManager.h:155
FName AudioComponentUserID
Definition AudioMixerSourceManager.h:166
bool bUseHRTFSpatialization
Definition AudioMixerSourceManager.h:170
FSharedISourceBufferListenerPtr SourceBufferListener
Definition AudioMixerSourceManager.h:162
UOcclusionPluginSourceSettingsBase * OcclusionPluginSettings
Definition AudioMixerSourceManager.h:154
TArray< FSourceEffectChainEntry > SourceEffectChain
Definition AudioMixerSourceManager.h:145
bool bShouldSourceBufferListenerZeroBuffer
Definition AudioMixerSourceManager.h:179
bool bEnableBusSends
Definition AudioMixerSourceManager.h:173
bool bEnableSubmixSends
Definition AudioMixerSourceManager.h:175
bool bEnableBaseSubmix
Definition AudioMixerSourceManager.h:174
uint32 AudioBusId
Definition AudioMixerSourceManager.h:138
float EnvelopeFollowerAttackTime
Definition AudioMixerSourceManager.h:150
int32 NumInputChannels
Definition AudioMixerSourceManager.h:148
uint64 AudioComponentID
Definition AudioMixerSourceManager.h:167
USourceDataOverridePluginSourceSettingsBase * SourceDataOverridePluginSettings
Definition AudioMixerSourceManager.h:156
uint32 PlayOrder
Definition AudioMixerSourceManager.h:181
IAudioLinkFactory::FAudioLinkSourcePushedSharedPtr AudioLink
Definition AudioMixerSourceManager.h:164
TSharedPtr< FMixerSourceBuffer, ESPMode::ThreadSafe > MixerSourceBuffer
Definition AudioMixerSourceManager.h:134
bool bIsSeeking
Definition AudioMixerSourceManager.h:178
FMixerSourceVoice * SourceVoice
Definition AudioMixerSourceManager.h:147
int32 AudioBusChannels
Definition AudioMixerSourceManager.h:139
TArray< FMixerSourceSubmixSend > SubmixSends
Definition AudioMixerSourceManager.h:136
bool bIsDebugMode
Definition AudioMixerSourceManager.h:172
bool bIsSoundfield
Definition AudioMixerSourceManager.h:177
bool bIsVorbis
Definition AudioMixerSourceManager.h:176
float EnvelopeFollowerReleaseTime
Definition AudioMixerSourceManager.h:151
bool bIsExternalSend
Definition AudioMixerSourceManager.h:171
uint32 SourceEffectChainId
Definition AudioMixerSourceManager.h:144
int32 SourceEffectChainMaxSupportedChannels
Definition AudioMixerSourceManager.h:146
USpatializationPluginSourceSettingsBase * SpatializationPluginSettings
Definition AudioMixerSourceManager.h:153
bool bPlayEffectChainTails
Definition AudioMixerSourceManager.h:169
float SourceBusDuration
Definition AudioMixerSourceManager.h:143
FString DebugName
Definition AudioMixerSourceManager.h:152
uint32 ActiveSoundPlayOrder
Definition AudioMixerSourceManager.h:182
FSoundModulationDefaultSettings ModulationSettings
Definition AudioMixerSourceManager.h:158
ISourceListener * SourceListener
Definition AudioMixerSourceManager.h:135
Definition SoundModulationDestination.h:161
ENGINE_API void Init(FDeviceId InDeviceId, bool bInIsBuffered=false, bool bInValueNormalized=false)
Definition SoundModulationDestination.cpp:132
Definition QuartzQuantizationUtilities.h:543
Definition AudioMixerSourceManager.h:186
int32 NumSources
Definition AudioMixerSourceManager.h:188
Definition IAudioExtensionPlugin.h:177
Definition SoundEffectSource.h:79
Definition SoundEffectSource.h:98
Definition SoundModulationDestination.h:103
Definition ISoundfieldFormat.h:429
Definition IAudioExtensionPlugin.h:69
Definition TVariant.h:13