Files
UnrealEngine/Engine/Plugins/Runtime/Harmonix/Source/HarmonixDsp/Private/HarmonixDsp/Generate.cpp
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

57 lines
1.5 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "HarmonixDsp/Generate.h"
#include "HarmonixDsp/AudioUtility.h"
namespace HarmonixDsp
{
void GenerateA220Sawtooth(float* Output, uint32 NumFrames, uint32 SampleRate)
{
static float sPhase = 0.0f;
static float sCyclesPerSample = 220.0f / (float)SampleRate;
static float sPhaseIncrementPerSample = 2 * sCyclesPerSample;
float Phase = sPhase;
for (uint32 FrameNum = 0; FrameNum < NumFrames; ++FrameNum)
{
Output[FrameNum] = Phase;
Phase += sPhaseIncrementPerSample;
if (Phase >= 1.0)
{
Phase -= 2.0;
}
}
sPhase = Phase;
}
void GenerateWhiteNoise(float* Output, uint32 NumFrames, float Gain /*= 1.0f*/)
{
for (uint32 FrameNum = 0; FrameNum < NumFrames; ++FrameNum)
{
Output[FrameNum] = Gain * HarmonixDsp::FRandSample();
}
}
void GenerateWhiteNoise(int16* Output, uint32 NumFrames, float Gain /*= 1.0f*/)
{
for (uint32 FrameNum = 0; FrameNum < NumFrames; ++FrameNum)
{
Output[FrameNum] = (int16)(Gain * HarmonixDsp::FRandSample() * (float)MAX_int16);
}
}
void GenerateSine(float* Output, const uint32 NumFrames, const float Frequency, const float SampleRate, float& Phase)
{
const float PhaseInc = Frequency / SampleRate;
Phase = FMath::Fmod(Phase, 1.0f);
for (uint32 FrameNum = 0; FrameNum < NumFrames; ++FrameNum)
{
const float Sample = FMath::Sin(Phase * UE_TWO_PI);
Output[FrameNum] = Sample;
Phase = FMath::Fmod(Phase + PhaseInc, 1.0f);
}
}
}