diff options
author | Chris Robinson <[email protected]> | 2021-12-17 17:13:59 -0800 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2021-12-17 17:13:59 -0800 |
commit | d16b61dffb24cbe90e03e921684cb538cb23e181 (patch) | |
tree | 7e0a363ad68fd21a1f24dfdf08673cb7f6fdb771 /alc/effects/base.h | |
parent | fbc42aad7e70131655387c06092f8cbbc286c0db (diff) |
Move the effects base and effectslot to core
Diffstat (limited to 'alc/effects/base.h')
-rw-r--r-- | alc/effects/base.h | 201 |
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); |