UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
VoiceProcessing.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "DSP/Delay.h"
7#include "DSP/AudioFFT.h"
9
10namespace Audio
11{
18 {
19 public:
20 // Delay length in samples.
22
23 // Returns average amplitude across the internal buffer, and fills Output with the delay line output.
24 SIGNALPROCESSING_API float ProcessInput(const float& Input, float& Output);
25
27
28 private:
30
31 TArray<float> AudioBuffer;
32 int32 BufferCursor;
33
34 float AccumulatedSum;
35
36 // Contended by ProcessInput and SetNumSamples.
37 FCriticalSection ProcessCriticalSection;
38 };
39
44 {
45 public:
46 // Delay length in samples. NumSamples must be divisible by four.
48
49 // Returns average amplitude across the internal buffer, and fills Output with the delay line output.
51
52 private:
54
56 int32 BufferCursor;
57
58 VectorRegister4Float AccumulatedSum;
59
60 // Contended by ProcessInput and SetNumSamples.
61 FCriticalSection ProcessCriticalSection;
62 };
63
69 {
70 public:
71 // InOnsetThreshold is the minimum amplitude of a signal before we begin outputting audio, in linear gain.
72 // InReleaseThreshold is the amplitude of the signal before we stop outputting audio, in linear gain.
73 // AttackDurationInSamples is the amount of samples we average over when calculating our amplitude when the in audio is below the threshold.
74 // ReleaseDurationInSamples is the amount of samples we average over when calculating our amplitude when the input audio is above the threshold.
76
77 // Buffers InAudio and renders any non-silent audio to OutAudio. Returns the number of samples written to OutAudio.
78 // The number of samples returned will only be less than NumSamples if the signal becomes audible mid-buffer.
79 // We do not return partial buffers when returning from an audible state to a silent state.
80 // This should also work in place, i.e. if InAudio == OutAudio.
81 SIGNALPROCESSING_API int32 ProcessBuffer(const float* InAudio, float* OutAudio, int32 NumSamples);
82
83 // Set the threshold of audibility, in terms of linear gain.
85
86 // Returns the current estimate of the current amplitude of the input signal, in linear gain.
88 private:
90
91 FMovingVectorAverager Averager;
92 float ReleaseTau;
93 float OnsetThreshold;
94 float ReleaseThreshold;
95 float CurrentAmplitude;
96 bool bOnsetWasInLastBuffer;
97 };
98
104 {
105 public:
106 // InGainTarget is our target running linear gain.
107 // InAdaptiveRate is the time it will take to respond to changes in amplitude, in numbers of buffer callbacks.
108 // InGainMin is the most we will attenuate the input signal.
109 // InGainMax is the most we will amplify the input signal.
111
112 // Takes an amplitude estimate and an input buffer, and attenuates InAudio based on it.
113 // Returns the linear gain applied to InAudio.
114 SIGNALPROCESSING_API float ProcessAudio(float* InAudio, int32 NumSamples, float InAmplitude);
115
116 // Sets the responsiveness of the adaptive gain control, in number of buffer callbacks.
118
119 private:
121
122 float GetTargetGain(float InAmplitude);
123
124 FMovingAverager PeakDetector;
125 float GainTarget;
126 float PreviousGain;
127 float GainMin;
128 float GainMax;
129 };
130}
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
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition VoiceProcessing.h:18
SIGNALPROCESSING_API void SetNumSamples(uint32 NumSamples)
Definition VoiceProcessing.cpp:36
SIGNALPROCESSING_API float ProcessInput(const float &Input, float &Output)
Definition VoiceProcessing.cpp:19
Definition VoiceProcessing.h:44
SIGNALPROCESSING_API float ProcessAudio(const VectorRegister4Float &Input, VectorRegister4Float &Output)
Definition VoiceProcessing.cpp:55
Definition VoiceProcessing.h:69
SIGNALPROCESSING_API void SetThreshold(float InThreshold)
Definition VoiceProcessing.cpp:149
SIGNALPROCESSING_API float GetCurrentAmplitude()
Definition VoiceProcessing.cpp:154
SIGNALPROCESSING_API int32 ProcessBuffer(const float *InAudio, float *OutAudio, int32 NumSamples)
Definition VoiceProcessing.cpp:87
Definition VoiceProcessing.h:104
SIGNALPROCESSING_API float ProcessAudio(float *InAudio, int32 NumSamples, float InAmplitude)
Definition VoiceProcessing.cpp:168
SIGNALPROCESSING_API void SetAdaptiveRate(int32 InAdaptiveRate)
Definition VoiceProcessing.cpp:180
Definition Array.h:670
NO_LOGGING.
Definition AudioMixerPlatformAndroid.cpp:53
Definition UnrealMathFPU.h:20