UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Audio::IAudioMixerPlatformInterface Class Referenceabstract

#include <AudioMixer.h>

+ Inheritance diagram for Audio::IAudioMixerPlatformInterface:

Public Member Functions

virtual AUDIOMIXERCORE_API ~IAudioMixerPlatformInterface ()
 
virtual FString GetPlatformApi () const =0
 
virtual bool InitializeHardware ()=0
 
virtual bool CheckAudioDeviceChange ()
 
virtual void ResumePlaybackOnNewDevice ()
 
virtual bool TeardownHardware ()=0
 
virtual bool IsInitialized () const =0
 
virtual bool GetNumOutputDevices (uint32 &OutNumOutputDevices)
 
virtual bool GetOutputDeviceInfo (const uint32 InDeviceIndex, FAudioPlatformDeviceInfo &OutInfo)=0
 
virtual FString GetCurrentDeviceName () const
 
virtual AUDIOMIXERCORE_API int32 GetIndexForDevice (const FString &InDeviceName)
 
virtual FAudioPlatformSettings GetPlatformSettings () const =0
 
virtual bool GetDefaultOutputDeviceIndex (uint32 &OutDefaultDeviceIndex) const
 
virtual bool OpenAudioStream (const FAudioMixerOpenStreamParams &Params)=0
 
virtual bool CloseAudioStream ()=0
 
virtual bool StartAudioStream ()=0
 
virtual bool StopAudioStream ()=0
 
virtual bool MoveAudioStreamToNewAudioDevice (const FString &InNewDeviceId)
 
virtual bool MoveAudioStreamToNewAudioDevice ()
 
virtual bool RequestDeviceSwap (const FString &DeviceID, bool bInForce, const TCHAR *InReason=nullptr)
 
virtual FAudioPlatformDeviceInfo GetPlatformDeviceInfo () const =0
 
virtual void SubmitBuffer (const uint8 *Buffer)
 
virtual void SubmitDirectOutBuffer (const int32 InDirectOutIndex, const Audio::FAlignedFloatBuffer &InBuffer)
 
virtual int32 GetNumFrames (const int32 InNumReqestedFrames)
 
virtual bool DisablePCMAudioCaching () const
 
virtual bool SupportsHardwareDecompression () const
 
virtual bool IsNonRealtime () const
 
virtual FString GetDefaultDeviceName ()=0
 
virtual void SuspendContext ()
 
virtual void ResumeContext ()
 
virtual void OnHardwareUpdate ()
 
virtual IAudioPlatformDeviceInfoCacheGetDeviceInfoCache () const
 
virtual bool IsDeviceInfoValid (const FAudioPlatformDeviceInfo &InDeviceInfo) const
 
virtual bool ShouldUseDeviceInfoCache () const
 
AUDIOMIXERCORE_API uint32 Run () override
 
virtual class FSingleThreadRunnableGetSingleThreadInterface () override
 
virtual AUDIOMIXERCORE_API void Tick () override
 
AUDIOMIXERCORE_API IAudioMixerPlatformInterface ()
 
AUDIOMIXERCORE_API void ReadNextBuffer ()
 
virtual AUDIOMIXERCORE_API void FadeIn ()
 
virtual AUDIOMIXERCORE_API void FadeOut ()
 
FString GetLastError () const
 
AUDIOMIXERCORE_API void PostInitializeHardware ()
 
bool GetIsListeningForDeviceEvents () const
 
void SetIsListeningForDeviceEvents (bool bInListeningForDeviceEvents)
 
- Public Member Functions inherited from FRunnable
virtual bool Init ()
 
virtual void Stop ()
 
virtual void Exit ()
 
virtual ~FRunnable ()
 
- Public Member Functions inherited from FSingleThreadRunnable
virtual ~FSingleThreadRunnable ()
 
- Public Member Functions inherited from Audio::IAudioMixerDeviceChangedListener
virtual ~IAudioMixerDeviceChangedListener ()=default
 
virtual void RegisterDeviceChangedListener ()
 
virtual void UnregisterDeviceChangedListener ()
 
virtual void OnDefaultCaptureDeviceChanged (const EAudioDeviceRole InAudioDeviceRole, const FString &DeviceId)
 
virtual void OnDefaultRenderDeviceChanged (const EAudioDeviceRole InAudioDeviceRole, const FString &DeviceId)
 
virtual void OnDeviceAdded (const FString &DeviceId, bool bIsRenderDevice)
 
virtual void OnDeviceRemoved (const FString &DeviceId, bool bIsRenderDevice)
 
virtual void OnDeviceStateChanged (const FString &DeviceId, const EAudioDeviceState InState, bool bIsRenderDevice)
 
virtual void OnFormatChanged (const FString &InDeviceId, const FFormatChangedData &InFormat)
 
virtual void OnSessionDisconnect (EDisconnectReason InReason)
 
virtual FString GetDeviceId () const
 

Static Public Member Functions

static AUDIOMIXERCORE_API bool GetChannelTypeAtIndex (const int32 Index, EAudioMixerChannel::Type &OutType)
 

Protected Member Functions

AUDIOMIXERCORE_API uint32 MainAudioDeviceRun ()
 
virtual AUDIOMIXERCORE_API uint32 RunInternal ()
 
void AudioMixerPlatformLogOnce (const FString &LogDetails, const FString &FileName, int32 LineNumber, ELogVerbosity::Type InVerbosity=ELogVerbosity::Error)
 
AUDIOMIXERCORE_API void BeginGeneratingAudio ()
 
AUDIOMIXERCORE_API void StopGeneratingAudio ()
 
AUDIOMIXERCORE_API void ApplyMasterAttenuation (TArrayView< const uint8 > &InOutPoppedAudio)
 
AUDIOMIXERCORE_API void ApplyPrimaryAttenuation (TArrayView< const uint8 > &InOutPoppedAudio)
 
template<typename BufferType >
void ApplyAttenuationInternal (TArrayView< BufferType > &InOutBuffer)
 
AUDIOMIXERCORE_API void StartRunningNullDevice ()
 
AUDIOMIXERCORE_API void StopRunningNullDevice ()
 
AUDIOMIXERCORE_API void CreateNullDeviceThread (const TFunction< void()> InCallback, float InBufferDuration, bool bShouldPauseOnStart)
 

Protected Attributes

FAudioOutputStreamInfo AudioStreamInfo
 
FAudioMixerOpenStreamParams OpenStreamParams
 
Audio::FOutputBuffer OutputBuffer
 
bool bWarnedBufferUnderrun
 
TUniquePtr< FRunnableThreadAudioRenderThread
 
FEventAudioRenderEvent
 
FCriticalSection DeviceSwapCriticalSection
 
FThreadSafeBool bIsInDeviceSwap
 
FEventAudioFadeEvent
 
int32 NumOutputBuffers
 
float FadeVolume
 
FParam FadeParam
 
FString CurrentDeviceName
 
FString LastError
 
int32 CallCounterApplyAttenuationInternal { 0 }
 
int32 CallCounterReadNextBuffer { 0 }
 
FThreadSafeBool bPerformingFade
 
FThreadSafeBool bFadedOut
 
FThreadSafeBool bIsDeviceInitialized
 
FThreadSafeBool bMoveAudioStreamToNewAudioDevice
 
FThreadSafeBool bIsUsingNullDevice
 
FThreadSafeBool bIsGeneratingAudio
 
const int32 InstanceID { -1 }
 

Static Protected Attributes

static AUDIOMIXERCORE_API FThreadSafeCounter NextInstanceID
 

Additional Inherited Members

- Public Types inherited from Audio::IAudioMixerDeviceChangedListener
enum class  EDisconnectReason {
  DeviceRemoval , ServerShutdown , FormatChanged , SessionLogoff ,
  SessionDisconnected , ExclusiveModeOverride
}
 

Detailed Description

Abstract interface for mixer platform.

Constructor & Destructor Documentation

◆ ~IAudioMixerPlatformInterface()

Audio::IAudioMixerPlatformInterface::~IAudioMixerPlatformInterface ( )
virtual

Virtual destructor.

◆ IAudioMixerPlatformInterface()

Audio::IAudioMixerPlatformInterface::IAudioMixerPlatformInterface ( )

Constructor.

Member Function Documentation

◆ ApplyAttenuationInternal()

template<typename BufferType >
void Audio::IAudioMixerPlatformInterface::ApplyAttenuationInternal ( TArrayView< BufferType > &  InOutBuffer)
protected

◆ ApplyMasterAttenuation()

AUDIOMIXERCORE_API void Audio::IAudioMixerPlatformInterface::ApplyMasterAttenuation ( TArrayView< const uint8 > &  InOutPoppedAudio)
protected

◆ ApplyPrimaryAttenuation()

void Audio::IAudioMixerPlatformInterface::ApplyPrimaryAttenuation ( TArrayView< const uint8 > &  InOutPoppedAudio)
protected

Performs buffer fades for shutdown/startup of audio mixer.

◆ AudioMixerPlatformLogOnce()

void Audio::IAudioMixerPlatformInterface::AudioMixerPlatformLogOnce ( const FString &  LogDetails,
const FString &  FileName,
int32  LineNumber,
ELogVerbosity::Type  InVerbosity = ELogVerbosity::Error 
)
inlineprotected

Is called when an error, warning or log is generated.

◆ BeginGeneratingAudio()

void Audio::IAudioMixerPlatformInterface::BeginGeneratingAudio ( )
protected

Start generating audio from our mixer.

◆ CheckAudioDeviceChange()

virtual bool Audio::IAudioMixerPlatformInterface::CheckAudioDeviceChange ( )
inlinevirtual

Check if audio device changed if applicable. Return true if audio device changed.

Reimplemented in Audio::FMixerPlatformAudioUnit, Audio::FMixerPlatformCoreAudio, Audio::FAudioMixerPlatformSwappable, Audio::FMixerPlatformNonRealtime, and Audio::FMixerPlatformXAudio2.

◆ CloseAudioStream()

◆ CreateNullDeviceThread()

void Audio::IAudioMixerPlatformInterface::CreateNullDeviceThread ( const TFunction< void()>  InCallback,
float  InBufferDuration,
bool  bShouldPauseOnStart 
)
protected

Called by platform specific logic to pre-create or create the null renderer thread

◆ DisablePCMAudioCaching()

virtual bool Audio::IAudioMixerPlatformInterface::DisablePCMAudioCaching ( ) const
inlinevirtual

Whether or not the platform disables caching of decompressed PCM data (i.e. to save memory on fixed memory platforms)

◆ FadeIn()

void Audio::IAudioMixerPlatformInterface::FadeIn ( )
virtual

Reset the fade state (use if reusing audio platform interface, e.g. in main audio device.

Reimplemented in Audio::FMixerPlatformNonRealtime.

◆ FadeOut()

void Audio::IAudioMixerPlatformInterface::FadeOut ( )
virtual

Start a fadeout. Prevents pops during shutdown.

Reimplemented in Audio::FMixerPlatformNonRealtime.

◆ GetChannelTypeAtIndex()

bool Audio::IAudioMixerPlatformInterface::GetChannelTypeAtIndex ( const int32  Index,
EAudioMixerChannel::Type OutType 
)
static

◆ GetCurrentDeviceName()

virtual FString Audio::IAudioMixerPlatformInterface::GetCurrentDeviceName ( ) const
inlinevirtual

Returns the name of the currently used audio device.

Reimplemented in Audio::FMixerPlatformXAudio2.

◆ GetDefaultDeviceName()

virtual FString Audio::IAudioMixerPlatformInterface::GetDefaultDeviceName ( )
pure virtual

◆ GetDefaultOutputDeviceIndex()

virtual bool Audio::IAudioMixerPlatformInterface::GetDefaultOutputDeviceIndex ( uint32 OutDefaultDeviceIndex) const
inlinevirtual

◆ GetDeviceInfoCache()

virtual IAudioPlatformDeviceInfoCache * Audio::IAudioMixerPlatformInterface::GetDeviceInfoCache ( ) const
inlinevirtual

◆ GetIndexForDevice()

int32 Audio::IAudioMixerPlatformInterface::GetIndexForDevice ( const FString &  InDeviceName)
virtual

Can be used to look up the current index for a given device name. On most platforms, this index may be invalidated if any devices are added or removed. Returns INDEX_NONE if no mapping is found

◆ GetIsListeningForDeviceEvents()

bool Audio::IAudioMixerPlatformInterface::GetIsListeningForDeviceEvents ( ) const
inline

Used to determine if this object is listening to system device change events.

◆ GetLastError()

FString Audio::IAudioMixerPlatformInterface::GetLastError ( ) const
inline

Returns the last error generated.

◆ GetNumFrames()

virtual int32 Audio::IAudioMixerPlatformInterface::GetNumFrames ( const int32  InNumReqestedFrames)
inlinevirtual

Allows platforms to filter the requested number of frames to render. Some platforms only support specific frame counts.

Reimplemented in Audio::FMixerPlatformAudioUnit, Audio::FMixerPlatformCoreAudio, and Audio::FAudioMixerWasapi.

◆ GetNumOutputDevices()

virtual bool Audio::IAudioMixerPlatformInterface::GetNumOutputDevices ( uint32 OutNumOutputDevices)
inlinevirtual

◆ GetOutputDeviceInfo()

virtual bool Audio::IAudioMixerPlatformInterface::GetOutputDeviceInfo ( const uint32  InDeviceIndex,
FAudioPlatformDeviceInfo OutInfo 
)
pure virtual

◆ GetPlatformApi()

◆ GetPlatformDeviceInfo()

virtual FAudioPlatformDeviceInfo Audio::IAudioMixerPlatformInterface::GetPlatformDeviceInfo ( ) const
pure virtual

◆ GetPlatformSettings()

◆ GetSingleThreadInterface()

virtual class FSingleThreadRunnable * Audio::IAudioMixerPlatformInterface::GetSingleThreadInterface ( )
inlineoverridevirtual

FSingleThreadRunnable accessor for ticking this FRunnable when multi-threading is disabled.

Returns
FSingleThreadRunnable Interface for this FRunnable object.

Reimplemented from FRunnable.

◆ InitializeHardware()

◆ IsDeviceInfoValid()

virtual bool Audio::IAudioMixerPlatformInterface::IsDeviceInfoValid ( const FAudioPlatformDeviceInfo InDeviceInfo) const
inlinevirtual

◆ IsInitialized()

◆ IsNonRealtime()

virtual bool Audio::IAudioMixerPlatformInterface::IsNonRealtime ( ) const
inlinevirtual

Whether this is an interface for a non-realtime renderer. If true, synch events will behave differently to avoid deadlocks.

Reimplemented in Audio::FMixerPlatformNonRealtime.

◆ MainAudioDeviceRun()

uint32 Audio::IAudioMixerPlatformInterface::MainAudioDeviceRun ( )
protected

◆ MoveAudioStreamToNewAudioDevice() [1/2]

virtual bool Audio::IAudioMixerPlatformInterface::MoveAudioStreamToNewAudioDevice ( )
inlinevirtual

◆ MoveAudioStreamToNewAudioDevice() [2/2]

virtual bool Audio::IAudioMixerPlatformInterface::MoveAudioStreamToNewAudioDevice ( const FString &  InNewDeviceId)
inlinevirtual

Resets the audio stream to use a new audio device with the given device ID (empty string means default).

Reimplemented in Audio::FMixerPlatformAudioUnit, Audio::FMixerPlatformCoreAudio, and Audio::FMixerPlatformNonRealtime.

◆ OnHardwareUpdate()

virtual void Audio::IAudioMixerPlatformInterface::OnHardwareUpdate ( )
inlinevirtual

◆ OpenAudioStream()

virtual bool Audio::IAudioMixerPlatformInterface::OpenAudioStream ( const FAudioMixerOpenStreamParams Params)
pure virtual

◆ PostInitializeHardware()

void Audio::IAudioMixerPlatformInterface::PostInitializeHardware ( )

This is called after InitializeHardware() is called.

◆ ReadNextBuffer()

void Audio::IAudioMixerPlatformInterface::ReadNextBuffer ( )

Retrieves the next generated buffer and feeds it to the platform mixer output stream.

UE_BUILD_SHIPPING

◆ RequestDeviceSwap()

virtual bool Audio::IAudioMixerPlatformInterface::RequestDeviceSwap ( const FString &  DeviceID,
bool  bInForce,
const TCHAR InReason = nullptr 
)
inlinevirtual

Sends a command to swap which output device is being used

Reimplemented in Audio::FAudioMixerPlatformSwappable.

◆ ResumeContext()

virtual void Audio::IAudioMixerPlatformInterface::ResumeContext ( )
inlinevirtual

◆ ResumePlaybackOnNewDevice()

virtual void Audio::IAudioMixerPlatformInterface::ResumePlaybackOnNewDevice ( )
inlinevirtual

Resumes playback on new audio device after device change.

Reimplemented in Audio::FAudioMixerPlatformSwappable, and Audio::FMixerPlatformNonRealtime.

◆ Run()

uint32 Audio::IAudioMixerPlatformInterface::Run ( )
overridevirtual

Runs the runnable object.

This is where all per object thread work is done. This is only called if the initialization was successful.

Returns
The exit code of the runnable object
See also
Init, Stop, Exit

Implements FRunnable.

◆ RunInternal()

uint32 Audio::IAudioMixerPlatformInterface::RunInternal ( )
protectedvirtual

◆ SetIsListeningForDeviceEvents()

void Audio::IAudioMixerPlatformInterface::SetIsListeningForDeviceEvents ( bool  bInListeningForDeviceEvents)
inline

◆ ShouldUseDeviceInfoCache()

virtual bool Audio::IAudioMixerPlatformInterface::ShouldUseDeviceInfoCache ( ) const
inlinevirtual

◆ StartAudioStream()

virtual bool Audio::IAudioMixerPlatformInterface::StartAudioStream ( )
pure virtual

◆ StartRunningNullDevice()

void Audio::IAudioMixerPlatformInterface::StartRunningNullDevice ( )
protected

When called, spins up a thread to start consuming output when no audio device is available.

◆ StopAudioStream()

virtual bool Audio::IAudioMixerPlatformInterface::StopAudioStream ( )
pure virtual

◆ StopGeneratingAudio()

void Audio::IAudioMixerPlatformInterface::StopGeneratingAudio ( )
protected

Stops the render thread from generating audio.

◆ StopRunningNullDevice()

void Audio::IAudioMixerPlatformInterface::StopRunningNullDevice ( )
protected

When called, terminates the null device.

◆ SubmitBuffer()

virtual void Audio::IAudioMixerPlatformInterface::SubmitBuffer ( const uint8 Buffer)
inlinevirtual

◆ SubmitDirectOutBuffer()

virtual void Audio::IAudioMixerPlatformInterface::SubmitDirectOutBuffer ( const int32  InDirectOutIndex,
const Audio::FAlignedFloatBuffer InBuffer 
)
inlinevirtual

Submit a buffer that is to be output directly through a discreet device channel.

Reimplemented in Audio::FAudioMixerWasapi.

◆ SupportsHardwareDecompression()

virtual bool Audio::IAudioMixerPlatformInterface::SupportsHardwareDecompression ( ) const
inlinevirtual

Whether or not this platform has hardware decompression.

◆ SuspendContext()

virtual void Audio::IAudioMixerPlatformInterface::SuspendContext ( )
inlinevirtual

◆ TeardownHardware()

◆ Tick()

void Audio::IAudioMixerPlatformInterface::Tick ( )
overridevirtual

Implements FSingleThreadRunnable.

Member Data Documentation

◆ AudioFadeEvent

FEvent* Audio::IAudioMixerPlatformInterface::AudioFadeEvent
protected

Event allows you to block until fadeout is complete.

◆ AudioRenderEvent

FEvent* Audio::IAudioMixerPlatformInterface::AudioRenderEvent
protected

The render thread sync event.

◆ AudioRenderThread

TUniquePtr<FRunnableThread> Audio::IAudioMixerPlatformInterface::AudioRenderThread
protected

The audio render thread.

◆ AudioStreamInfo

FAudioOutputStreamInfo Audio::IAudioMixerPlatformInterface::AudioStreamInfo
protected

The audio device stream info.

◆ bFadedOut

FThreadSafeBool Audio::IAudioMixerPlatformInterface::bFadedOut
protected

◆ bIsDeviceInitialized

FThreadSafeBool Audio::IAudioMixerPlatformInterface::bIsDeviceInitialized
protected

◆ bIsGeneratingAudio

FThreadSafeBool Audio::IAudioMixerPlatformInterface::bIsGeneratingAudio
protected

◆ bIsInDeviceSwap

FThreadSafeBool Audio::IAudioMixerPlatformInterface::bIsInDeviceSwap
protected

This is used if we are attempting to TryLock on DeviceSwapCriticalSection, but a buffer callback is being called in the current thread.

◆ bIsUsingNullDevice

FThreadSafeBool Audio::IAudioMixerPlatformInterface::bIsUsingNullDevice
protected

◆ bMoveAudioStreamToNewAudioDevice

FThreadSafeBool Audio::IAudioMixerPlatformInterface::bMoveAudioStreamToNewAudioDevice
protected

◆ bPerformingFade

FThreadSafeBool Audio::IAudioMixerPlatformInterface::bPerformingFade
protected

◆ bWarnedBufferUnderrun

bool Audio::IAudioMixerPlatformInterface::bWarnedBufferUnderrun
protected

Whether or not we warned of buffer underrun.

◆ CallCounterApplyAttenuationInternal

int32 Audio::IAudioMixerPlatformInterface::CallCounterApplyAttenuationInternal { 0 }
protected

◆ CallCounterReadNextBuffer

int32 Audio::IAudioMixerPlatformInterface::CallCounterReadNextBuffer { 0 }
protected

◆ CurrentDeviceName

FString Audio::IAudioMixerPlatformInterface::CurrentDeviceName
protected

This device name can be used to override the default device being used on platforms that use strings to identify audio devices.

◆ DeviceSwapCriticalSection

FCriticalSection Audio::IAudioMixerPlatformInterface::DeviceSwapCriticalSection
protected

Critical Section used for times when we need the render loop to halt for the device swap.

◆ FadeParam

FParam Audio::IAudioMixerPlatformInterface::FadeParam
protected

Source param used to fade in and out audio device.

◆ FadeVolume

float Audio::IAudioMixerPlatformInterface::FadeVolume
protected

The fade value. Used for fading in/out primary audio.

◆ InstanceID

const int32 Audio::IAudioMixerPlatformInterface::InstanceID { -1 }
protected

A Unique ID Identifying this instance. Mostly used for logging.

◆ LastError

FString Audio::IAudioMixerPlatformInterface::LastError
protected

String containing the last generated error.

◆ NextInstanceID

FThreadSafeCounter Audio::IAudioMixerPlatformInterface::NextInstanceID
staticprotected

A Counter to provide the next unique id.

IAudioMixerPlatformInterface

◆ NumOutputBuffers

int32 Audio::IAudioMixerPlatformInterface::NumOutputBuffers
protected

The number of mixer buffers to queue on the output source voice.

◆ OpenStreamParams

FAudioMixerOpenStreamParams Audio::IAudioMixerPlatformInterface::OpenStreamParams
protected

◆ OutputBuffer

Audio::FOutputBuffer Audio::IAudioMixerPlatformInterface::OutputBuffer
protected

List of generated output buffers.


The documentation for this class was generated from the following files: