UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AudioMixerPlatformAudioUnit.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "AudioMixer.h"
6#include "DSP/Dsp.h"
7#include <AudioToolbox/AudioToolbox.h>
8#include <AudioUnit/AudioUnit.h>
9
10// Any platform defines
11namespace Audio
12{
13
15 {
16
17 public:
18
21
22 //~ Begin IAudioMixerPlatformInterface
23 virtual FString GetPlatformApi() const override { return TEXT("AudioUnit"); }
24 virtual bool InitializeHardware() override;
25 virtual bool CheckAudioDeviceChange() override;
26 virtual bool TeardownHardware() override;
27 virtual bool IsInitialized() const override;
28 virtual bool GetNumOutputDevices(uint32& OutNumOutputDevices) override;
29 virtual bool GetOutputDeviceInfo(const uint32 InDeviceIndex, FAudioPlatformDeviceInfo& OutInfo) override;
30 virtual bool GetDefaultOutputDeviceIndex(uint32& OutDefaultDeviceIndex) const override;
31 virtual bool OpenAudioStream(const FAudioMixerOpenStreamParams& Params) override;
32 virtual bool CloseAudioStream() override;
33 virtual bool StartAudioStream() override;
34 virtual bool StopAudioStream() override;
35 virtual bool MoveAudioStreamToNewAudioDevice(const FString& InNewDeviceId) override;
36 virtual FAudioPlatformDeviceInfo GetPlatformDeviceInfo() const override;
37 virtual void SubmitBuffer(const uint8* Buffer) override;
38 virtual FString GetDefaultDeviceName() override;
39 virtual FAudioPlatformSettings GetPlatformSettings() const override;
40 virtual int32 GetNumFrames(const int32 InNumReqestedFrames) override;
41 virtual void ResumeContext() override;
42 virtual void SuspendContext() override;
43
44 //~ End IAudioMixerPlatformInterface
45
46 static void IncrementSuspendCounter();
47 static void DecrementSuspendCounter();
48
49 private:
50 AudioStreamBasicDescription OutputFormat;
51
52 bool bSuspended;
53
55 bool bInitialized;
56
58 bool bInCallback;
59
60 AUGraph AudioUnitGraph;
61 AUNode OutputNode;
62 AudioUnit OutputUnit;
63 uint8* SubmittedBufferPtr;
64 int32 SubmittedBytes = 0;
65
66 int32 RemainingBytesInCurrentSubmittedBuffer;
67 int32 BytesPerSubmittedBuffer;
68
69 double GraphSampleRate;
70
71 bool bSupportsBackgroundAudio;
72
73 // We may have to grow the circular buffer capacity since Audio Unit callback size is not guaranteed to be constant
74 // Currently, this just zero's-out and reallocates, so it will pop. (We always keep largest capacity)
75 void GrowCircularBufferIfNeeded(const int32 InNumSamplesPerRenderCallback, const int32 InNumSamplesPerDeviceCallback);
76
77 // This buffer is pushed to and popped from in the SubmitBuffer callback.
78 // This is required for devices that require frame counts per callback that are not powers of two.
79 Audio::TCircularAudioBuffer<int8> CircularOutputBuffer;
80
81 int32 NumSamplesPerRenderCallback;
82 int32 NumSamplesPerDeviceCallback;
83 mutable bool bInternalPlatformSettingsInitialized{ false };
84 mutable FAudioPlatformSettings InternalPlatformSettings;
85
86 void InterruptContext(bool Interrupted);
87
88 bool PerformCallback(AudioBufferList* OutputBufferData);
89 void HandleError(const TCHAR* InLogOutput, bool bTeardown = true);
90 static OSStatus AudioRenderCallback(void* RefCon, AudioUnitRenderActionFlags* ActionFlags,
91 const AudioTimeStamp* TimeStamp, UInt32 BusNumber,
92 UInt32 NumFrames, AudioBufferList* IOData);
93
94 };
95
96}
#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::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition AudioMixerPlatformAudioUnit.h:15
virtual bool InitializeHardware() override
Definition AudioMixerPlatformAudioUnit.cpp:76
virtual void ResumeContext() override
Definition AudioMixerPlatformAudioUnit.cpp:470
FMixerPlatformAudioUnit()
Definition AudioMixerPlatformAudioUnit.cpp:50
virtual bool CheckAudioDeviceChange() override
Definition AudioMixerPlatformAudioUnit.cpp:226
virtual bool GetDefaultOutputDeviceIndex(uint32 &OutDefaultDeviceIndex) const override
Definition AudioMixerPlatformAudioUnit.cpp:271
~FMixerPlatformAudioUnit()
Definition AudioMixerPlatformAudioUnit.cpp:63
virtual FAudioPlatformSettings GetPlatformSettings() const override
Definition AudioMixerPlatformAudioUnit.cpp:409
static void IncrementSuspendCounter()
Definition AudioMixerPlatformAudioUnit.cpp:454
virtual bool StopAudioStream() override
Definition AudioMixerPlatformAudioUnit.cpp:354
virtual bool GetNumOutputDevices(uint32 &OutNumOutputDevices) override
Definition AudioMixerPlatformAudioUnit.cpp:258
virtual bool CloseAudioStream() override
Definition AudioMixerPlatformAudioUnit.cpp:318
virtual FString GetPlatformApi() const override
Definition AudioMixerPlatformAudioUnit.h:23
virtual bool StartAudioStream() override
Definition AudioMixerPlatformAudioUnit.cpp:334
virtual FString GetDefaultDeviceName() override
Definition AudioMixerPlatformAudioUnit.cpp:404
virtual bool TeardownHardware() override
Definition AudioMixerPlatformAudioUnit.cpp:232
virtual void SuspendContext() override
Definition AudioMixerPlatformAudioUnit.cpp:496
virtual void SubmitBuffer(const uint8 *Buffer) override
Definition AudioMixerPlatformAudioUnit.cpp:391
virtual FAudioPlatformDeviceInfo GetPlatformDeviceInfo() const override
Definition AudioMixerPlatformAudioUnit.cpp:374
static void DecrementSuspendCounter()
Definition AudioMixerPlatformAudioUnit.cpp:462
virtual bool GetOutputDeviceInfo(const uint32 InDeviceIndex, FAudioPlatformDeviceInfo &OutInfo) override
Definition AudioMixerPlatformAudioUnit.cpp:265
virtual int32 GetNumFrames(const int32 InNumReqestedFrames) override
Definition AudioMixerPlatformAudioUnit.cpp:71
virtual bool OpenAudioStream(const FAudioMixerOpenStreamParams &Params) override
Definition AudioMixerPlatformAudioUnit.cpp:278
virtual bool IsInitialized() const override
Definition AudioMixerPlatformAudioUnit.cpp:253
Definition AudioMixer.h:479
virtual bool MoveAudioStreamToNewAudioDevice()
Definition AudioMixer.h:543
Definition Dsp.h:834
NO_LOGGING.
Definition AudioMixerPlatformAndroid.cpp:53
Definition AudioMixer.h:250
Definition AudioMixer.h:152
Definition AudioMixerTypes.h:63