diff options
Diffstat (limited to 'alc')
-rw-r--r-- | alc/alc.cpp | 4 | ||||
-rw-r--r-- | alc/alu.cpp | 4 | ||||
-rw-r--r-- | alc/context.cpp | 2 | ||||
-rw-r--r-- | alc/effects/autowah.cpp | 2 | ||||
-rw-r--r-- | alc/effects/base.h | 201 | ||||
-rw-r--r-- | alc/effects/chorus.cpp | 2 | ||||
-rw-r--r-- | alc/effects/compressor.cpp | 2 | ||||
-rw-r--r-- | alc/effects/convolution.cpp | 2 | ||||
-rw-r--r-- | alc/effects/dedicated.cpp | 2 | ||||
-rw-r--r-- | alc/effects/distortion.cpp | 2 | ||||
-rw-r--r-- | alc/effects/echo.cpp | 2 | ||||
-rw-r--r-- | alc/effects/equalizer.cpp | 2 | ||||
-rw-r--r-- | alc/effects/fshifter.cpp | 2 | ||||
-rw-r--r-- | alc/effects/modulator.cpp | 2 | ||||
-rw-r--r-- | alc/effects/pshifter.cpp | 2 | ||||
-rw-r--r-- | alc/effects/reverb.cpp | 2 | ||||
-rw-r--r-- | alc/effects/vmorpher.cpp | 2 | ||||
-rw-r--r-- | alc/effectslot.cpp | 25 | ||||
-rw-r--r-- | alc/effectslot.h | 88 |
19 files changed, 19 insertions, 331 deletions
diff --git a/alc/alc.cpp b/alc/alc.cpp index 89c836d0..c6ac6508 100644 --- a/alc/alc.cpp +++ b/alc/alc.cpp @@ -68,8 +68,6 @@ #include "albit.h" #include "albyte.h" #include "alconfig.h" -#include "alc/context.h" -#include "alc/effectslot.h" #include "almalloc.h" #include "alnumeric.h" #include "aloptional.h" @@ -77,6 +75,7 @@ #include "alstring.h" #include "alu.h" #include "atomic.h" +#include "context.h" #include "core/ambidefs.h" #include "core/bformatdec.h" #include "core/bs2b.h" @@ -84,6 +83,7 @@ #include "core/cpu_caps.h" #include "core/devformat.h" #include "core/device.h" +#include "core/effectslot.h" #include "core/except.h" #include "core/helpers.h" #include "core/mastering.h" diff --git a/alc/alu.cpp b/alc/alu.cpp index 54bb7001..d11a6c18 100644 --- a/alc/alu.cpp +++ b/alc/alu.cpp @@ -56,6 +56,8 @@ #include "core/cpu_caps.h" #include "core/devformat.h" #include "core/device.h" +#include "core/effects/base.h" +#include "core/effectslot.h" #include "core/filters/biquad.h" #include "core/filters/nfc.h" #include "core/fpu_ctrl.h" @@ -68,8 +70,6 @@ #include "core/uhjfilter.h" #include "core/voice.h" #include "core/voice_change.h" -#include "effects/base.h" -#include "effectslot.h" #include "intrusive_ptr.h" #include "math_defs.h" #include "opthelpers.h" diff --git a/alc/context.cpp b/alc/context.cpp index af78603a..b870a2a3 100644 --- a/alc/context.cpp +++ b/alc/context.cpp @@ -21,11 +21,11 @@ #include "alc/alu.h" #include "core/async_event.h" #include "core/device.h" +#include "core/effectslot.h" #include "core/logging.h" #include "core/voice.h" #include "core/voice_change.h" #include "device.h" -#include "effectslot.h" #include "ringbuffer.h" #include "vecmat.h" diff --git a/alc/effects/autowah.cpp b/alc/effects/autowah.cpp index 9c2ec335..f496eb51 100644 --- a/alc/effects/autowah.cpp +++ b/alc/effects/autowah.cpp @@ -27,7 +27,6 @@ #include <utility> #include "alc/effects/base.h" -#include "alc/effectslot.h" #include "almalloc.h" #include "alnumeric.h" #include "alspan.h" @@ -36,6 +35,7 @@ #include "core/context.h" #include "core/devformat.h" #include "core/device.h" +#include "core/effectslot.h" #include "core/mixer.h" #include "intrusive_ptr.h" #include "math_defs.h" 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); diff --git a/alc/effects/chorus.cpp b/alc/effects/chorus.cpp index 3a1b9ae4..7d32f8ff 100644 --- a/alc/effects/chorus.cpp +++ b/alc/effects/chorus.cpp @@ -27,7 +27,6 @@ #include <iterator> #include "alc/effects/base.h" -#include "alc/effectslot.h" #include "almalloc.h" #include "alnumeric.h" #include "alspan.h" @@ -35,6 +34,7 @@ #include "core/context.h" #include "core/devformat.h" #include "core/device.h" +#include "core/effectslot.h" #include "core/mixer.h" #include "core/mixer/defs.h" #include "core/resampler_limits.h" diff --git a/alc/effects/compressor.cpp b/alc/effects/compressor.cpp index 030bfe08..366f2275 100644 --- a/alc/effects/compressor.cpp +++ b/alc/effects/compressor.cpp @@ -38,7 +38,6 @@ #include <utility> #include "alc/effects/base.h" -#include "alc/effectslot.h" #include "almalloc.h" #include "alnumeric.h" #include "alspan.h" @@ -46,6 +45,7 @@ #include "core/bufferline.h" #include "core/devformat.h" #include "core/device.h" +#include "core/effectslot.h" #include "core/mixer.h" #include "core/mixer/defs.h" #include "intrusive_ptr.h" diff --git a/alc/effects/convolution.cpp b/alc/effects/convolution.cpp index 5724badb..dbbca143 100644 --- a/alc/effects/convolution.cpp +++ b/alc/effects/convolution.cpp @@ -19,7 +19,6 @@ #include "albyte.h" #include "alcomplex.h" -#include "alc/effectslot.h" #include "almalloc.h" #include "alnumeric.h" #include "alspan.h" @@ -30,6 +29,7 @@ #include "core/context.h" #include "core/devformat.h" #include "core/device.h" +#include "core/effectslot.h" #include "core/filters/splitter.h" #include "core/fmt_traits.h" #include "core/mixer.h" diff --git a/alc/effects/dedicated.cpp b/alc/effects/dedicated.cpp index e7ea89e0..671eb5ec 100644 --- a/alc/effects/dedicated.cpp +++ b/alc/effects/dedicated.cpp @@ -26,12 +26,12 @@ #include <iterator> #include "alc/effects/base.h" -#include "alc/effectslot.h" #include "almalloc.h" #include "alspan.h" #include "core/bufferline.h" #include "core/devformat.h" #include "core/device.h" +#include "core/effectslot.h" #include "core/mixer.h" #include "intrusive_ptr.h" diff --git a/alc/effects/distortion.cpp b/alc/effects/distortion.cpp index 26b4df8e..c9366791 100644 --- a/alc/effects/distortion.cpp +++ b/alc/effects/distortion.cpp @@ -26,7 +26,6 @@ #include <iterator> #include "alc/effects/base.h" -#include "alc/effectslot.h" #include "almalloc.h" #include "alnumeric.h" #include "alspan.h" @@ -34,6 +33,7 @@ #include "core/context.h" #include "core/devformat.h" #include "core/device.h" +#include "core/effectslot.h" #include "core/filters/biquad.h" #include "core/mixer.h" #include "core/mixer/defs.h" diff --git a/alc/effects/echo.cpp b/alc/effects/echo.cpp index 4cdef37c..5d003718 100644 --- a/alc/effects/echo.cpp +++ b/alc/effects/echo.cpp @@ -27,7 +27,6 @@ #include <tuple> #include "alc/effects/base.h" -#include "alc/effectslot.h" #include "almalloc.h" #include "alnumeric.h" #include "alspan.h" @@ -35,6 +34,7 @@ #include "core/context.h" #include "core/devformat.h" #include "core/device.h" +#include "core/effectslot.h" #include "core/filters/biquad.h" #include "core/mixer.h" #include "intrusive_ptr.h" diff --git a/alc/effects/equalizer.cpp b/alc/effects/equalizer.cpp index 800330a3..67ad67b0 100644 --- a/alc/effects/equalizer.cpp +++ b/alc/effects/equalizer.cpp @@ -28,7 +28,6 @@ #include <utility> #include "alc/effects/base.h" -#include "alc/effectslot.h" #include "almalloc.h" #include "alspan.h" #include "core/ambidefs.h" @@ -36,6 +35,7 @@ #include "core/context.h" #include "core/devformat.h" #include "core/device.h" +#include "core/effectslot.h" #include "core/filters/biquad.h" #include "core/mixer.h" #include "intrusive_ptr.h" diff --git a/alc/effects/fshifter.cpp b/alc/effects/fshifter.cpp index c25aab82..b143db0c 100644 --- a/alc/effects/fshifter.cpp +++ b/alc/effects/fshifter.cpp @@ -28,7 +28,6 @@ #include <iterator> #include "alc/effects/base.h" -#include "alc/effectslot.h" #include "alcomplex.h" #include "almalloc.h" #include "alnumeric.h" @@ -37,6 +36,7 @@ #include "core/context.h" #include "core/devformat.h" #include "core/device.h" +#include "core/effectslot.h" #include "core/mixer.h" #include "core/mixer/defs.h" #include "intrusive_ptr.h" diff --git a/alc/effects/modulator.cpp b/alc/effects/modulator.cpp index a518ff63..4a086b11 100644 --- a/alc/effects/modulator.cpp +++ b/alc/effects/modulator.cpp @@ -26,7 +26,6 @@ #include <iterator> #include "alc/effects/base.h" -#include "alc/effectslot.h" #include "almalloc.h" #include "alnumeric.h" #include "alspan.h" @@ -35,6 +34,7 @@ #include "core/context.h" #include "core/devformat.h" #include "core/device.h" +#include "core/effectslot.h" #include "core/filters/biquad.h" #include "core/mixer.h" #include "intrusive_ptr.h" diff --git a/alc/effects/pshifter.cpp b/alc/effects/pshifter.cpp index 26115605..dae0a267 100644 --- a/alc/effects/pshifter.cpp +++ b/alc/effects/pshifter.cpp @@ -28,7 +28,6 @@ #include <iterator> #include "alc/effects/base.h" -#include "alc/effectslot.h" #include "alcomplex.h" #include "almalloc.h" #include "alnumeric.h" @@ -36,6 +35,7 @@ #include "core/bufferline.h" #include "core/devformat.h" #include "core/device.h" +#include "core/effectslot.h" #include "core/mixer.h" #include "core/mixer/defs.h" #include "intrusive_ptr.h" diff --git a/alc/effects/reverb.cpp b/alc/effects/reverb.cpp index d6f1dbbf..db0aeb62 100644 --- a/alc/effects/reverb.cpp +++ b/alc/effects/reverb.cpp @@ -29,7 +29,6 @@ #include <stdint.h> #include "alc/effects/base.h" -#include "alc/effectslot.h" #include "almalloc.h" #include "alnumeric.h" #include "alspan.h" @@ -38,6 +37,7 @@ #include "core/context.h" #include "core/devformat.h" #include "core/device.h" +#include "core/effectslot.h" #include "core/filters/biquad.h" #include "core/filters/splitter.h" #include "core/mixer.h" diff --git a/alc/effects/vmorpher.cpp b/alc/effects/vmorpher.cpp index 6c419ba2..e3eed179 100644 --- a/alc/effects/vmorpher.cpp +++ b/alc/effects/vmorpher.cpp @@ -39,7 +39,6 @@ #include <iterator> #include "alc/effects/base.h" -#include "alc/effectslot.h" #include "almalloc.h" #include "alnumeric.h" #include "alspan.h" @@ -48,6 +47,7 @@ #include "core/context.h" #include "core/devformat.h" #include "core/device.h" +#include "core/effectslot.h" #include "core/mixer.h" #include "intrusive_ptr.h" #include "math_defs.h" diff --git a/alc/effectslot.cpp b/alc/effectslot.cpp deleted file mode 100644 index 51fb8d46..00000000 --- a/alc/effectslot.cpp +++ /dev/null @@ -1,25 +0,0 @@ - -#include "config.h" - -#include "effectslot.h" - -#include <stddef.h> - -#include "almalloc.h" -#include "context.h" - - -EffectSlotArray *EffectSlot::CreatePtrArray(size_t count) noexcept -{ - /* Allocate space for twice as many pointers, so the mixer has scratch - * space to store a sorted list during mixing. - */ - void *ptr{al_calloc(alignof(EffectSlotArray), EffectSlotArray::Sizeof(count*2))}; - return al::construct_at(static_cast<EffectSlotArray*>(ptr), count); -} - -EffectSlot::~EffectSlot() -{ - if(mWetBuffer) - mWetBuffer->mInUse = false; -} diff --git a/alc/effectslot.h b/alc/effectslot.h deleted file mode 100644 index cbb1a2f5..00000000 --- a/alc/effectslot.h +++ /dev/null @@ -1,88 +0,0 @@ -#ifndef EFFECTSLOT_H -#define EFFECTSLOT_H - -#include <atomic> - -#include "almalloc.h" -#include "core/device.h" -#include "effects/base.h" -#include "intrusive_ptr.h" - -struct EffectSlot; -struct WetBuffer; - -using EffectSlotArray = al::FlexArray<EffectSlot*>; - - -enum class EffectSlotType : unsigned char { - None, - Reverb, - Chorus, - Distortion, - Echo, - Flanger, - FrequencyShifter, - VocalMorpher, - PitchShifter, - RingModulator, - Autowah, - Compressor, - Equalizer, - EAXReverb, - DedicatedLFE, - DedicatedDialog, - Convolution -}; - -struct EffectSlotProps { - float Gain; - bool AuxSendAuto; - EffectSlot *Target; - - EffectSlotType Type; - EffectProps Props; - - al::intrusive_ptr<EffectState> State; - - std::atomic<EffectSlotProps*> next; - - DEF_NEWDEL(EffectSlotProps) -}; - - -struct EffectSlot { - std::atomic<EffectSlotProps*> Update{nullptr}; - - /* Wet buffer configuration is ACN channel order with N3D scaling. - * Consequently, effects that only want to work with mono input can use - * channel 0 by itself. Effects that want multichannel can process the - * ambisonics signal and make a B-Format source pan. - */ - MixParams Wet; - - float Gain{1.0f}; - bool AuxSendAuto{true}; - EffectSlot *Target{nullptr}; - - EffectSlotType EffectType{EffectSlotType::None}; - EffectProps mEffectProps{}; - EffectState *mEffectState{nullptr}; - - float RoomRolloff{0.0f}; /* Added to the source's room rolloff, not multiplied. */ - float DecayTime{0.0f}; - float DecayLFRatio{0.0f}; - float DecayHFRatio{0.0f}; - bool DecayHFLimit{false}; - float AirAbsorptionGainHF{1.0f}; - - /* Mixing buffer used by the Wet mix. */ - WetBuffer *mWetBuffer{nullptr}; - - ~EffectSlot(); - - static EffectSlotArray *CreatePtrArray(size_t count) noexcept; - - DISABLE_ALLOC() -}; - -#endif /* EFFECTSLOT_H */ |