Files
UnrealEngineUWP/Engine/Source/Runtime/SignalProcessing/Private/EQ.cpp
Josh Markiewicz d79515867d Copying //UE4/Dev-Online to Dev-Main (//UE4/Dev-Main)
- 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]
2019-08-26 18:35:22 -04:00

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];
}
}
}
}