Files
UnrealEngineUWP/Engine/Source/Runtime/SignalProcessing/Public/DSP/WaveTableOsc.h
ryan durand 0f0464a30e Updating copyright for Engine Runtime.
#rnx
#rb none


#ROBOMERGE-OWNER: ryan.durand
#ROBOMERGE-AUTHOR: ryan.durand
#ROBOMERGE-SOURCE: CL 10869210 via CL 10869511 via CL 10869900
#ROBOMERGE-BOT: (v613-10869866)

[CL 10870549 by ryan durand in Main branch]
2019-12-26 14:45:42 -05:00

102 lines
2.4 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
namespace Audio
{
// Wavetable oscillator types
namespace EWaveTable
{
enum Type
{
None,
SineWaveTable,
SawWaveTable,
TriangleWaveTable,
SquareWaveTable,
BandLimitedSawWaveTable,
BandLimitedTriangleWaveTable,
BandLimitedSquareWaveTable,
Custom
};
}
class FWaveTableOsc;
// A wave table oscillator class
class SIGNALPROCESSING_API FWaveTableOsc
{
public:
// Constructor
FWaveTableOsc();
// Virtual Destructor
virtual ~FWaveTableOsc();
// Initialize the wave table oscillator
void Init(const float InSampleRate, const float InFrequencyHz);
// Sets the sample rate of the oscillator.
void SetSampleRate(const float InSampleRate);
// Resets the wave table read indices.
void Reset();
// Sets the amount to scale and add to the output of the wave table
void SetScaleAdd(const float InScale, const float InAdd);
// Returns the type of the wave table oscillator.
EWaveTable::Type GetType() const { return WaveTableType; }
// Sets the frequency of the wave table oscillator.
void SetFrequencyHz(const float InFrequencyHz);
// Returns the frequency of the wave table oscillator.
float GetFrequencyHz() const { return FrequencyHz; }
// Returns the internal table used in the wave table.
TArray<float>& GetTable();
const TArray<float>& GetTable() const;
// Processes the wave table, outputs the normal and quad phase (optional) values
void Generate(float* OutputNormalPhase, float* OutputQuadPhase = nullptr);
// Creates a wave table using internal factories for standard wave tables or uses custom wave table factor if it exists.
static TSharedPtr<FWaveTableOsc> CreateWaveTable(const EWaveTable::Type WaveTableType, const int32 WaveTableSize = 1024);
protected:
void UpdateFrequency();
// The wave table buffer
TArray<float> WaveTableBuffer;
// The frequency of the output (given the sample rate)
float FrequencyHz;
// The sample rate of the oscillator
float SampleRate;
// Normal phase read index
float NormalPhaseReadIndex;
// The quad-phase read index
float QuadPhaseReadIndex;
// The phase increment (based on frequency)
float PhaseIncrement;
// Amount to scale the output by
float OutputScale;
// Amount to add to the output
float OutputAdd;
// The wave table oscillator type
EWaveTable::Type WaveTableType;
};
}