1 #ifndef CORE_EFFECTS_BASE_H
2 #define CORE_EFFECTS_BASE_H
10 #include "core/bufferline.h"
11 #include "intrusive_ptr.h"
21 /** Target gain for the reverb decay feedback reaching the decay time. */
22 constexpr float ReverbDecayGain{0.001f}; /* -60 dB */
24 constexpr float ReverbMaxReflectionsDelay{0.3f};
25 constexpr float ReverbMaxLateReverbDelay{0.1f};
27 enum class ChorusWaveform {
32 constexpr float ChorusMaxDelay{0.016f};
33 constexpr float FlangerMaxDelay{0.004f};
35 constexpr float EchoMaxDelay{0.207f};
36 constexpr float EchoMaxLRDelay{0.404f};
38 enum class FShifterDirection {
44 enum class ModulatorWaveform {
50 enum class VMorpherPhenome {
52 AA, AE, AH, AO, EH, ER, IH, IY, UH, UW,
53 B, D, F, G, J, K, L, M, N, P, R, S, T, V, Z
56 enum class VMorpherWaveform {
72 float ReflectionsGain;
73 float ReflectionsDelay;
74 float ReflectionsPan[3];
76 float LateReverbDelay;
77 float LateReverbPan[3];
81 float ModulationDepth;
82 float AirAbsorptionGainHF;
85 float RoomRolloffFactor;
97 ChorusWaveform Waveform;
103 } Chorus; /* Also Flanger */
142 FShifterDirection LeftDirection;
143 FShifterDirection RightDirection;
148 float HighPassCutoff;
149 ModulatorWaveform Waveform;
159 VMorpherPhenome PhonemeA;
160 VMorpherPhenome PhonemeB;
161 int PhonemeACoarseTuning;
162 int PhonemeBCoarseTuning;
163 VMorpherWaveform Waveform;
172 struct EffectTarget {
174 RealMixParams *RealOut;
177 struct EffectState : public al::intrusive_ref<EffectState> {
178 al::span<FloatBufferLine> mOutTarget;
181 virtual ~EffectState() = default;
183 virtual void deviceUpdate(const DeviceBase *device, const BufferStorage *buffer) = 0;
184 virtual void update(const ContextBase *context, const EffectSlot *slot,
185 const EffectProps *props, const EffectTarget target) = 0;
186 virtual void process(const size_t samplesToDo, const al::span<const FloatBufferLine> samplesIn,
187 const al::span<FloatBufferLine> samplesOut) = 0;
191 struct EffectStateFactory {
192 virtual ~EffectStateFactory() = default;
194 virtual al::intrusive_ptr<EffectState> create() = 0;
197 #endif /* CORE_EFFECTS_BASE_H */