You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
- Up to CL8320930 from DevOnline and 8311605 Merge Down from Main - skipped some Fortnite content/plugins/code where it tried to reintegrate files that had been moved pending investigation #rb none [CL 8321295 by Josh Markiewicz in Main branch]
116 lines
2.3 KiB
C++
116 lines
2.3 KiB
C++
// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "DSP/EQ.h"
|
|
#include "DSP/Dsp.h"
|
|
|
|
namespace Audio
|
|
{
|
|
FEqualizer::FEqualizer()
|
|
: NumBands(0)
|
|
, NumChannels(0)
|
|
, FilterBands(nullptr)
|
|
{
|
|
}
|
|
|
|
FEqualizer::~FEqualizer()
|
|
{
|
|
if (FilterBands)
|
|
{
|
|
delete[] FilterBands;
|
|
FilterBands = nullptr;
|
|
}
|
|
}
|
|
|
|
void FEqualizer::Init(const float InSampleRate, const int32 InNumBands, const int32 InNumChannels)
|
|
{
|
|
if (FilterBands)
|
|
{
|
|
delete[] FilterBands;
|
|
FilterBands = nullptr;
|
|
}
|
|
|
|
NumBands = InNumBands;
|
|
NumChannels = InNumChannels;
|
|
FilterBands = new FBiquadFilter[NumBands];
|
|
|
|
for (int32 Band = 0; Band < NumBands; ++Band)
|
|
{
|
|
FilterBands[Band].Init(InSampleRate, InNumChannels, EBiquadFilter::ParametricEQ, 500.0f, 1.0f, 0.0f);
|
|
}
|
|
|
|
}
|
|
|
|
void FEqualizer::SetBandEnabled(const int32 InBand, const bool bInEnabled)
|
|
{
|
|
if (!FilterBands || InBand >= NumBands)
|
|
{
|
|
return;
|
|
}
|
|
|
|
FilterBands[InBand].SetEnabled(bInEnabled);
|
|
}
|
|
|
|
void FEqualizer::SetBandParams(const int32 InBand, const float InFrequency, const float InBandwidth, const float InGainDB)
|
|
{
|
|
if (!FilterBands || InBand >= NumBands)
|
|
{
|
|
return;
|
|
}
|
|
|
|
FilterBands[InBand].SetParams(EBiquadFilter::ParametricEQ, InFrequency, InBandwidth, InGainDB);
|
|
}
|
|
|
|
void FEqualizer::SetBandFrequency(const int32 InBand, const float InFrequency)
|
|
{
|
|
if (!FilterBands || InBand >= NumBands)
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
FilterBands[InBand].SetFrequency(InFrequency);
|
|
}
|
|
|
|
void FEqualizer::SetBandBandwidth(const int32 InBand, const float InBandwidth)
|
|
{
|
|
if (!FilterBands || InBand >= NumBands)
|
|
{
|
|
return;
|
|
}
|
|
|
|
FilterBands[InBand].SetBandwidth(InBandwidth);
|
|
}
|
|
|
|
void FEqualizer::SetBandGainDB(const int32 InBand, const float InGainDB)
|
|
{
|
|
if (!FilterBands || InBand >= NumBands)
|
|
{
|
|
return;
|
|
}
|
|
|
|
FilterBands[InBand].SetGainDB(InGainDB);
|
|
}
|
|
|
|
void FEqualizer::ProcessAudioFrame(const float* InAudio, float* OutAudio)
|
|
{
|
|
float AudioBufferScratchInput[8];
|
|
|
|
for (int32 Channel = 0; Channel < NumChannels; ++Channel)
|
|
{
|
|
AudioBufferScratchInput[Channel] = InAudio[Channel];
|
|
}
|
|
|
|
// Process each band in parallel
|
|
for (int32 Band = 0; Band < NumBands; ++Band)
|
|
{
|
|
FilterBands[Band].ProcessAudioFrame(AudioBufferScratchInput, OutAudio);
|
|
|
|
for (int32 Channel = 0; Channel < NumChannels; ++Channel)
|
|
{
|
|
AudioBufferScratchInput[Channel] = OutAudio[Channel];
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|