Add IAudioEffect interface and FFTFilter DSP effect using KissFFT
This commit is contained in:
42
engine/include/XCEngine/Audio/FFTFilter.h
Normal file
42
engine/include/XCEngine/Audio/FFTFilter.h
Normal file
@@ -0,0 +1,42 @@
|
||||
#pragma once
|
||||
|
||||
#include "IAudioEffect.h"
|
||||
#include <vector>
|
||||
|
||||
namespace XCEngine {
|
||||
namespace Audio {
|
||||
|
||||
class FFTFilter : public IAudioEffect {
|
||||
public:
|
||||
FFTFilter();
|
||||
explicit FFTFilter(uint32 fftSize);
|
||||
~FFTFilter() override;
|
||||
|
||||
void ProcessAudio(float* buffer, uint32 sampleCount, uint32 channels) override;
|
||||
|
||||
void SetFFTSize(uint32 size);
|
||||
uint32 GetFFTSize() const { return m_fftSize; }
|
||||
|
||||
void SetSmoothingFactor(float factor);
|
||||
float GetSmoothingFactor() const { return m_smoothingFactor; }
|
||||
|
||||
const float* GetSpectrumData() const { return m_spectrumData.data(); }
|
||||
size_t GetSpectrumSize() const { return m_spectrumData.size(); }
|
||||
|
||||
private:
|
||||
void InitializeFFT(uint32 size);
|
||||
void ComputeFFT(const float* input, uint32 size);
|
||||
|
||||
private:
|
||||
uint32 m_fftSize = 1024;
|
||||
float m_smoothingFactor = 0.8f;
|
||||
|
||||
std::vector<float> m_spectrumData;
|
||||
std::vector<float> m_prevSpectrum;
|
||||
|
||||
void* m_fftConfig = nullptr;
|
||||
void* m_fftrConfig = nullptr;
|
||||
};
|
||||
|
||||
} // namespace Audio
|
||||
} // namespace XCEngine
|
||||
26
engine/include/XCEngine/Audio/IAudioEffect.h
Normal file
26
engine/include/XCEngine/Audio/IAudioEffect.h
Normal file
@@ -0,0 +1,26 @@
|
||||
#pragma once
|
||||
|
||||
#include "AudioTypes.h"
|
||||
|
||||
namespace XCEngine {
|
||||
namespace Audio {
|
||||
|
||||
class IAudioEffect {
|
||||
public:
|
||||
virtual ~IAudioEffect() = default;
|
||||
|
||||
virtual void ProcessAudio(float* buffer, uint32 sampleCount, uint32 channels) = 0;
|
||||
|
||||
virtual void SetEnabled(bool enabled) { m_enabled = enabled; }
|
||||
virtual bool IsEnabled() const { return m_enabled; }
|
||||
|
||||
virtual void SetWetMix(float wetMix) { m_wetMix = wetMix; }
|
||||
virtual float GetWetMix() const { return m_wetMix; }
|
||||
|
||||
protected:
|
||||
bool m_enabled = true;
|
||||
float m_wetMix = 1.0f;
|
||||
};
|
||||
|
||||
} // namespace Audio
|
||||
} // namespace XCEngine
|
||||
Reference in New Issue
Block a user