UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
IAudioExtensionPlugin.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "CoreMinimal.h"
7#include "ISoundfieldFormat.h"
8#include "Math/Interval.h"
12#include "AudioDefines.h"
14
15#include "IAudioExtensionPlugin.generated.h"
16
17// Forward Declarations
18class FAudioDevice;
22struct FWaveInstance;
24class IAudioOcclusion;
26class IAudioReverb;
29class USoundSubmix;
30
32// Convenience macro for Audio_SpatializationPlugins LLM scope to avoid misspells.
33#define AUDIO_SPATIALIZATION_PLUGIN_LLM_SCOPE LLM_SCOPE_BYTAG(Audio_SpatializationPlugins);
34
39enum class EAudioPlugin : uint8
40{
42 REVERB = 1,
43 OCCLUSION = 2,
44 MODULATION = 3,
46
47 COUNT = 5
48};
49
50
51// Deprecated in favor of TSoundEffectSubmixPtr
53
63
125
127{
128 //Maximum number of sources that can play simultaneously.
130
131 //Number of output channels.
133
134 //Sample rate.
136
137 //Buffer length used for each callback.
139
140 //Pointer to audio device owning this audio plugin.
141 //IMPORTANT: This will be deprecated once the AudioMixer
142 // is taken out of the experimental branch.
144
146 : NumSources(0)
148 , SampleRate(0)
149 , BufferLength(0)
150 , AudioDevicePtr(nullptr)
151 {}
152
153};
154
156{
157 // The index of the source voice. Guaranteed to be between 0 and the max number of sources rendered.
159
160 // The ID of the audio component associated with the wave instance.
162
163 // The audio input buffer
165
166 // Number of channels of the source audio buffer.
168
169 // The listener orientation.
171
172 // Spatialization parameters.
174};
175
177{
178 // The audio output buffer
180};
181
183UCLASS(config = Engine, abstract, editinlinenew, BlueprintType, MinimalAPI)
188
189/************************************************************************/
190/* IAudioPluginFactory */
191/* This interface is inherited by spatialization, reverb and occlusion */
192/* plugins to describe specifics of a plugin such as platform support, */
193/* and display names. */
194/************************************************************************/
196{
197public:
198 /*
199 * Returns human-readable string representing the display name of this plugin.
200 * This is the name that will be used in settings and .ini files.
201 * If multiple IAudioPlugin implementations are found that return identical strings here,
202 * The first one of these loaded will be used.
203 *
204 * @return FString of the display name of this plugin.
205 */
206 virtual FString GetDisplayName()
207 {
208 static FString DisplayName = FString(TEXT("Generic Audio Plugin"));
209 return DisplayName;
210 }
211
212 /*
213 * Returns whether this plugin supports use on the specified platform.
214 * @param Platform an enumerated platform (i.e. Windows, Playstation4, etc.)
215 * @return true if this plugin supports use on Platform, false otherwise.
216 */
217 virtual bool SupportsPlatform(const FString& PlatformName) = 0;
218
219 /*
220 * Returns whether this plugin sends audio to an external renderer.
221 * if this returns true, the audio engine will not mix the result of the audio process callback
222 * from the plugin into the audio output.
223 *
224 * @return true only if the plugin will handle sending audio to the DAC itself.
225 */
226 virtual bool IsExternalSend()
227 {
228 return false;
229 }
230
231 /*
232 * @return true if the plugin returns from its external submix to a submix in the plugin.
233 */
234 virtual bool ReturnsToSubmixGraph() const
235 {
236 return false;
237 }
238};
239
240/************************************************************************/
241/* IAudioSpatializationFactory */
242/* Implement this modular feature to make your Spatialization plugin */
243/* visible to the engine. */
244/************************************************************************/
246{
247public:
250 {
251 }
252
253 // IModularFeature
255 {
256 static FName AudioExtFeatureName = FName(TEXT("AudioSpatializationPlugin"));
257 return AudioExtFeatureName;
258 }
259
260 /* Begin IAudioPluginWithMetadata implementation */
261 virtual FString GetDisplayName() override
262 {
263 static FString DisplayName = FString(TEXT("Generic Audio Spatialization Plugin"));
264 return DisplayName;
265 }
266 /* End IAudioPluginWithMetadata implementation */
267
273 {
274 return 1;
275 }
276
281
286 {
287 return nullptr;
288 }
289};
290
301{
302public:
305 {
306 }
307
312 virtual void Shutdown()
313 {
314 }
315
316 virtual void OnDeviceShutdown(FAudioDevice* AudioDevice)
317 {
318 }
319
321 virtual void SetSpatializationParameters(uint32 SourceId, const FSpatializationParams& Params)
322 {
323 }
324
329
331 virtual void InitializeSpatializationEffect(uint32 BufferLength)
332 {
333 }
334
336 virtual void ProcessSpatializationForVoice(uint32 SourceId, float* InSamples, float* OutSamples, const FVector& Position)
337 {
338 }
339
341 virtual void ProcessSpatializationForVoice(uint32 SourceId, float* InSamples, float* OutSamples)
342 {
343 }
344
349
351 {
353 }
354
356 virtual void OnReleaseSource(const uint32 SourceId)
357 {
358 }
359
362 {
363 }
364
367 {
368 }
369
372 {
373 return false;
374 }
375
380
382 virtual bool CreateSpatializationEffect(uint32 SourceId)
383 {
384 return true;
385 }
386
388 virtual void* GetSpatializationEffect(uint32 SourceId)
389 {
390 return nullptr;
391 }
392};
393
394
396UCLASS(config = Engine, abstract, editinlinenew, BlueprintType, MinimalAPI)
401
402/************************************************************************/
403/* IAudioSourceDataOverrideFactory */
404/* Implement this modular feature to make your SourceDataOverride plugin*/
405/* visible to the engine. */
406/************************************************************************/
408{
409public:
412 {
413 }
414
415 // IModularFeature
417 {
418 static FName AudioExtFeatureName = FName(TEXT("AudioSourceDataOverridePlugin"));
419 return AudioExtFeatureName;
420 }
421
422 /* Begin IAudioPluginWithMetadata implementation */
423 virtual FString GetDisplayName() override
424 {
425 static FString DisplayName = FString(TEXT("Generic Audio Source Data Override Plugin"));
426 return DisplayName;
427 }
428 /* End IAudioPluginWithMetadata implementation */
429
434 {
435 return nullptr;
436 }
437
442};
443
444
447{
448public:
451 {
452 }
453
458
463
465 virtual void OnReleaseSource(const uint32 SourceId)
466 {
467 }
468
473
476 {
477 }
478};
479
481UCLASS(config = Engine, abstract, editinlinenew, BlueprintType, MinimalAPI)
486
487/************************************************************************/
488/* IAudioOcclusionFactory */
489/* */
490/************************************************************************/
492{
493public:
496 {
497 }
498
499 // IModularFeature
501 {
502 static FName AudioExtFeatureName = FName(TEXT("AudioOcclusionPlugin"));
503 return AudioExtFeatureName;
504 }
505
506 /* Begin IAudioPluginWithMetadata implementation */
507 virtual FString GetDisplayName() override
508 {
509 static FString DisplayName = FString(TEXT("Generic Audio Occlusion Plugin"));
510 return DisplayName;
511 }
512 /* End IAudioPluginWithMetadata implementation */
513
515
520 {
521 return nullptr;
522 }
523};
524
526{
527public:
530 {
531 }
532
537
542 virtual void Shutdown()
543 {
544 }
545
547 virtual void OnInitSource(const uint32 SourceId, const FName& AudioComponentUserId, const uint32 NumChannels, UOcclusionPluginSourceSettingsBase* InSettings)
548 {
549 }
550
552 virtual void OnReleaseSource(const uint32 SourceId)
553 {
554 }
555
558 {
559 }
560};
561
562/************************************************************************/
563/* IAudioModulationFactory */
564/* */
565/************************************************************************/
567{
568public:
571 {
572 }
573
574 // IModularFeature
576 {
577 static FName AudioExtFeatureName = FName(TEXT("AudioModulationPlugin"));
578 return AudioExtFeatureName;
579 }
580
581 virtual const FName& GetDisplayName() const = 0;
582
584
589 {
590 return nullptr;
591 }
592};
593
594
596UCLASS(config = Engine, abstract, editinlinenew, BlueprintType, MinimalAPI)
601
603{
604public:
607 {
608 }
609
610 // IModularFeature
612 {
613 static FName AudioExtFeatureName = FName(TEXT("AudioReverbPlugin"));
614 return AudioExtFeatureName;
615 }
616
617 /* Begin IAudioPluginWithMetadata implementation */
618 virtual FString GetDisplayName() override
619 {
620 static FString DisplayName = FString(TEXT("Generic Audio Reverb Plugin"));
621 return DisplayName;
622 }
623 /* End IAudioPluginWithMetadata implementation */
624
626
631 {
632 return nullptr;
633 }
634};
635
637{
638public:
641 {
642 }
643
648
653 virtual void Shutdown()
654 {
655 }
656
657 virtual void OnDeviceShutdown(FAudioDevice* AudioDevice)
658 {
659 }
660
662 virtual void OnInitSource(const uint32 SourceId, const FName& AudioComponentUserId, const uint32 NumChannels, UReverbPluginSourceSettingsBase* InSettings) = 0;
663
665 virtual void OnReleaseSource(const uint32 SourceId) = 0;
666
669
671 {
672 return GetSubmix();
673 }
674
676 virtual USoundSubmix* GetSubmix() = 0;
677
680 {
681 }
682};
683
684/************************************************************************/
685/* IAudioPluginListener */
686/* Implementations of this interface can receive updates about the */
687/* audio listener's position in the game world, as well as other data. */
688/* to use this, register a ListenerObserver to an audio device using */
689/* FAudioDevice::RegisterPluginListener(). */
690/************************************************************************/
692{
693public:
695 {
696 }
697
698 virtual void OnDeviceShutdown(FAudioDevice* AudioDevice)
699 {
700 }
701
702 //This function is called when a game world initializes a listener with an audio device this
703 //IAudioPluginListener is registered to. Please note that it is possible to miss this event
704 //if you register this IAudioPluginListener after the listener is initialized.
706 {
707 }
708
709 // This is overridable for any actions a plugin manager may need to do on the game thread.
710 virtual void OnTick(UWorld* InWorld, const int32 ViewportIndex, const FTransform& ListenerTransform, const float InDeltaSeconds)
711 {
712 }
713
714 // This is overridable for any actions a plugin manager may need to do on a level change.
715 virtual void OnWorldChanged(FAudioDevice* AudioDevice, UWorld* InWorld)
716 {
717 }
718
719 // Called when the listener is updated on the given audio device.
720 virtual void OnListenerUpdated(FAudioDevice* AudioDevice, const int32 ViewportIndex, const FTransform& ListenerTransform, const float InDeltaSeconds)
721 {
722 }
723
724 //Called when the listener is shutdown.
725 virtual void OnListenerShutdown(FAudioDevice* AudioDevice)
726 {
727 }
728};
#define TEXT(x)
Definition Platform.h:1272
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
EAudioPlugin
Definition IAudioExtensionPlugin.h:40
#define LLM_DECLARE_TAG_API(...)
Definition LowLevelMemTracker.h:1117
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UCLASS(...)
Definition ObjectMacros.h:776
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Engine.Build.cs:7
Definition AudioDevice.h:417
Definition NameTypes.h:617
Definition SoundEffectBase.h:72
Definition SoundEffectSource.h:119
Definition SoundEffectSubmix.h:86
Definition IAudioExtensionPlugin.h:567
virtual ~IAudioModulationFactory()
Definition IAudioExtensionPlugin.h:570
static FName GetModularFeatureName()
Definition IAudioExtensionPlugin.h:575
virtual const FName & GetDisplayName() const =0
virtual TAudioModulationPtr CreateNewModulationPlugin(FAudioDevice *OwningDevice)=0
virtual UClass * GetCustomModulationSettingsClass() const
Definition IAudioExtensionPlugin.h:588
Definition IAudioModulation.h:177
Definition IAudioExtensionPlugin.h:492
virtual TAudioOcclusionPtr CreateNewOcclusionPlugin(FAudioDevice *OwningDevice)=0
virtual UClass * GetCustomOcclusionSettingsClass() const
Definition IAudioExtensionPlugin.h:519
virtual FString GetDisplayName() override
Definition IAudioExtensionPlugin.h:507
virtual ~IAudioOcclusionFactory()
Definition IAudioExtensionPlugin.h:495
static FName GetModularFeatureName()
Definition IAudioExtensionPlugin.h:500
Definition IAudioExtensionPlugin.h:526
virtual void ProcessAudio(const FAudioPluginSourceInputData &InputData, FAudioPluginSourceOutputData &OutputData)
Definition IAudioExtensionPlugin.h:557
virtual void Initialize(const FAudioPluginInitializationParams InitializationParams)
Definition IAudioExtensionPlugin.h:534
virtual void OnInitSource(const uint32 SourceId, const FName &AudioComponentUserId, const uint32 NumChannels, UOcclusionPluginSourceSettingsBase *InSettings)
Definition IAudioExtensionPlugin.h:547
virtual void OnReleaseSource(const uint32 SourceId)
Definition IAudioExtensionPlugin.h:552
virtual void Shutdown()
Definition IAudioExtensionPlugin.h:542
virtual ~IAudioOcclusion()
Definition IAudioExtensionPlugin.h:529
Definition IAudioExtensionPlugin.h:196
virtual FString GetDisplayName()
Definition IAudioExtensionPlugin.h:206
virtual bool SupportsPlatform(const FString &PlatformName)=0
virtual bool ReturnsToSubmixGraph() const
Definition IAudioExtensionPlugin.h:234
virtual bool IsExternalSend()
Definition IAudioExtensionPlugin.h:226
Definition IAudioExtensionPlugin.h:692
virtual void OnListenerShutdown(FAudioDevice *AudioDevice)
Definition IAudioExtensionPlugin.h:725
virtual void OnListenerUpdated(FAudioDevice *AudioDevice, const int32 ViewportIndex, const FTransform &ListenerTransform, const float InDeltaSeconds)
Definition IAudioExtensionPlugin.h:720
virtual void OnTick(UWorld *InWorld, const int32 ViewportIndex, const FTransform &ListenerTransform, const float InDeltaSeconds)
Definition IAudioExtensionPlugin.h:710
virtual void OnWorldChanged(FAudioDevice *AudioDevice, UWorld *InWorld)
Definition IAudioExtensionPlugin.h:715
virtual void OnListenerInitialize(FAudioDevice *AudioDevice, UWorld *ListenerWorld)
Definition IAudioExtensionPlugin.h:705
virtual ~IAudioPluginListener()
Definition IAudioExtensionPlugin.h:694
virtual void OnDeviceShutdown(FAudioDevice *AudioDevice)
Definition IAudioExtensionPlugin.h:698
Definition IAudioExtensionPlugin.h:603
virtual TAudioReverbPtr CreateNewReverbPlugin(FAudioDevice *OwningDevice)=0
static FName GetModularFeatureName()
Definition IAudioExtensionPlugin.h:611
virtual FString GetDisplayName() override
Definition IAudioExtensionPlugin.h:618
virtual ~IAudioReverbFactory()
Definition IAudioExtensionPlugin.h:606
virtual UClass * GetCustomReverbSettingsClass() const
Definition IAudioExtensionPlugin.h:630
Definition IAudioExtensionPlugin.h:637
virtual void OnDeviceShutdown(FAudioDevice *AudioDevice)
Definition IAudioExtensionPlugin.h:657
virtual USoundSubmix * GetSubmix()=0
virtual void ProcessSourceAudio(const FAudioPluginSourceInputData &InputData, FAudioPluginSourceOutputData &OutputData)
Definition IAudioExtensionPlugin.h:679
virtual ~IAudioReverb()
Definition IAudioExtensionPlugin.h:640
virtual void Shutdown()
Definition IAudioExtensionPlugin.h:653
virtual void Initialize(const FAudioPluginInitializationParams InitializationParams)
Definition IAudioExtensionPlugin.h:645
virtual void OnReleaseSource(const uint32 SourceId)=0
virtual void OnInitSource(const uint32 SourceId, const FName &AudioComponentUserId, const uint32 NumChannels, UReverbPluginSourceSettingsBase *InSettings)=0
virtual FSoundEffectSubmixPtr GetEffectSubmix()=0
virtual USoundSubmix * LoadSubmix()
Definition IAudioExtensionPlugin.h:670
Definition IAudioExtensionPlugin.h:408
virtual UClass * GetCustomSourceDataOverrideSettingsClass() const
Definition IAudioExtensionPlugin.h:433
virtual TAudioSourceDataOverridePtr CreateNewSourceDataOverridePlugin(FAudioDevice *OwningDevice)=0
virtual ~IAudioSourceDataOverrideFactory()
Definition IAudioExtensionPlugin.h:411
virtual FString GetDisplayName() override
Definition IAudioExtensionPlugin.h:423
static FName GetModularFeatureName()
Definition IAudioExtensionPlugin.h:416
Definition IAudioExtensionPlugin.h:447
virtual void GetSourceDataOverrides(const uint32 SourceId, const FTransform &InListenerTransform, FWaveInstance *InOutWaveInstance)
Definition IAudioExtensionPlugin.h:470
virtual ~IAudioSourceDataOverride()
Definition IAudioExtensionPlugin.h:450
virtual void Initialize(const FAudioPluginInitializationParams InitializationParams)
Definition IAudioExtensionPlugin.h:455
virtual void OnReleaseSource(const uint32 SourceId)
Definition IAudioExtensionPlugin.h:465
virtual void OnInitSource(const uint32 SourceId, const FName &AudioComponentUserId, USourceDataOverridePluginSourceSettingsBase *InSettings)
Definition IAudioExtensionPlugin.h:460
virtual void OnAllSourcesProcessed()
Definition IAudioExtensionPlugin.h:475
Definition IAudioExtensionPlugin.h:246
virtual FString GetDisplayName() override
Definition IAudioExtensionPlugin.h:261
static FName GetModularFeatureName()
Definition IAudioExtensionPlugin.h:254
virtual TAudioSpatializationPtr CreateNewSpatializationPlugin(FAudioDevice *OwningDevice)=0
virtual ~IAudioSpatializationFactory()
Definition IAudioExtensionPlugin.h:249
virtual UClass * GetCustomSpatializationSettingsClass() const
Definition IAudioExtensionPlugin.h:285
virtual int32 GetMaxSupportedChannels()
Definition IAudioExtensionPlugin.h:272
Definition IAudioExtensionPlugin.h:301
virtual void OnDeviceShutdown(FAudioDevice *AudioDevice)
Definition IAudioExtensionPlugin.h:316
virtual void ProcessSpatializationForVoice(uint32 SourceId, float *InSamples, float *OutSamples, const FVector &Position)
Definition IAudioExtensionPlugin.h:336
virtual void OnAllSourcesProcessed()
Definition IAudioExtensionPlugin.h:366
virtual bool IsSpatializationEffectInitialized() const
Definition IAudioExtensionPlugin.h:371
virtual void InitializeSpatializationEffect(uint32 BufferLength)
Definition IAudioExtensionPlugin.h:331
virtual void Initialize(const FAudioPluginInitializationParams InitializationParams)
Definition IAudioExtensionPlugin.h:377
virtual void OnInitSource(const uint32 SourceId, const FName &AudioComponentUserId, USpatializationPluginSourceSettingsBase *InSettings)
Definition IAudioExtensionPlugin.h:346
virtual void ProcessAudio(const FAudioPluginSourceInputData &InputData, FAudioPluginSourceOutputData &OutputData)
Definition IAudioExtensionPlugin.h:361
virtual bool CreateSpatializationEffect(uint32 SourceId)
Definition IAudioExtensionPlugin.h:382
virtual void SetSpatializationParameters(uint32 SourceId, const FSpatializationParams &Params)
Definition IAudioExtensionPlugin.h:321
virtual void * GetSpatializationEffect(uint32 SourceId)
Definition IAudioExtensionPlugin.h:388
virtual ~IAudioSpatialization()
Definition IAudioExtensionPlugin.h:304
virtual void ProcessSpatializationForVoice(uint32 SourceId, float *InSamples, float *OutSamples)
Definition IAudioExtensionPlugin.h:341
virtual void GetSpatializationParameters(uint32 SourceId, FSpatializationParams &OutParams)
Definition IAudioExtensionPlugin.h:326
virtual void OnInitSource(const uint32 SourceId, const FName &AudioComponentUserId, const uint32 NumChannels, USpatializationPluginSourceSettingsBase *InSettings)
Definition IAudioExtensionPlugin.h:350
virtual void Shutdown()
Definition IAudioExtensionPlugin.h:312
virtual void OnReleaseSource(const uint32 SourceId)
Definition IAudioExtensionPlugin.h:356
Definition IModularFeature.h:12
Definition Class.h:3793
Definition Object.h:95
Definition IAudioExtensionPlugin.h:483
Definition IAudioExtensionPlugin.h:598
Definition SoundSubmix.h:334
Definition IAudioExtensionPlugin.h:398
Definition IAudioExtensionPlugin.h:185
Definition World.h:918
Definition IAudioExtensionPlugin.h:127
uint32 NumSources
Definition IAudioExtensionPlugin.h:129
FAudioDevice * AudioDevicePtr
Definition IAudioExtensionPlugin.h:143
FAudioPluginInitializationParams()
Definition IAudioExtensionPlugin.h:145
uint32 BufferLength
Definition IAudioExtensionPlugin.h:138
uint32 NumOutputChannels
Definition IAudioExtensionPlugin.h:132
uint32 SampleRate
Definition IAudioExtensionPlugin.h:135
Definition IAudioExtensionPlugin.h:156
FQuat ListenerOrientation
Definition IAudioExtensionPlugin.h:170
const FSpatializationParams * SpatializationParams
Definition IAudioExtensionPlugin.h:173
uint64 AudioComponentId
Definition IAudioExtensionPlugin.h:161
int32 NumChannels
Definition IAudioExtensionPlugin.h:167
Audio::FAlignedFloatBuffer * AudioBuffer
Definition IAudioExtensionPlugin.h:164
int32 SourceId
Definition IAudioExtensionPlugin.h:158
Definition IAudioExtensionPlugin.h:177
Audio::FAlignedFloatBuffer AudioBuffer
Definition IAudioExtensionPlugin.h:179
Definition IAudioExtensionPlugin.h:69
double AudioClock
Definition IAudioExtensionPlugin.h:107
FVector EmitterPosition
Definition IAudioExtensionPlugin.h:77
FSpatializationParams()
Definition IAudioExtensionPlugin.h:109
float Distance
Definition IAudioExtensionPlugin.h:95
FQuat LastEmitterWorldRotation
Definition IAudioExtensionPlugin.h:86
float NonSpatializedAmount
Definition IAudioExtensionPlugin.h:104
FQuat EmitterWorldRotation
Definition IAudioExtensionPlugin.h:83
FVector EmitterWorldPosition
Definition IAudioExtensionPlugin.h:80
FVector RightChannelPosition
Definition IAudioExtensionPlugin.h:92
FVector ListenerPosition
Definition IAudioExtensionPlugin.h:71
float AttenuationDistance
Definition IAudioExtensionPlugin.h:98
FQuat ListenerOrientation
Definition IAudioExtensionPlugin.h:74
FVector LeftChannelPosition
Definition IAudioExtensionPlugin.h:89
float NormalizedOmniRadius
Definition IAudioExtensionPlugin.h:101
Definition Audio.h:180