9#include "Containers/Array.h"
11#include "Containers/Set.h"
25#include "Misc/Optional.h"
36#define UE_API AUDIOMIXERCORE_API
41namespace Audio {
class FMixerNullCallback; }
44#define AUDIO_PLATFORM_LOG_ONCE(INFO, VERBOSITY) (AudioMixerPlatformLogOnce(INFO, FString(__FILE__), __LINE__, ELogVerbosity::VERBOSITY))
45#define AUDIO_PLATFORM_ERROR(INFO) (AudioMixerPlatformLogOnce(INFO, FString(__FILE__), __LINE__, ELogVerbosity::Error))
47#ifndef AUDIO_MIXER_ENABLE_DEBUG_MODE
49#if (UE_BUILD_SHIPPING || UE_BUILD_TEST)
50#define AUDIO_MIXER_ENABLE_DEBUG_MODE 0
52#define AUDIO_MIXER_ENABLE_DEBUG_MODE 1
59#if AUDIO_MIXER_ENABLE_DEBUG_MODE
60#define AUDIO_MIXER_CHECK(expr) ensure(expr)
61#define AUDIO_MIXER_CHECK_GAME_THREAD(_MixerDevice) (_MixerDevice->CheckAudioThread())
62#define AUDIO_MIXER_CHECK_AUDIO_PLAT_THREAD(_MixerDevice) (_MixerDevice->CheckAudioRenderingThread())
64#define AUDIO_MIXER_CHECK(expr)
65#define AUDIO_MIXER_CHECK_GAME_THREAD(_MixerDevice)
66#define AUDIO_MIXER_CHECK_AUDIO_PLAT_THREAD(_MixerDevice)
69#define AUDIO_MIXER_MAX_OUTPUT_CHANNELS 8
71#define AUDIO_MIXER_DEFAULT_DEVICE_INDEX INDEX_NONE
134 return TEXT(
"UNSUPPORTED");
215 UE_DEPRECATED(5.6,
"ShouldUseDeviceInfoCache functionality moved to IAudioMixerPlatformInterface.")
371 : AudioMixer(nullptr)
372 , DataFormat(EAudioMixerStreamDataFormat::
Unknown)
410 int32 CallCounterMixNextBuffer{ 0 };
541 UE_DEPRECATED(5.6,
"Please use new version MoveAudioStreamToNewAudioDevice which takes no parameters.")
561 UE_DEPRECATED(5.7,
"PCM Audio Caching is a leagacy feature that is now disabled for all platforms")
648 FString Message = FString::Printf(
TEXT(
"Audio Platform Device: %s (File %s, Line %d)"), *
LogDetails, *FileName, LineNumber);
657 if (!LogHistory.Contains(
Hash))
697 LogHistory.Add(
Hash);
711 UE_DEPRECATED(5.1,
"ApplyMasterAttenuation is deprecated, please use ApplyPrimaryAttenuation instead.")
780 UE_DEPRECATED(5.6,
"bMoveAudioStreamToNewAudioDevice has been deprecated. AudioStreamInfo.StreamState can provide similar functionality.")
796 bool bIsListeningForDeviceEvents =
true;
852 FString OriginalAudioDeviceId;
858 double LastDeviceSwapTime = 0.0;
@ 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
#define DECLARE_STATS_GROUP(GroupDesc, GroupId, GroupCat)
Definition Stats.h:689
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
DIRECTLINK_API Display
Definition DirectLinkLog.h:8
return true
Definition ExternalRpcRegistry.cpp:601
void Init()
Definition LockFreeList.h:4
#define UE_LOG(CategoryName, Verbosity, Format,...)
Definition LogMacros.h:270
#define UE_API
Definition SColorGradingComponentViewer.h:12
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
Definition AudioMixer.h:368
AUDIOMIXERCORE_API TArrayView< const uint8 > PopBufferData(int32 &OutBytesPopped) const
Definition AudioMixer.cpp:328
AUDIOMIXERCORE_API int32 GetNumSamples() const
Definition AudioMixer.cpp:336
AUDIOMIXERCORE_API bool MixNextBuffer()
Definition AudioMixer.cpp:259
FOutputBuffer()
Definition AudioMixer.h:370
EAudioMixerStreamDataFormat::Type GetFormat() const
Definition AudioMixer.h:390
Definition ParamInterpolator.h:10
Definition AudioMixer.h:415
virtual void OnDefaultCaptureDeviceChanged(const EAudioDeviceRole InAudioDeviceRole, const FString &DeviceId)
Definition AudioMixer.h:438
virtual void OnDefaultRenderDeviceChanged(const EAudioDeviceRole InAudioDeviceRole, const FString &DeviceId)
Definition AudioMixer.h:439
virtual void OnDeviceAdded(const FString &DeviceId, bool bIsRenderDevice)
Definition AudioMixer.h:440
virtual void OnSessionDisconnect(EDisconnectReason InReason)
Definition AudioMixer.h:444
virtual void OnDeviceStateChanged(const FString &DeviceId, const EAudioDeviceState InState, bool bIsRenderDevice)
Definition AudioMixer.h:442
EDisconnectReason
Definition AudioMixer.h:427
virtual void OnFormatChanged(const FString &InDeviceId, const FFormatChangedData &InFormat)
Definition AudioMixer.h:443
virtual FString GetDeviceId() const
Definition AudioMixer.h:446
virtual void RegisterDeviceChangedListener()
Definition AudioMixer.h:436
virtual ~IAudioMixerDeviceChangedListener()=default
virtual void OnDeviceRemoved(const FString &DeviceId, bool bIsRenderDevice)
Definition AudioMixer.h:441
virtual void UnregisterDeviceChangedListener()
Definition AudioMixer.h:437
Definition AudioMixer.h:198
virtual void OnAudioStreamShutdown()=0
bool IsMainAudioMixer() const
Definition AudioMixer.h:206
static AUDIOMIXERCORE_API bool ShouldUseDeviceInfoCache()
Definition AudioMixer.cpp:937
bool bIsMainAudioMixer
Definition AudioMixer.h:225
static AUDIOMIXERCORE_API bool ShouldRecycleThreads()
Definition AudioMixer.cpp:946
virtual bool OnProcessAudioStream(FAlignedFloatBuffer &OutputBuffer)=0
static AUDIOMIXERCORE_API bool ShouldUseThreadedDeviceSwap()
Definition AudioMixer.cpp:928
Definition AudioDevice.h:417
Definition NameTypes.h:617
Definition RunnableThread.h:20
Definition ScopeLock.h:141
Definition SingleThreadRunnable.h:12
Definition SoundWave.h:1571
Definition SoundWave.h:1742
Definition ThreadSafeBool.h:17
Definition ThreadSafeCounter.h:14
Definition AudioMixer.h:871
virtual bool IsAudioDeviceClassMulticlient() const
Definition AudioMixer.h:877
virtual Audio::IAudioMixerPlatformInterface * CreateAudioMixerPlatformInterface()
Definition AudioMixer.h:879
virtual FAudioDevice * CreateAudioDevice()
Definition AudioMixer.h:878
virtual bool IsAudioMixerModule() const
Definition AudioMixer.h:875
Definition AudioDecompress.h:31
Definition ModuleInterface.h:14
Definition ArrayView.h:139
void Reset(SizeType NewSize=0)
Definition Array.h:2246
Definition AndroidPlatformMisc.h:14
Definition UniquePtr.h:107
Definition SoundWave.h:417
@ Closed
Definition AudioMixerTypes.h:28
NO_LOGGING.
Definition AudioMixerPlatformAndroid.cpp:53
EAudioDeviceState
Definition AudioMixer.h:340
EDeviceEndpointType
Definition AudioMixer.h:228
EAudioDeviceRole
Definition AudioMixer.h:331
uint32 DeviceID
Definition IAudioParameterTransmitter.h:18
Definition AudioMixer.h:80
constexpr int32 MaxSupportedChannel
Definition AudioMixer.h:107
Type
Definition AudioMixer.h:83
@ TopBackRight
Definition AudioMixer.h:101
@ BackLeft
Definition AudioMixer.h:88
@ BackRight
Definition AudioMixer.h:89
@ FrontRightOfCenter
Definition AudioMixer.h:91
@ FrontLeftOfCenter
Definition AudioMixer.h:90
@ DefaultChannel
Definition AudioMixer.h:104
@ TopFrontRight
Definition AudioMixer.h:98
@ FrontRight
Definition AudioMixer.h:85
@ ChannelTypeCount
Definition AudioMixer.h:103
@ FrontLeft
Definition AudioMixer.h:84
@ TopBackLeft
Definition AudioMixer.h:99
@ SideRight
Definition AudioMixer.h:94
@ TopFrontLeft
Definition AudioMixer.h:96
@ TopFrontCenter
Definition AudioMixer.h:97
@ BackCenter
Definition AudioMixer.h:92
@ FrontCenter
Definition AudioMixer.h:86
@ SideLeft
Definition AudioMixer.h:93
@ Unknown
Definition AudioMixer.h:102
@ TopCenter
Definition AudioMixer.h:95
@ TopBackCenter
Definition AudioMixer.h:100
@ LowFrequency
Definition AudioMixer.h:87
Type
Definition LogVerbosity.h:17
@ Verbose
Definition LogVerbosity.h:46
@ NumVerbosity
Definition LogVerbosity.h:57
@ Warning
Definition LogVerbosity.h:34
@ Fatal
Definition LogVerbosity.h:22
@ Log
Definition LogVerbosity.h:40
@ Error
Definition LogVerbosity.h:28
@ VeryVerbose
Definition LogVerbosity.h:52
@ Display
Definition LogVerbosity.h:37
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition AudioMixer.h:250
FAudioMixerOpenStreamParams()
Definition AudioMixer.h:278
bool bRestoreIfRemoved
Definition AudioMixer.h:270
int32 MaxSources
Definition AudioMixer.h:267
uint32 OutputDeviceIndex
Definition AudioMixer.h:252
int32 NumBuffers
Definition AudioMixer.h:258
IAudioMixer * AudioMixer
Definition AudioMixer.h:261
uint32 NumFrames
Definition AudioMixer.h:255
uint32 SampleRate
Definition AudioMixer.h:264
FString AudioDeviceId
Definition AudioMixer.h:276
bool bUseSystemAudioDevice
Definition AudioMixer.h:273
Definition AudioMixer.h:291
IAudioMixer * AudioMixer
Definition AudioMixer.h:301
FAudioOutputStreamInfo()
Definition AudioMixer.h:309
~FAudioOutputStreamInfo()
Definition AudioMixer.h:314
void Reset()
Definition AudioMixer.h:319
uint32 OutputDeviceIndex
Definition AudioMixer.h:293
FAudioPlatformDeviceInfo DeviceInfo
Definition AudioMixer.h:295
uint32 NumBuffers
Definition AudioMixer.h:304
int32 NumOutputFrames
Definition AudioMixer.h:307
std::atomic< EAudioOutputStreamState::Type > StreamState
Definition AudioMixer.h:298
Definition AudioMixer.h:351
double AvgRenderTime
Definition AudioMixer.h:352
double MaxSinceTick
Definition AudioMixer.h:357
AUDIOMIXERCORE_API FAudioRenderTimeAnalysis()
Definition AudioMixer.cpp:183
double RenderTimeSinceLastLog
Definition AudioMixer.h:355
int32 RenderInstanceId
Definition AudioMixer.h:359
uint32 StartTime
Definition AudioMixer.h:356
AUDIOMIXERCORE_API void End()
Definition AudioMixer.cpp:197
double MaxRenderTime
Definition AudioMixer.h:353
double TotalRenderTime
Definition AudioMixer.h:354
uint64 RenderTimeCount
Definition AudioMixer.h:358
AUDIOMIXERCORE_API void Start()
Definition AudioMixer.cpp:192
Definition AudioMixer.h:451
TOptional< FAudioPlatformDeviceInfo > NewDevice
Definition AudioMixer.h:461
virtual ~FDeviceSwapContext()=default
FDeviceSwapContext(const FString &InRequestedDeviceID, const FString &InReason)
Definition AudioMixer.h:453
FString DeviceSwapReason
Definition AudioMixer.h:460
FString RequestedDeviceId
Definition AudioMixer.h:459
FDeviceSwapContext()=delete
Definition AudioMixer.h:465
virtual ~FDeviceSwapResult()=default
FAudioPlatformDeviceInfo DeviceInfo
Definition AudioMixer.h:470
double SuccessfulDurationMs
Definition AudioMixer.h:472
FString SwapReason
Definition AudioMixer.h:471
virtual bool IsNewDeviceReady() const
Definition AudioMixer.h:468
Definition Optional.h:131