UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
IOSAudioDevice.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 IOSAudioDevice.h: Unreal IOSAudio audio interface object.
5 =============================================================================*/
6
7#pragma once
8
9#include "CoreMinimal.h"
10#include "AudioEffect.h"
11#include "AudioDevice.h"
12#include "Sound/SoundWave.h"
14#include "DSP/OnePole.h"
15
16/*------------------------------------------------------------------------------------
17 Audio Framework system headers
18 ------------------------------------------------------------------------------------*/
19#include <AudioToolbox/AudioToolbox.h>
20#include <AudioUnit/AudioUnit.h>
21#include <AVFoundation/AVAudioSession.h>
22
23#define AudioSampleType SInt16
24
26
27/*------------------------------------------------------------------------------------
28 Dependencies, helpers & forward declarations.
29------------------------------------------------------------------------------------*/
30
31#define CHANNELS_PER_BUS 2
32#define AudioCallbackFrameSize (8 * 1024) // This needs to be known ahead of time to allocate appropriate buffers
33
34struct FWaveInstance;
35class FIOSAudioDevice;
38
45
50{
51public:
53 virtual ~FIOSAudioSoundBuffer(void);
54
63
69 virtual int32 GetSize(void) override;
70
71 // These are used by the streaming engine to manage loading/unloading of chunks
72 virtual int32 GetCurrentChunkIndex() const override;
73 virtual int32 GetCurrentChunkOffset() const override;
74
78 virtual bool ReadCompressedInfo(USoundWave* SoundWave) override;
79
87 virtual bool ReadCompressedData( uint8* Destination, int32 NumFramesToDecode, bool bLooping ) override;
88
90
96
101};
102
107{
108public:
115
120
127 virtual bool Init(FWaveInstance* WaveInstance) override;
128
133 virtual void Update(void) override;
134
136 virtual void Play(void) override;
137
139 virtual void Stop(void) override;
140
142 virtual void Pause(void) override;
143
150 virtual bool IsFinished(void) override;
151
154
157
159
160 // Cached version of Source->LPFFrequency.
162
163protected:
164 bool AttachToAUGraph();
165 bool DetachFromAUGraph();
166
168
173
175
178
179private:
180
181 static OSStatus IOSAudioRenderCallback(void *InRefCon, AudioUnitRenderActionFlags *IOActionFlags,
184
185 void CleanupAudioBuffer();
186
187 friend class FIOSAudioDevice;
188};
189
194{
195public:
197 virtual ~FIOSAudioDevice() { }
198
199 AUGraph GetAudioUnitGraph() const { return AudioUnitGraph; }
200 AUNode GetMixerNode() const { return MixerNode; }
201 AudioUnit GetMixerUnit() const { return MixerUnit; }
202 AudioUnit GetOutputUnit() const { return OutputUnit; }
203
205 virtual void ResumeContext();
206 virtual void SuspendContext();
207
208 virtual bool Exec( UWorld* InWorld, const TCHAR* Cmd, FOutputDevice& Ar = *GLog ) override;
209
210 virtual void UpdateDeviceDeltaTime() override;
211
212 static void IncrementSuspendCounter();
213 static void DecrementSuspendCounter();
214
215protected:
217 virtual bool InitializeHardware() override;
218
220 virtual void TeardownHardware() override;
221
223 virtual void UpdateHardware() override;
224
226 virtual FAudioEffectsManager* CreateEffectsManager() override;
227
229 virtual FSoundSource* CreateSoundSource() override;
230
233 bool SetHardwareSampleRate(const double& InSampleRate);
234 bool SetAudioSessionActive(bool bActive);
235
237 virtual bool IsExernalBackgroundSoundActive() override;
238
240 virtual FAudioPlatformSettings GetPlatformSettings() const override;
241
242private:
243
244 // Used to support adpcm streaming
245 virtual bool HasCompressedAudioInfoClass(USoundWave* SoundWave) override { return true; }
246
247 void HandleError(const TCHAR* InLogOutput, bool bTeardown = false);
248
249 AudioStreamBasicDescription MixerFormat;
250 AUGraph AudioUnitGraph;
251 AUNode OutputNode;
252 AudioUnit OutputUnit;
253 AUNode MixerNode;
254 AudioUnit MixerUnit;
255 FVector PlayerLocation;
256 FVector PlayerFacing;
257 FVector PlayerUp;
258 FVector PlayerRight;
259 int32 NextBusNumber;
260
263};
#define GLog
Definition CoreGlobals.h:95
FPlatformTypes::int16 int16
A 16-bit signed integer.
Definition Platform.h:1123
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
ESoundFormat
Definition IOSAudioDevice.h:40
@ SoundFormat_LPCM
Definition IOSAudioDevice.h:42
@ SoundFormat_Invalid
Definition IOSAudioDevice.h:41
@ SoundFormat_ADPCM
Definition IOSAudioDevice.h:43
void Init()
Definition LockFreeList.h:4
#define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity)
Definition LogMacros.h:361
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition AudioDevice.h:417
Definition AudioEffect.h:102
Definition IOSAudioDevice.h:194
static void DecrementSuspendCounter()
Definition IOSAudioDevice.cpp:85
static void IncrementSuspendCounter()
Definition IOSAudioDevice.cpp:77
virtual bool IsExernalBackgroundSoundActive() override
Definition IOSAudioSession.cpp:36
virtual bool Exec(UWorld *InWorld, const TCHAR *Cmd, FOutputDevice &Ar= *GLog) override
Definition IOSAudioDevice.cpp:109
bool SetAudioSessionActive(bool bActive)
Definition IOSAudioSession.cpp:30
virtual FAudioPlatformSettings GetPlatformSettings() const override
Definition IOSAudioDevice.cpp:120
AUNode GetMixerNode() const
Definition IOSAudioDevice.h:200
virtual void UpdateDeviceDeltaTime() override
Definition IOSAudioDevice.cpp:93
AudioUnit GetMixerUnit() const
Definition IOSAudioDevice.h:201
void GetHardwareSampleRate(double &OutSampleRate)
Definition IOSAudioSession.cpp:18
virtual void SuspendContext()
Definition IOSAudioDevice.cpp:57
virtual void TeardownHardware() override
Definition IOSAudioDevice.cpp:261
virtual ~FIOSAudioDevice()
Definition IOSAudioDevice.h:197
bool SetHardwareSampleRate(const double &InSampleRate)
Definition IOSAudioSession.cpp:24
virtual void UpdateHardware() override
Definition IOSAudioDevice.cpp:276
FIOSAudioDevice()
Definition IOSAudioDevice.cpp:98
AUGraph GetAudioUnitGraph() const
Definition IOSAudioDevice.h:199
virtual FAudioEffectsManager * CreateEffectsManager() override
Definition IOSAudioDevice.cpp:294
virtual FSoundSource * CreateSoundSource() override
Definition IOSAudioDevice.cpp:300
AudioUnit GetOutputUnit() const
Definition IOSAudioDevice.h:202
virtual bool InitializeHardware() override
Definition IOSAudioDevice.cpp:125
virtual void ResumeContext()
Definition IOSAudioDevice.cpp:37
Definition IOSAudioDevice.h:50
virtual bool ReadCompressedData(uint8 *Destination, int32 NumFramesToDecode, bool bLooping) override
Definition IOSAudioBuffer.cpp:136
int32 SoundFormat
Definition IOSAudioDevice.h:93
uint32 BufferSize
Definition IOSAudioDevice.h:95
ICompressedAudioInfo * DecompressionState
Definition IOSAudioDevice.h:98
int32 SampleRate
Definition IOSAudioDevice.h:92
bool bIsProcedural
Definition IOSAudioDevice.h:100
bool bStreaming
Definition IOSAudioDevice.h:99
virtual int32 GetCurrentChunkOffset() const override
Definition IOSAudioBuffer.cpp:106
bool ReleaseCurrentChunk()
Definition IOSAudioBuffer.cpp:194
virtual bool ReadCompressedInfo(USoundWave *SoundWave) override
Definition IOSAudioBuffer.cpp:116
int32 RenderCallbackBufferSize
Definition IOSAudioDevice.h:91
virtual int32 GetCurrentChunkIndex() const override
Definition IOSAudioBuffer.cpp:96
virtual int32 GetSize(void) override
Definition IOSAudioBuffer.cpp:81
virtual ~FIOSAudioSoundBuffer(void)
Definition IOSAudioBuffer.cpp:61
int16 * SampleData
Definition IOSAudioDevice.h:94
Definition IOSAudioDevice.h:107
TArray< Audio::FParam > LPFParamBank
Definition IOSAudioDevice.h:156
~FIOSAudioSoundSource(void)
Definition IOSAudioSource.cpp:92
virtual void Pause(void) override
Definition IOSAudioSource.cpp:341
int32 SampleRate
Definition IOSAudioDevice.h:158
bool DetachFromAUGraph()
Definition IOSAudioSource.cpp:412
AudioUnitElement GetAudioUnitElement(int32 Channel)
Definition IOSAudioSource.cpp:387
bool AttachToAUGraph()
Definition IOSAudioSource.cpp:393
float SourceLPFFrequency
Definition IOSAudioDevice.h:161
uint32 BusNumber
Definition IOSAudioDevice.h:172
FIOSAudioSoundBuffer * IOSBuffer
Definition IOSAudioDevice.h:171
virtual void Update(void) override
Definition IOSAudioSource.cpp:207
FIOSAudioDevice * IOSAudioDevice
Definition IOSAudioDevice.h:167
bool bAllChannelsFinished
Definition IOSAudioDevice.h:177
bool bChannel0Finished
Definition IOSAudioDevice.h:176
virtual void Play(void) override
Definition IOSAudioSource.cpp:282
TArray< Audio::FOnePoleLPF > LowpassFilterBank
Definition IOSAudioDevice.h:155
virtual void Stop(void) override
Definition IOSAudioSource.cpp:308
int32 CallbackLock
Definition IOSAudioDevice.h:174
virtual bool IsFinished(void) override
Definition IOSAudioSource.cpp:354
Definition OutputDevice.h:133
Definition Audio.h:551
Definition Audio.h:627
FWaveInstance * WaveInstance
Definition Audio.h:797
Definition AudioDecompress.h:31
Definition Array.h:670
Definition SoundWave.h:417
Definition World.h:918
Definition AudioMixerTypes.h:63
Definition Audio.h:180