UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AudioMixer.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Async/Future.h"
6#include "AudioMixerLog.h"
8#include "AudioMixerTypes.h"
9#include "Containers/Array.h"
11#include "Containers/Set.h"
13#include "CoreMinimal.h"
15#include "DSP/Dsp.h"
17#include "HAL/CriticalSection.h"
18#include "HAL/PlatformMath.h"
19#include "HAL/Runnable.h"
20#include "HAL/ThreadSafeBool.h"
21#include "Logging/LogCategory.h"
22#include "Logging/LogMacros.h"
25#include "Misc/Optional.h"
26#include "Misc/ScopeLock.h"
29#include "Stats/Stats.h"
30#include "Templates/Function.h"
32#include "Templates/UniquePtr.h"
34#include "UObject/NameTypes.h"
35
36#define UE_API AUDIOMIXERCORE_API
37
38class FEvent;
39class FRunnableThread;
41namespace Audio { class FMixerNullCallback; }
42
43// defines used for AudioMixer.h
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))
46
47#ifndef AUDIO_MIXER_ENABLE_DEBUG_MODE
48// This define enables a bunch of more expensive debug checks and logging capabilities that are intended to be off most of the time even in debug builds of game/editor.
49#if (UE_BUILD_SHIPPING || UE_BUILD_TEST)
50#define AUDIO_MIXER_ENABLE_DEBUG_MODE 0
51#else
52#define AUDIO_MIXER_ENABLE_DEBUG_MODE 1
53#endif
54#endif
55
56
57// Enable debug checking for audio mixer
58
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())
63#else
64#define AUDIO_MIXER_CHECK(expr)
65#define AUDIO_MIXER_CHECK_GAME_THREAD(_MixerDevice)
66#define AUDIO_MIXER_CHECK_AUDIO_PLAT_THREAD(_MixerDevice)
67#endif
68
69#define AUDIO_MIXER_MAX_OUTPUT_CHANNELS 8 // Max number of speakers/channels supported (7.1)
70
71#define AUDIO_MIXER_DEFAULT_DEVICE_INDEX INDEX_NONE
72
73// Cycle stats for audio mixer
75
76// Tracks the time for the full render block
78
80{
106
108
109 inline const TCHAR* ToString(EAudioMixerChannel::Type InType)
110 {
111 switch (InType)
112 {
113 case FrontLeft: return TEXT("FrontLeft");
114 case FrontRight: return TEXT("FrontRight");
115 case FrontCenter: return TEXT("FrontCenter");
116 case LowFrequency: return TEXT("LowFrequency");
117 case BackLeft: return TEXT("BackLeft");
118 case BackRight: return TEXT("BackRight");
119 case FrontLeftOfCenter: return TEXT("FrontLeftOfCenter");
120 case FrontRightOfCenter: return TEXT("FrontRightOfCenter");
121 case BackCenter: return TEXT("BackCenter");
122 case SideLeft: return TEXT("SideLeft");
123 case SideRight: return TEXT("SideRight");
124 case TopCenter: return TEXT("TopCenter");
125 case TopFrontLeft: return TEXT("TopFrontLeft");
126 case TopFrontCenter: return TEXT("TopFrontCenter");
127 case TopFrontRight: return TEXT("TopFrontRight");
128 case TopBackLeft: return TEXT("TopBackLeft");
129 case TopBackCenter: return TEXT("TopBackCenter");
130 case TopBackRight: return TEXT("TopBackRight");
131 case Unknown: return TEXT("Unknown");
132
133 default:
134 return TEXT("UNSUPPORTED");
135 }
136 }
137}
138
139class FSoundWaveData;
140class FSoundWaveProxy;
142class USoundWave;
143
146
147
148namespace Audio
149{
195
198 {
199 public:
201 virtual bool OnProcessAudioStream(FAlignedFloatBuffer& OutputBuffer) = 0;
202
204 virtual void OnAudioStreamShutdown() = 0;
205
206 bool IsMainAudioMixer() const { return bIsMainAudioMixer; }
207
210
213
215 UE_DEPRECATED(5.6, "ShouldUseDeviceInfoCache functionality moved to IAudioMixerPlatformInterface.")
217
218
219 protected:
220
224
226 };
227
229
230 // Interface for Caching Device Info.
247
250 {
253
256
259
262
265
266 /* The maximum number of sources we will try to decode or playback at once. */
268
271
274
277
288 };
289
291 {
294
296
298 std::atomic<EAudioOutputStreamState::Type> StreamState;
299
302
305
308
310 {
311 Reset();
312 }
313
315 {
316
317 }
318
319 void Reset()
320 {
324 AudioMixer = nullptr;
325 NumBuffers = 2;
326 NumOutputFrames = 0;
327 }
328 };
329
331 {
332 Console,
335
336 COUNT,
337 };
338
340 {
341 Active,
342 Disabled,
344 Unplugged,
345
346 COUNT,
347 };
348
365
368 {
369 public:
371 : AudioMixer(nullptr)
372 , DataFormat(EAudioMixerStreamDataFormat::Unknown)
373 {}
374
375 ~FOutputBuffer() = default;
376
379
382
385
388
390 EAudioMixerStreamDataFormat::Type GetFormat() const { return DataFormat; }
391
392
393 private:
394 IAudioMixer* AudioMixer;
395
396 // Circular buffer used to buffer audio between the audio render thread and the platform interface thread.
397 mutable Audio::TCircularAudioBuffer<uint8> CircularBuffer;
398
399 // Buffer that we render audio to from the IAudioMixer instance associated with this output buffer.
400 Audio::FAlignedFloatBuffer RenderBuffer;
401
402 // Buffer read by the platform interface thread.
403 mutable Audio::FAlignedByteBuffer PopBuffer;
404
405 // For non-float situations, this buffer is used to convert RenderBuffer before pushing it to CircularBuffer.
406 FAlignedByteBuffer FormattedBuffer;
408
409 static AUDIOMIXERCORE_API size_t GetSizeForDataFormat(EAudioMixerStreamDataFormat::Type InDataFormat);
410 int32 CallCounterMixNextBuffer{ 0 };
411 };
412
415 {
416 public:
418
425
435
438 virtual void OnDefaultCaptureDeviceChanged(const EAudioDeviceRole InAudioDeviceRole, const FString& DeviceId) {}
439 virtual void OnDefaultRenderDeviceChanged(const EAudioDeviceRole InAudioDeviceRole, const FString& DeviceId) {}
440 virtual void OnDeviceAdded(const FString& DeviceId, bool bIsRenderDevice) {}
441 virtual void OnDeviceRemoved(const FString& DeviceId, bool bIsRenderDevice) {}
442 virtual void OnDeviceStateChanged(const FString& DeviceId, const EAudioDeviceState InState, bool bIsRenderDevice) {}
443 virtual void OnFormatChanged(const FString& InDeviceId, const FFormatChangedData& InFormat) {}
445
446 virtual FString GetDeviceId() const { return FString(); }
447 };
448
449
463
465 {
466 virtual ~FDeviceSwapResult() = default;
467
468 virtual bool IsNewDeviceReady() const { return false; }
469
471 FString SwapReason;
473 };
474
479 {
480
481 public: // Virtual functions
482
485
487 virtual FString GetPlatformApi() const = 0;
488
490 virtual bool InitializeHardware() = 0;
491
493 virtual bool CheckAudioDeviceChange() { return false; };
494
497
499 virtual bool TeardownHardware() = 0;
500
502 virtual bool IsInitialized() const = 0;
503
506
509
513 virtual FString GetCurrentDeviceName() const { return CurrentDeviceName; }
514
521
524
527
529 virtual bool OpenAudioStream(const FAudioMixerOpenStreamParams& Params) = 0;
530
532 virtual bool CloseAudioStream() = 0;
533
535 virtual bool StartAudioStream() = 0;
536
538 virtual bool StopAudioStream() = 0;
539
541 UE_DEPRECATED(5.6, "Please use new version MoveAudioStreamToNewAudioDevice which takes no parameters.")
543 virtual bool MoveAudioStreamToNewAudioDevice() { return true; }
544
546 virtual bool RequestDeviceSwap(const FString& DeviceID, bool bInForce, const TCHAR* InReason = nullptr) { return false; }
547
550
552 virtual void SubmitBuffer(const uint8* Buffer) {};
553
556
559
561 UE_DEPRECATED(5.7, "PCM Audio Caching is a leagacy feature that is now disabled for all platforms")
562 virtual bool DisablePCMAudioCaching() const { return true; }
563
565 virtual bool SupportsHardwareDecompression() const { return false; }
566
568 virtual bool IsNonRealtime() const { return false; }
569
571 virtual FString GetDefaultDeviceName() = 0;
572
573 // Helper function to gets the channel map type at the given index.
575
576 // Function to stop all audio from rendering. Used on mobile platforms which can suspend the application.
577 virtual void SuspendContext() {}
578
579 // Function to resume audio rendering. Used on mobile platforms which can suspend the application.
580 virtual void ResumeContext() {}
581
582 // Function called at the beginning of every call of UpdateHardware on the audio thread.
583 virtual void OnHardwareUpdate() {}
584
585 // Get the DeviceInfo Cache if one exists.
586 virtual IAudioPlatformDeviceInfoCache* GetDeviceInfoCache() const { return nullptr; }
587
588 // Determine if the given device info struct is valid for use with this platform
589 virtual bool IsDeviceInfoValid(const FAudioPlatformDeviceInfo& InDeviceInfo) const { return false; }
590
591 // Subclasses can override to determine if it should use Cache for DeviceInfo Enumeration
592 virtual bool ShouldUseDeviceInfoCache() const { return false; }
593
594 public: // Public Functions
595 //~ Begin FRunnable
596 AUDIOMIXERCORE_API uint32 Run() override;
597 //~ End FRunnable
598
603 virtual class FSingleThreadRunnable* GetSingleThreadInterface() override { return this; }
604
605 //~ Begin FSingleThreadRunnable Interface
606 AUDIOMIXERCORE_API virtual void Tick() override;
607 //~ End FSingleThreadRunnable Interface
608
611
614
616 AUDIOMIXERCORE_API virtual void FadeIn();
617
619 AUDIOMIXERCORE_API virtual void FadeOut();
620
622 FString GetLastError() const { return LastError; }
623
626
628 bool GetIsListeningForDeviceEvents() const { return bIsListeningForDeviceEvents; }
630
631 protected:
632
633 // Run the "main" audio device
635
636 // Wrapper around the thread Run. This is virtualized so a platform can fundamentally override the render function.
638
640 inline void AudioMixerPlatformLogOnce(const FString& LogDetails, const FString& FileName, int32 LineNumber, ELogVerbosity::Type InVerbosity = ELogVerbosity::Error)
641 {
642#if !NO_LOGGING
643 // Log once to avoid Spam.
644 static FCriticalSection Cs;
645 static TSet<uint32> LogHistory;
646
647 FScopeLock Lock(&Cs);
648 FString Message = FString::Printf(TEXT("Audio Platform Device: %s (File %s, Line %d)"), *LogDetails, *FileName, LineNumber);
649
651 {
652 // Save last error if it was at the error level.
653 LastError = Message;
654 }
655
656 uint32 Hash = GetTypeHash(Message);
657 if (!LogHistory.Contains(Hash))
658 {
659 switch (InVerbosity)
660 {
662 UE_LOG(LogAudioMixer, Fatal, TEXT("%s"), *Message);
663 break;
664
666 UE_LOG(LogAudioMixer, Error, TEXT("%s"), *Message);
667 break;
668
670 UE_LOG(LogAudioMixer, Warning, TEXT("%s"), *Message);
671 break;
672
674 UE_LOG(LogAudioMixer, Display, TEXT("%s"), *Message);
675 break;
676
678 UE_LOG(LogAudioMixer, Log, TEXT("%s"), *Message);
679 break;
680
682 UE_LOG(LogAudioMixer, Verbose, TEXT("%s"), *Message);
683 break;
684
686 UE_LOG(LogAudioMixer, VeryVerbose, TEXT("%s"), *Message);
687 break;
688
689 default:
690 UE_LOG(LogAudioMixer, Error, TEXT("%s"), *Message);
691 {
692 static_assert(static_cast<uint8>(ELogVerbosity::NumVerbosity) == 8, "Missing ELogVerbosity case coverage");
693 }
694 break;
695 }
696
697 LogHistory.Add(Hash);
698 }
699#endif
700 }
701
702
703
706
709
710 // Deprecated - use ApplyPrimaryAttenuation
711 UE_DEPRECATED(5.1, "ApplyMasterAttenuation is deprecated, please use ApplyPrimaryAttenuation instead.")
713
716
717 template<typename BufferType>
719
722
725
728
729 protected:
730
734
737
740
742 //FRunnableThread* AudioRenderThread;
744
747
750
752 UE_DEPRECATED(5.6, "bIsInDeviceSwap has been deprecated. AudioStreamInfo.StreamState can provide similar functionality.")
754
757
760
763
766
769
771 FString LastError;
772
775
779
780 UE_DEPRECATED(5.6, "bMoveAudioStreamToNewAudioDevice has been deprecated. AudioStreamInfo.StreamState can provide similar functionality.")
782
785
788
790 const int32 InstanceID{ -1 };
791
792 private:
793 TUniquePtr<FMixerNullCallback> NullDeviceCallback;
794
796 bool bIsListeningForDeviceEvents = true;
797
798 };
799
802 {
803 public:
805 virtual ~FAudioMixerPlatformSwappable() override = default;
806
807 //~ Begin IAudioMixerPlatformInterface
808 UE_API virtual bool RequestDeviceSwap(const FString& DeviceID, const bool bInForce, const TCHAR* InReason) override;
809 UE_API virtual bool CheckAudioDeviceChange() override;
810 UE_API virtual bool MoveAudioStreamToNewAudioDevice() override;
811 UE_API virtual void ResumePlaybackOnNewDevice() override;
812 //~ End IAudioMixerPlatformInterface
813
815 UE_API virtual bool AllowDeviceSwap(const bool bInForceSwap);
816
818 virtual bool InitializeDeviceSwapContext(const FString& InRequestedDeviceID, const TCHAR* InReason) = 0;
819
821 UE_API virtual bool CheckThreadedDeviceSwap();
822
824 virtual bool PreDeviceSwap() { return true; }
825
827 virtual void EnqueueAsyncDeviceSwap() = 0;
828
830 virtual void SynchronousDeviceSwap() = 0;
831
833 virtual bool PostDeviceSwap() { return true; }
834
835 protected:
837 FString GetOriginalAudioDeviceId() const { return OriginalAudioDeviceId; }
838 void SetOriginalAudioDeviceId(const FString& InAudioDeviceId) { OriginalAudioDeviceId = InAudioDeviceId; }
839
842 void ResetActiveDeviceSwapFuture() { ActiveDeviceSwap.Reset(); }
843
847 const FDeviceSwapResult* GetDeviceSwapResult() const { return ActiveDeviceSwap.IsValid() ? ActiveDeviceSwap.Get().Get() : nullptr; }
848 FDeviceSwapResult* GetDeviceSwapResult() { return ActiveDeviceSwap.IsValid() ? ActiveDeviceSwap.Get().Get() : nullptr; }
849
850 private:
852 FString OriginalAudioDeviceId;
853
856
858 double LastDeviceSwapTime = 0.0;
859 };
860
861}
862
867class FAudioDevice;
868
871{
872public:
873
875 virtual bool IsAudioMixerModule() const { return false; }
877 virtual bool IsAudioDeviceClassMulticlient() const { return true; }
878 virtual FAudioDevice* CreateAudioDevice() { return nullptr; }
880};
881
882#undef UE_API
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#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
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
#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
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition AudioMixer.h:802
UE_API FAudioMixerPlatformSwappable()
Definition AudioMixer.cpp:951
virtual UE_API bool CheckAudioDeviceChange() override
Definition AudioMixer.cpp:996
virtual bool PostDeviceSwap()
Definition AudioMixer.h:833
void ResetActiveDeviceSwapFuture()
Definition AudioMixer.h:842
virtual UE_API bool MoveAudioStreamToNewAudioDevice() override
Definition AudioMixer.cpp:1107
virtual UE_API bool RequestDeviceSwap(const FString &DeviceID, const bool bInForce, const TCHAR *InReason) override
Definition AudioMixer.cpp:955
virtual bool PreDeviceSwap()
Definition AudioMixer.h:824
virtual bool InitializeDeviceSwapContext(const FString &InRequestedDeviceID, const TCHAR *InReason)=0
virtual UE_API bool AllowDeviceSwap(const bool bInForceSwap)
Definition AudioMixer.cpp:1014
FDeviceSwapResult * GetDeviceSwapResult()
Definition AudioMixer.h:848
FString GetOriginalAudioDeviceId() const
Definition AudioMixer.h:837
virtual UE_API void ResumePlaybackOnNewDevice() override
Definition AudioMixer.cpp:1146
virtual UE_API bool CheckThreadedDeviceSwap()
Definition AudioMixer.cpp:1052
const FDeviceSwapResult * GetDeviceSwapResult() const
Definition AudioMixer.h:847
void SetActiveDeviceSwapFuture(TFuture< TUniquePtr< FDeviceSwapResult > > &&InFuture)
Definition AudioMixer.h:841
void SetOriginalAudioDeviceId(const FString &InAudioDeviceId)
Definition AudioMixer.h:838
virtual ~FAudioMixerPlatformSwappable() override=default
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
~FOutputBuffer()=default
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:479
AUDIOMIXERCORE_API void BeginGeneratingAudio()
Definition AudioMixer.cpp:661
FParam FadeParam
Definition AudioMixer.h:765
FString GetLastError() const
Definition AudioMixer.h:622
virtual AUDIOMIXERCORE_API void FadeIn()
Definition AudioMixer.cpp:387
virtual AUDIOMIXERCORE_API int32 GetIndexForDevice(const FString &InDeviceName)
Definition AudioMixer.cpp:432
AUDIOMIXERCORE_API void ReadNextBuffer()
Definition AudioMixer.cpp:578
virtual AUDIOMIXERCORE_API void Tick() override
Definition AudioMixer.cpp:749
virtual AUDIOMIXERCORE_API ~IAudioMixerPlatformInterface()
Definition AudioMixer.cpp:382
virtual AUDIOMIXERCORE_API uint32 RunInternal()
Definition AudioMixer.cpp:769
void AudioMixerPlatformLogOnce(const FString &LogDetails, const FString &FileName, int32 LineNumber, ELogVerbosity::Type InVerbosity=ELogVerbosity::Error)
Definition AudioMixer.h:640
FThreadSafeBool bFadedOut
Definition AudioMixer.h:777
FString CurrentDeviceName
Definition AudioMixer.h:768
virtual AUDIOMIXERCORE_API void FadeOut()
Definition AudioMixer.cpp:399
float FadeVolume
Definition AudioMixer.h:762
void SetIsListeningForDeviceEvents(bool bInListeningForDeviceEvents)
Definition AudioMixer.h:629
virtual void SuspendContext()
Definition AudioMixer.h:577
AUDIOMIXERCORE_API void PostInitializeHardware()
Definition AudioMixer.cpp:427
FEvent * AudioRenderEvent
Definition AudioMixer.h:746
virtual void SubmitDirectOutBuffer(const int32 InDirectOutIndex, const Audio::FAlignedFloatBuffer &InBuffer)
Definition AudioMixer.h:555
virtual bool DisablePCMAudioCaching() const
Definition AudioMixer.h:562
virtual bool MoveAudioStreamToNewAudioDevice()
Definition AudioMixer.h:543
AUDIOMIXERCORE_API void StopRunningNullDevice()
Definition AudioMixer.cpp:534
virtual bool OpenAudioStream(const FAudioMixerOpenStreamParams &Params)=0
virtual void OnHardwareUpdate()
Definition AudioMixer.h:583
virtual bool ShouldUseDeviceInfoCache() const
Definition AudioMixer.h:592
virtual FString GetDefaultDeviceName()=0
AUDIOMIXERCORE_API uint32 MainAudioDeviceRun()
Definition AudioMixer.cpp:764
virtual bool IsNonRealtime() const
Definition AudioMixer.h:568
AUDIOMIXERCORE_API void ApplyMasterAttenuation(TArrayView< const uint8 > &InOutPoppedAudio)
FThreadSafeBool bMoveAudioStreamToNewAudioDevice
Definition AudioMixer.h:781
FEvent * AudioFadeEvent
Definition AudioMixer.h:756
int32 NumOutputBuffers
Definition AudioMixer.h:759
bool GetIsListeningForDeviceEvents() const
Definition AudioMixer.h:628
virtual bool MoveAudioStreamToNewAudioDevice(const FString &InNewDeviceId)
Definition AudioMixer.h:542
int32 CallCounterReadNextBuffer
Definition AudioMixer.h:774
virtual void SubmitBuffer(const uint8 *Buffer)
Definition AudioMixer.h:552
virtual IAudioPlatformDeviceInfoCache * GetDeviceInfoCache() const
Definition AudioMixer.h:586
AUDIOMIXERCORE_API void ApplyPrimaryAttenuation(TArrayView< const uint8 > &InOutPoppedAudio)
Definition AudioMixer.cpp:558
virtual FAudioPlatformSettings GetPlatformSettings() const =0
TUniquePtr< FRunnableThread > AudioRenderThread
Definition AudioMixer.h:743
virtual bool IsInitialized() const =0
AUDIOMIXERCORE_API IAudioMixerPlatformInterface()
Definition AudioMixer.cpp:364
int32 CallCounterApplyAttenuationInternal
Definition AudioMixer.h:773
FThreadSafeBool bIsDeviceInitialized
Definition AudioMixer.h:778
FThreadSafeBool bPerformingFade
Definition AudioMixer.h:776
virtual bool RequestDeviceSwap(const FString &DeviceID, bool bInForce, const TCHAR *InReason=nullptr)
Definition AudioMixer.h:546
bool bWarnedBufferUnderrun
Definition AudioMixer.h:739
virtual void ResumePlaybackOnNewDevice()
Definition AudioMixer.h:496
virtual bool CheckAudioDeviceChange()
Definition AudioMixer.h:493
void ApplyAttenuationInternal(TArrayView< BufferType > &InOutBuffer)
Definition AudioMixer.cpp:460
virtual int32 GetNumFrames(const int32 InNumReqestedFrames)
Definition AudioMixer.h:558
virtual FAudioPlatformDeviceInfo GetPlatformDeviceInfo() const =0
virtual bool GetDefaultOutputDeviceIndex(uint32 &OutDefaultDeviceIndex) const
Definition AudioMixer.h:526
Audio::FOutputBuffer OutputBuffer
Definition AudioMixer.h:736
AUDIOMIXERCORE_API void StartRunningNullDevice()
Definition AudioMixer.cpp:505
FCriticalSection DeviceSwapCriticalSection
Definition AudioMixer.h:749
AUDIOMIXERCORE_API uint32 Run() override
Definition AudioMixer.cpp:810
FString LastError
Definition AudioMixer.h:771
AUDIOMIXERCORE_API void StopGeneratingAudio()
Definition AudioMixer.cpp:697
FThreadSafeBool bIsUsingNullDevice
Definition AudioMixer.h:783
const int32 InstanceID
Definition AudioMixer.h:790
virtual FString GetPlatformApi() const =0
virtual void ResumeContext()
Definition AudioMixer.h:580
FThreadSafeBool bIsInDeviceSwap
Definition AudioMixer.h:753
virtual bool GetOutputDeviceInfo(const uint32 InDeviceIndex, FAudioPlatformDeviceInfo &OutInfo)=0
FAudioOutputStreamInfo AudioStreamInfo
Definition AudioMixer.h:732
virtual class FSingleThreadRunnable * GetSingleThreadInterface() override
Definition AudioMixer.h:603
AUDIOMIXERCORE_API void CreateNullDeviceThread(const TFunction< void()> InCallback, float InBufferDuration, bool bShouldPauseOnStart)
Definition AudioMixer.cpp:553
virtual bool IsDeviceInfoValid(const FAudioPlatformDeviceInfo &InDeviceInfo) const
Definition AudioMixer.h:589
FThreadSafeBool bIsGeneratingAudio
Definition AudioMixer.h:784
virtual bool SupportsHardwareDecompression() const
Definition AudioMixer.h:565
FAudioMixerOpenStreamParams OpenStreamParams
Definition AudioMixer.h:733
static AUDIOMIXERCORE_API bool GetChannelTypeAtIndex(const int32 Index, EAudioMixerChannel::Type &OutType)
Definition AudioMixer.cpp:916
virtual bool GetNumOutputDevices(uint32 &OutNumOutputDevices)
Definition AudioMixer.h:505
static AUDIOMIXERCORE_API FThreadSafeCounter NextInstanceID
Definition AudioMixer.h:787
virtual FString GetCurrentDeviceName() const
Definition AudioMixer.h:513
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 AudioMixer.h:232
virtual TOptional< FAudioPlatformDeviceInfo > FindDefaultOutputDevice() const =0
virtual TArray< FAudioPlatformDeviceInfo > GetLogicalAggregateDevices(const FName InHardwareId, const EDeviceEndpointType InEndpointType) const =0
virtual ~IAudioPlatformDeviceInfoCache()=default
virtual bool IsAggregateHardwareDeviceId(const FName InDeviceId) const =0
virtual TArray< FAudioPlatformDeviceInfo > GetAllActiveOutputDevices() const =0
virtual TOptional< FAudioPlatformDeviceInfo > FindActiveOutputDevice(FName InDeviceID) const =0
Definition Dsp.h:834
Definition AudioDevice.h:417
Definition Event.h:21
Definition NameTypes.h:617
Definition RunnableThread.h:20
Definition Runnable.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
Definition Array.h:670
void Reset(SizeType NewSize=0)
Definition Array.h:2246
Definition AndroidPlatformMisc.h:14
Definition Future.h:393
Definition UniquePtr.h:107
Definition SoundWave.h:417
Type
Definition AudioMixerTypes.h:11
@ Unknown
Definition AudioMixerTypes.h:12
@ 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:152
FString DeviceId
Definition AudioMixer.h:157
EAudioMixerStreamDataFormat::Type Format
Definition AudioMixer.h:169
FString Name
Definition AudioMixer.h:154
TArray< EAudioMixerChannel::Type > OutputChannelArray
Definition AudioMixer.h:172
int32 SampleRate
Definition AudioMixer.h:166
int32 NumDirectOutChannels
Definition AudioMixer.h:163
FAudioPlatformDeviceInfo()
Definition AudioMixer.h:177
void Reset()
Definition AudioMixer.h:182
int32 NumChannels
Definition AudioMixer.h:160
uint8 bIsSystemDefault
Definition AudioMixer.h:175
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
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 AudioMixerTypes.h:63
Definition Optional.h:131