aboutsummaryrefslogtreecommitdiffstats
path: root/alc/effects/base.h
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2021-12-17 17:13:59 -0800
committerChris Robinson <[email protected]>2021-12-17 17:13:59 -0800
commitd16b61dffb24cbe90e03e921684cb538cb23e181 (patch)
tree7e0a363ad68fd21a1f24dfdf08673cb7f6fdb771 /alc/effects/base.h
parentfbc42aad7e70131655387c06092f8cbbc286c0db (diff)
Move the effects base and effectslot to core
Diffstat (limited to 'alc/effects/base.h')
-rw-r--r--alc/effects/base.h201
1 files changed, 1 insertions, 200 deletions
diff --git a/alc/effects/base.h b/alc/effects/base.h
index 1fb339aa..95695857 100644
--- a/alc/effects/base.h
+++ b/alc/effects/base.h
@@ -1,206 +1,7 @@
#ifndef EFFECTS_BASE_H
#define EFFECTS_BASE_H
-#include <stddef.h>
-
-#include "albyte.h"
-#include "almalloc.h"
-#include "alspan.h"
-#include "atomic.h"
-#include "core/bufferline.h"
-#include "intrusive_ptr.h"
-
-struct BufferStorage;
-struct ContextBase;
-struct DeviceBase;
-struct EffectSlot;
-struct MixParams;
-struct RealMixParams;
-
-
-/** Target gain for the reverb decay feedback reaching the decay time. */
-constexpr float ReverbDecayGain{0.001f}; /* -60 dB */
-
-constexpr float ReverbMaxReflectionsDelay{0.3f};
-constexpr float ReverbMaxLateReverbDelay{0.1f};
-
-enum class ChorusWaveform {
- Sinusoid,
- Triangle
-};
-
-constexpr float ChorusMaxDelay{0.016f};
-constexpr float FlangerMaxDelay{0.004f};
-
-constexpr float EchoMaxDelay{0.207f};
-constexpr float EchoMaxLRDelay{0.404f};
-
-enum class FShifterDirection {
- Down,
- Up,
- Off
-};
-
-enum class ModulatorWaveform {
- Sinusoid,
- Sawtooth,
- Square
-};
-
-enum class VMorpherPhenome {
- A, E, I, O, U,
- AA, AE, AH, AO, EH, ER, IH, IY, UH, UW,
- B, D, F, G, J, K, L, M, N, P, R, S, T, V, Z
-};
-
-enum class VMorpherWaveform {
- Sinusoid,
- Triangle,
- Sawtooth
-};
-
-union EffectProps {
- struct {
- // Shared Reverb Properties
- float Density;
- float Diffusion;
- float Gain;
- float GainHF;
- float DecayTime;
- float DecayHFRatio;
- float ReflectionsGain;
- float ReflectionsDelay;
- float LateReverbGain;
- float LateReverbDelay;
- float AirAbsorptionGainHF;
- float RoomRolloffFactor;
- bool DecayHFLimit;
-
- // Additional EAX Reverb Properties
- float GainLF;
- float DecayLFRatio;
- float ReflectionsPan[3];
- float LateReverbPan[3];
- float EchoTime;
- float EchoDepth;
- float ModulationTime;
- float ModulationDepth;
- float HFReference;
- float LFReference;
- } Reverb;
-
- struct {
- float AttackTime;
- float ReleaseTime;
- float Resonance;
- float PeakGain;
- } Autowah;
-
- struct {
- ChorusWaveform Waveform;
- int Phase;
- float Rate;
- float Depth;
- float Feedback;
- float Delay;
- } Chorus; /* Also Flanger */
-
- struct {
- bool OnOff;
- } Compressor;
-
- struct {
- float Edge;
- float Gain;
- float LowpassCutoff;
- float EQCenter;
- float EQBandwidth;
- } Distortion;
-
- struct {
- float Delay;
- float LRDelay;
-
- float Damping;
- float Feedback;
-
- float Spread;
- } Echo;
-
- struct {
- float LowCutoff;
- float LowGain;
- float Mid1Center;
- float Mid1Gain;
- float Mid1Width;
- float Mid2Center;
- float Mid2Gain;
- float Mid2Width;
- float HighCutoff;
- float HighGain;
- } Equalizer;
-
- struct {
- float Frequency;
- FShifterDirection LeftDirection;
- FShifterDirection RightDirection;
- } Fshifter;
-
- struct {
- float Frequency;
- float HighPassCutoff;
- ModulatorWaveform Waveform;
- } Modulator;
-
- struct {
- int CoarseTune;
- int FineTune;
- } Pshifter;
-
- struct {
- float Rate;
- VMorpherPhenome PhonemeA;
- VMorpherPhenome PhonemeB;
- int PhonemeACoarseTuning;
- int PhonemeBCoarseTuning;
- VMorpherWaveform Waveform;
- } Vmorpher;
-
- struct {
- float Gain;
- } Dedicated;
-};
-
-
-struct EffectTarget {
- MixParams *Main;
- RealMixParams *RealOut;
-};
-
-struct EffectState : public al::intrusive_ref<EffectState> {
- struct Buffer {
- const BufferStorage *storage;
- al::span<const al::byte> samples;
- };
-
- al::span<FloatBufferLine> mOutTarget;
-
-
- virtual ~EffectState() = default;
-
- virtual void deviceUpdate(const DeviceBase *device, const Buffer &buffer) = 0;
- virtual void update(const ContextBase *context, const EffectSlot *slot,
- const EffectProps *props, const EffectTarget target) = 0;
- virtual void process(const size_t samplesToDo, const al::span<const FloatBufferLine> samplesIn,
- const al::span<FloatBufferLine> samplesOut) = 0;
-};
-
-
-struct EffectStateFactory {
- virtual ~EffectStateFactory() = default;
-
- virtual al::intrusive_ptr<EffectState> create() = 0;
-};
+#include "core/effects/base.h"
EffectStateFactory *NullStateFactory_getFactory(void);