26#if UE_AUDIO_PROFILERTRACE_ENABLED
30#include "AudioMixerSourceManager.generated.h"
33#ifndef WITH_AUDIO_MIXER_THREAD_COMMAND_DEBUG
34 #define WITH_AUDIO_MIXER_THREAD_COMMAND_DEBUG (1)
78 class FMixerSourceVoice;
79 class FMixerSourceBuffer;
80 class ISourceListener;
81 class FMixerSourceSubmixOutputBuffer;
127#if ENABLE_AUDIO_DEBUG
140#if ENABLE_AUDIO_DEBUG
198 void Update(
bool bTimedOut =
false);
208 UE_DEPRECATED(5.6,
"Use the StartAudioBus version that requires an AudioBus name.")
267#if ENABLE_AUDIO_DEBUG
337#define INVALID_AUDIO_RENDER_THREAD_ID static_cast<uint32>(-1)
339 void ReleaseSource(
const int32 SourceId);
341 void ResetSourceEffectChain(
const int32 SourceId);
342 void ReadSourceFrame(
const int32 SourceId);
351 void ConnectBusPatches();
354 void AddBusPatchDependency(
const uint64 InstanceID,
const FAudioRenderStepId
FirstStep,
const FAudioRenderStepId
SecondStep);
355 void RemoveBusPatchDependencies(
const uint64 InstanceID);
357 float GetFloatCompareTolerance()
const;
358 float GetCommandQueueFillPercentage()
const;
360 struct FAudioMixerThreadCommand
363 FAudioMixerThreadCommand() =
default;
367 void operator()()
const;
375 bool bDeferExecution =
false;
377#if WITH_AUDIO_MIXER_THREAD_COMMAND_DEBUG
378 const char* DebugString=
nullptr;
379 mutable uint64_t StartExecuteTimeInCycles=0;
382 FString GetSafeDebugString()
const;
383 float GetExecuteTimeInSeconds()
const;
388#if UE_AUDIO_PROFILERTRACE_ENABLED
407 FMixerDevice* MixerDevice;
427 FCommands CommandBuffers[2];
430 FEvent* CommandsProcessedEvent;
435 using FAudioMixerMpscCommand = FAudioMixerThreadCommand;
438 struct FSourceInfo :
public IAudioMixerRenderStep
440 FSourceInfo() : Resampler(1 ) {}
444 FMixerSourceManager* SourceManager;
448 ISourceListener* SourceListener;
460 int32 SubCallbackDelayLengthInFrames{ 0 };
465 float CurrentFrameAlpha;
466 int32 CurrentFrameIndex;
467 int64 NumFramesPlayed;
475 int64 SourceBusDurationFrames;
481 FParam PitchSourceParam;
482 float VolumeSourceStart;
483 float VolumeSourceDestination;
484 float VolumeFadeSlope;
485 float VolumeFadeStart;
486 int32 VolumeFadeFramePosition;
487 int32 VolumeFadeNumFrames;
489 float DistanceAttenuationSourceStart;
490 float DistanceAttenuationSourceDestination;
501 uint32 SourceEffectChainId;
504 bool bEffectTailsDone;
511 float SourceEnvelopeValue;
520 float VolumeModulationBase;
521 float PitchModulationBase;
522 float LowpassModulationBase;
523 float HighpassModulationBase;
529 FQuartzQuantizedCommandHandle QuantizedCommandHandle;
539 uint8 bIsCenterChannelOnly:1;
543 uint8 bIsPausedForQuantization:1;
544 uint8 bDelayLineSet:1;
548 uint8 bUseHRTFSpatializer:1;
549 uint8 bIsExternalSend:1;
550 uint8 bUseOcclusionPlugin:1;
551 uint8 bUseReverbPlugin:1;
553 uint8 bIsLastBuffer:1;
554 uint8 bEnableBusSends : 1;
555 uint8 bEnableBaseSubmix : 1;
556 uint8 bEnableSubmixSends : 1;
558 uint8 bIsSoundfield:1;
559 uint8 bHasPreDistanceAttenuationSend:1;
560 uint8 bModFiltersUpdated : 1;
561 uint8 bShouldSourceBufferListenerZeroBuffer : 1;
562 uint8 bResampling : 1;
565 int32 NumInputChannels;
566 int32 NumPostEffectChannels;
567 int32 NumInputFrames;
570 uint32 ActiveSoundPlayOrder;
576 FRuntimeResampler Resampler;
585 VolumeModulationBase = 0.0f;
586 PitchModulationBase = 0.0f;
592 bool IsRenderingToSubmixes()
const;
594#if AUDIO_MIXER_ENABLE_DEBUG_MODE
595 uint8 bIsDebugMode : 1;
598 FString GetDebugName()
const
600#if AUDIO_MIXER_ENABLE_DEBUG_MODE
609 int32 GetCurrentAudioChunkNumFrames()
const
611 if (CurrentPCMBuffer)
613 check(NumInputChannels != 0);
614 return CurrentPCMBuffer->Num() / NumInputChannels;
622 virtual void DoRenderStep()
override;
623 virtual const TCHAR* GetRenderStepName()
override;
626 static void ApplyDistanceAttenuation(FSourceInfo&
InSourceInfo,
int32 NumSamples);
630 void DoStallDiagnostics();
632 void LogRenderThreadStall();
633 void LogInflightAsyncTasks();
634 void LogCallstacks();
656 struct FGameThreadInfo
663#if ENABLE_AUDIO_DEBUG
670 int32 NumActiveSources;
671 int32 NumTotalSources;
672 int32 NumOutputFrames;
673 int32 NumOutputSamples;
678 uint8 bInitialized : 1;
679 uint8 bUsingSpatializationPlugin : 1;
680 uint8 bUsingSourceDataOverridePlugin : 1;
684 std::atomic<uint64> LastPumpCompleteTimeInCycles=0;
686 FRWLock CurrentlyExecutingCmdLock;
687 FAudioMixerThreadCommand CurrentlyExecuteingCmd;
689 struct FPendingAudioBusConnection
692 FPatchVariant PatchVariant;
693 FAudioBusKey AudioBusKey;
695 bool bIsAutomatic =
false;
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#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
@ UpdatePendingReleaseData
@ SpatialInterface_OnAllSourcesProcessed
@ GenerateSrcAudio_WithoutBusses
@ SourceDataOverride_OnAllSourcesProcessed
@ RunScheduledRenderSteps
@ GenerateSrcAudio_WithBusses
#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 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
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 AudioMixerSourceManager.h:84
virtual void OnLoopEnd()=0
virtual ~ISourceListener()=default
virtual void OnEffectTailsDone()=0
virtual void OnBeginGenerate()=0
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 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 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
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 AudioDevice.h:2002
Definition IAudioExtensionPlugin.h:177
Definition SoundEffectSource.h:79
Definition SoundModulationDestination.h:103
Definition ISoundfieldFormat.h:429
Definition IAudioExtensionPlugin.h:69