diff options
Diffstat (limited to 'Alc')
-rw-r--r-- | Alc/effects/autowah.cpp | 15 | ||||
-rw-r--r-- | Alc/effects/chorus.cpp | 49 | ||||
-rw-r--r-- | Alc/effects/compressor.cpp | 12 | ||||
-rw-r--r-- | Alc/effects/dedicated.cpp | 12 | ||||
-rw-r--r-- | Alc/effects/distortion.cpp | 16 | ||||
-rw-r--r-- | Alc/effects/echo.cpp | 16 | ||||
-rw-r--r-- | Alc/effects/equalizer.cpp | 20 | ||||
-rw-r--r-- | Alc/effects/fshifter.cpp | 13 | ||||
-rw-r--r-- | Alc/effects/modulator.cpp | 24 | ||||
-rw-r--r-- | Alc/effects/null.cpp | 14 | ||||
-rw-r--r-- | Alc/effects/pshifter.cpp | 12 | ||||
-rw-r--r-- | Alc/effects/reverb.cpp | 81 |
12 files changed, 267 insertions, 17 deletions
diff --git a/Alc/effects/autowah.cpp b/Alc/effects/autowah.cpp index 06628e25..03747796 100644 --- a/Alc/effects/autowah.cpp +++ b/Alc/effects/autowah.cpp @@ -33,6 +33,8 @@ #include "filters/biquad.h" #include "vecmat.h" +namespace { + #define MIN_FREQ 20.0f #define MAX_FREQ 2500.0f #define Q_FACTOR 5.0f @@ -199,11 +201,24 @@ void ALautowahState::process(ALsizei samplesToDo, const ALfloat (*RESTRICT sampl struct AutowahStateFactory final : public EffectStateFactory { EffectState *create() override; + ALeffectProps getDefaultProps() const noexcept override; }; EffectState *AutowahStateFactory::create() { return new ALautowahState{}; } +ALeffectProps AutowahStateFactory::getDefaultProps() const noexcept +{ + ALeffectProps props{}; + props.Autowah.AttackTime = AL_AUTOWAH_DEFAULT_ATTACK_TIME; + props.Autowah.ReleaseTime = AL_AUTOWAH_DEFAULT_RELEASE_TIME; + props.Autowah.Resonance = AL_AUTOWAH_DEFAULT_RESONANCE; + props.Autowah.PeakGain = AL_AUTOWAH_DEFAULT_PEAK_GAIN; + return props; +} + +} // namespace + EffectStateFactory *AutowahStateFactory_getFactory() { static AutowahStateFactory AutowahFactory{}; diff --git a/Alc/effects/chorus.cpp b/Alc/effects/chorus.cpp index 758d521c..bd32a3d1 100644 --- a/Alc/effects/chorus.cpp +++ b/Alc/effects/chorus.cpp @@ -258,11 +258,47 @@ void ChorusState::process(ALsizei samplesToDo, const ALfloat (*RESTRICT samplesI struct ChorusStateFactory final : public EffectStateFactory { EffectState *create() override; + ALeffectProps getDefaultProps() const noexcept override; }; EffectState *ChorusStateFactory::create() { return new ChorusState{}; } +ALeffectProps ChorusStateFactory::getDefaultProps() const noexcept +{ + ALeffectProps props{}; + props.Chorus.Waveform = AL_CHORUS_DEFAULT_WAVEFORM; + props.Chorus.Phase = AL_CHORUS_DEFAULT_PHASE; + props.Chorus.Rate = AL_CHORUS_DEFAULT_RATE; + props.Chorus.Depth = AL_CHORUS_DEFAULT_DEPTH; + props.Chorus.Feedback = AL_CHORUS_DEFAULT_FEEDBACK; + props.Chorus.Delay = AL_CHORUS_DEFAULT_DELAY; + return props; +} + +/* Flanger is basically a chorus with a really short delay. They can both use + * the same processing functions, so piggyback flanger on the chorus functions. + */ +struct FlangerStateFactory final : public EffectStateFactory { + EffectState *create() override; + ALeffectProps getDefaultProps() const noexcept override; +}; + +EffectState *FlangerStateFactory::create() +{ return new ChorusState{}; } + +ALeffectProps FlangerStateFactory::getDefaultProps() const noexcept +{ + ALeffectProps props{}; + props.Chorus.Waveform = AL_FLANGER_DEFAULT_WAVEFORM; + props.Chorus.Phase = AL_FLANGER_DEFAULT_PHASE; + props.Chorus.Rate = AL_FLANGER_DEFAULT_RATE; + props.Chorus.Depth = AL_FLANGER_DEFAULT_DEPTH; + props.Chorus.Feedback = AL_FLANGER_DEFAULT_FEEDBACK; + props.Chorus.Delay = AL_FLANGER_DEFAULT_DELAY; + return props; +} + } // namespace EffectStateFactory *ChorusStateFactory_getFactory() @@ -271,6 +307,12 @@ EffectStateFactory *ChorusStateFactory_getFactory() return &ChorusFactory; } +EffectStateFactory *FlangerStateFactory_getFactory() +{ + static FlangerStateFactory FlangerFactory{}; + return &FlangerFactory; +} + void ALchorus_setParami(ALeffect *effect, ALCcontext *context, ALenum param, ALint val) { @@ -381,13 +423,6 @@ void ALchorus_getParamfv(const ALeffect *effect, ALCcontext *context, ALenum par DEFINE_ALEFFECT_VTABLE(ALchorus); -/* Flanger is basically a chorus with a really short delay. They can both use - * the same processing functions, so piggyback flanger on the chorus functions. - */ -EffectStateFactory *FlangerStateFactory_getFactory() -{ return ChorusStateFactory_getFactory(); } - - void ALflanger_setParami(ALeffect *effect, ALCcontext *context, ALenum param, ALint val) { ALeffectProps *props = &effect->Props; diff --git a/Alc/effects/compressor.cpp b/Alc/effects/compressor.cpp index 12a8c886..d6cb3f4a 100644 --- a/Alc/effects/compressor.cpp +++ b/Alc/effects/compressor.cpp @@ -30,6 +30,8 @@ #include "vecmat.h" +namespace { + #define AMP_ENVELOPE_MIN 0.5f #define AMP_ENVELOPE_MAX 2.0f @@ -159,11 +161,21 @@ void ALcompressorState::process(ALsizei samplesToDo, const ALfloat (*RESTRICT sa struct CompressorStateFactory final : public EffectStateFactory { EffectState *create() override; + ALeffectProps getDefaultProps() const noexcept override; }; EffectState *CompressorStateFactory::create() { return new ALcompressorState{}; } +ALeffectProps CompressorStateFactory::getDefaultProps() const noexcept +{ + ALeffectProps props{}; + props.Compressor.OnOff = AL_COMPRESSOR_DEFAULT_ONOFF; + return props; +} + +} // namespace + EffectStateFactory *CompressorStateFactory_getFactory() { static CompressorStateFactory CompressorFactory{}; diff --git a/Alc/effects/dedicated.cpp b/Alc/effects/dedicated.cpp index 8cc4b936..041e951b 100644 --- a/Alc/effects/dedicated.cpp +++ b/Alc/effects/dedicated.cpp @@ -31,6 +31,8 @@ #include "alu.h" +namespace { + struct ALdedicatedState final : public EffectState { ALfloat mCurrentGains[MAX_OUTPUT_CHANNELS]; ALfloat mTargetGains[MAX_OUTPUT_CHANNELS]; @@ -97,11 +99,21 @@ void ALdedicatedState::process(ALsizei samplesToDo, const ALfloat (*RESTRICT sam struct DedicatedStateFactory final : public EffectStateFactory { EffectState *create() override; + ALeffectProps getDefaultProps() const noexcept override; }; EffectState *DedicatedStateFactory::create() { return new ALdedicatedState{}; } +ALeffectProps DedicatedStateFactory::getDefaultProps() const noexcept +{ + ALeffectProps props{}; + props.Dedicated.Gain = 1.0f; + return props; +} + +} // namespace + EffectStateFactory *DedicatedStateFactory_getFactory() { static DedicatedStateFactory DedicatedFactory{}; diff --git a/Alc/effects/distortion.cpp b/Alc/effects/distortion.cpp index ce403e8e..3b1df2d5 100644 --- a/Alc/effects/distortion.cpp +++ b/Alc/effects/distortion.cpp @@ -33,6 +33,8 @@ #include "filters/biquad.h" +namespace { + struct ALdistortionState final : public EffectState { /* Effect gains for each channel */ ALfloat mGain[MAX_OUTPUT_CHANNELS]{}; @@ -164,11 +166,25 @@ void ALdistortionState::process(ALsizei samplesToDo, const ALfloat (*RESTRICT sa struct DistortionStateFactory final : public EffectStateFactory { EffectState *create() override; + ALeffectProps getDefaultProps() const noexcept override; }; EffectState *DistortionStateFactory::create() { return new ALdistortionState{}; } +ALeffectProps DistortionStateFactory::getDefaultProps() const noexcept +{ + ALeffectProps props{}; + props.Distortion.Edge = AL_DISTORTION_DEFAULT_EDGE; + props.Distortion.Gain = AL_DISTORTION_DEFAULT_GAIN; + props.Distortion.LowpassCutoff = AL_DISTORTION_DEFAULT_LOWPASS_CUTOFF; + props.Distortion.EQCenter = AL_DISTORTION_DEFAULT_EQCENTER; + props.Distortion.EQBandwidth = AL_DISTORTION_DEFAULT_EQBANDWIDTH; + return props; +} + +} // namespace + EffectStateFactory *DistortionStateFactory_getFactory() { static DistortionStateFactory DistortionFactory{}; diff --git a/Alc/effects/echo.cpp b/Alc/effects/echo.cpp index 1325e015..e866181d 100644 --- a/Alc/effects/echo.cpp +++ b/Alc/effects/echo.cpp @@ -35,6 +35,8 @@ #include "vector.h" +namespace { + struct ALechoState final : public EffectState { al::vector<ALfloat,16> mSampleBuffer; @@ -175,11 +177,25 @@ void ALechoState::process(ALsizei samplesToDo, const ALfloat (*RESTRICT samplesI struct EchoStateFactory final : public EffectStateFactory { EffectState *create() override; + ALeffectProps getDefaultProps() const noexcept override; }; EffectState *EchoStateFactory::create() { return new ALechoState{}; } +ALeffectProps EchoStateFactory::getDefaultProps() const noexcept +{ + ALeffectProps props{}; + props.Echo.Delay = AL_ECHO_DEFAULT_DELAY; + props.Echo.LRDelay = AL_ECHO_DEFAULT_LRDELAY; + props.Echo.Damping = AL_ECHO_DEFAULT_DAMPING; + props.Echo.Feedback = AL_ECHO_DEFAULT_FEEDBACK; + props.Echo.Spread = AL_ECHO_DEFAULT_SPREAD; + return props; +} + +} // namespace + EffectStateFactory *EchoStateFactory_getFactory() { static EchoStateFactory EchoFactory{}; diff --git a/Alc/effects/equalizer.cpp b/Alc/effects/equalizer.cpp index c4d2e53f..27a5539c 100644 --- a/Alc/effects/equalizer.cpp +++ b/Alc/effects/equalizer.cpp @@ -173,15 +173,33 @@ void ALequalizerState::process(ALsizei samplesToDo, const ALfloat (*RESTRICT sam } } -} // namespace struct EqualizerStateFactory final : public EffectStateFactory { EffectState *create() override; + ALeffectProps getDefaultProps() const noexcept override; }; EffectState *EqualizerStateFactory::create() { return new ALequalizerState{}; } +ALeffectProps EqualizerStateFactory::getDefaultProps() const noexcept +{ + ALeffectProps props{}; + props.Equalizer.LowCutoff = AL_EQUALIZER_DEFAULT_LOW_CUTOFF; + props.Equalizer.LowGain = AL_EQUALIZER_DEFAULT_LOW_GAIN; + props.Equalizer.Mid1Center = AL_EQUALIZER_DEFAULT_MID1_CENTER; + props.Equalizer.Mid1Gain = AL_EQUALIZER_DEFAULT_MID1_GAIN; + props.Equalizer.Mid1Width = AL_EQUALIZER_DEFAULT_MID1_WIDTH; + props.Equalizer.Mid2Center = AL_EQUALIZER_DEFAULT_MID2_CENTER; + props.Equalizer.Mid2Gain = AL_EQUALIZER_DEFAULT_MID2_GAIN; + props.Equalizer.Mid2Width = AL_EQUALIZER_DEFAULT_MID2_WIDTH; + props.Equalizer.HighCutoff = AL_EQUALIZER_DEFAULT_HIGH_CUTOFF; + props.Equalizer.HighGain = AL_EQUALIZER_DEFAULT_HIGH_GAIN; + return props; +} + +} // namespace + EffectStateFactory *EqualizerStateFactory_getFactory() { static EqualizerStateFactory EqualizerFactory{}; diff --git a/Alc/effects/fshifter.cpp b/Alc/effects/fshifter.cpp index 21d3a706..ea24b477 100644 --- a/Alc/effects/fshifter.cpp +++ b/Alc/effects/fshifter.cpp @@ -202,15 +202,26 @@ void ALfshifterState::process(ALsizei samplesToDo, const ALfloat (*RESTRICT samp maxi(samplesToDo, 512), 0, samplesToDo); } -} // namespace struct FshifterStateFactory final : public EffectStateFactory { EffectState *create() override; + ALeffectProps getDefaultProps() const noexcept override; }; EffectState *FshifterStateFactory::create() { return new ALfshifterState{}; } +ALeffectProps FshifterStateFactory::getDefaultProps() const noexcept +{ + ALeffectProps props{}; + props.Fshifter.Frequency = AL_FREQUENCY_SHIFTER_DEFAULT_FREQUENCY; + props.Fshifter.LeftDirection = AL_FREQUENCY_SHIFTER_DEFAULT_LEFT_DIRECTION; + props.Fshifter.RightDirection = AL_FREQUENCY_SHIFTER_DEFAULT_RIGHT_DIRECTION; + return props; +} + +} // namespace + EffectStateFactory *FshifterStateFactory_getFactory() { static FshifterStateFactory FshifterFactory{}; diff --git a/Alc/effects/modulator.cpp b/Alc/effects/modulator.cpp index 6bfab546..f0c43d17 100644 --- a/Alc/effects/modulator.cpp +++ b/Alc/effects/modulator.cpp @@ -35,34 +35,36 @@ #include "vecmat.h" +namespace { + #define MAX_UPDATE_SAMPLES 128 #define WAVEFORM_FRACBITS 24 #define WAVEFORM_FRACONE (1<<WAVEFORM_FRACBITS) #define WAVEFORM_FRACMASK (WAVEFORM_FRACONE-1) -static inline ALfloat Sin(ALsizei index) +inline ALfloat Sin(ALsizei index) { return std::sin(static_cast<ALfloat>(index) * (al::MathDefs<float>::Tau() / static_cast<ALfloat>WAVEFORM_FRACONE)); } -static inline ALfloat Saw(ALsizei index) +inline ALfloat Saw(ALsizei index) { return static_cast<ALfloat>(index)*(2.0f/WAVEFORM_FRACONE) - 1.0f; } -static inline ALfloat Square(ALsizei index) +inline ALfloat Square(ALsizei index) { return static_cast<ALfloat>(((index>>(WAVEFORM_FRACBITS-2))&2) - 1); } -static inline ALfloat One(ALsizei UNUSED(index)) +inline ALfloat One(ALsizei UNUSED(index)) { return 1.0f; } template<ALfloat func(ALsizei)> -static void Modulate(ALfloat *RESTRICT dst, ALsizei index, const ALsizei step, ALsizei todo) +void Modulate(ALfloat *RESTRICT dst, ALsizei index, const ALsizei step, ALsizei todo) { ALsizei i; for(i = 0;i < todo;i++) @@ -173,11 +175,23 @@ void ALmodulatorState::process(ALsizei samplesToDo, const ALfloat (*RESTRICT sam struct ModulatorStateFactory final : public EffectStateFactory { EffectState *create() override; + ALeffectProps getDefaultProps() const noexcept override; }; EffectState *ModulatorStateFactory::create() { return new ALmodulatorState{}; } +ALeffectProps ModulatorStateFactory::getDefaultProps() const noexcept +{ + ALeffectProps props{}; + props.Modulator.Frequency = AL_RING_MODULATOR_DEFAULT_FREQUENCY; + props.Modulator.HighPassCutoff = AL_RING_MODULATOR_DEFAULT_HIGHPASS_CUTOFF; + props.Modulator.Waveform = AL_RING_MODULATOR_DEFAULT_WAVEFORM; + return props; +} + +} // namespace + EffectStateFactory *ModulatorStateFactory_getFactory() { static ModulatorStateFactory ModulatorFactory{}; diff --git a/Alc/effects/null.cpp b/Alc/effects/null.cpp index 6c9e3008..0e9c982d 100644 --- a/Alc/effects/null.cpp +++ b/Alc/effects/null.cpp @@ -11,6 +11,8 @@ #include "alError.h" +namespace { + struct ALnullState final : public EffectState { ALnullState(); ~ALnullState() override; @@ -59,12 +61,22 @@ void ALnullState::process(ALsizei /*samplesToDo*/, const ALfloat (*RESTRICT /*sa struct NullStateFactory final : public EffectStateFactory { EffectState *create() override; + ALeffectProps getDefaultProps() const noexcept override; }; -/* Creates ALeffectState objects of the appropriate type. */ +/* Creates EffectState objects of the appropriate type. */ EffectState *NullStateFactory::create() { return new ALnullState{}; } +/* Returns an ALeffectProps initialized with this effect's default properties. */ +ALeffectProps NullStateFactory::getDefaultProps() const noexcept +{ + ALeffectProps props{}; + return props; +} + +} // namespace + EffectStateFactory *NullStateFactory_getFactory() { static NullStateFactory NullFactory{}; diff --git a/Alc/effects/pshifter.cpp b/Alc/effects/pshifter.cpp index aa7dae87..05add42a 100644 --- a/Alc/effects/pshifter.cpp +++ b/Alc/effects/pshifter.cpp @@ -325,15 +325,25 @@ void ALpshifterState::process(ALsizei samplesToDo, const ALfloat (*RESTRICT samp maxi(samplesToDo, 512), 0, samplesToDo); } -} // namespace struct PshifterStateFactory final : public EffectStateFactory { EffectState *create() override; + ALeffectProps getDefaultProps() const noexcept override; }; EffectState *PshifterStateFactory::create() { return new ALpshifterState{}; } +ALeffectProps PshifterStateFactory::getDefaultProps() const noexcept +{ + ALeffectProps props{}; + props.Pshifter.CoarseTune = AL_PITCH_SHIFTER_DEFAULT_COARSE_TUNE; + props.Pshifter.FineTune = AL_PITCH_SHIFTER_DEFAULT_FINE_TUNE; + return props; +} + +} // namespace + EffectStateFactory *PshifterStateFactory_getFactory() { static PshifterStateFactory PshifterFactory{}; diff --git a/Alc/effects/reverb.cpp b/Alc/effects/reverb.cpp index b963c2d5..da28a2ce 100644 --- a/Alc/effects/reverb.cpp +++ b/Alc/effects/reverb.cpp @@ -1464,11 +1464,87 @@ void ReverbState::process(ALsizei samplesToDo, const ALfloat (*RESTRICT samplesI struct ReverbStateFactory final : public EffectStateFactory { EffectState *create() override; + ALeffectProps getDefaultProps() const noexcept override; }; EffectState *ReverbStateFactory::create() { return new ReverbState{}; } +ALeffectProps ReverbStateFactory::getDefaultProps() const noexcept +{ + ALeffectProps props{}; + props.Reverb.Density = AL_EAXREVERB_DEFAULT_DENSITY; + props.Reverb.Diffusion = AL_EAXREVERB_DEFAULT_DIFFUSION; + props.Reverb.Gain = AL_EAXREVERB_DEFAULT_GAIN; + props.Reverb.GainHF = AL_EAXREVERB_DEFAULT_GAINHF; + props.Reverb.GainLF = AL_EAXREVERB_DEFAULT_GAINLF; + props.Reverb.DecayTime = AL_EAXREVERB_DEFAULT_DECAY_TIME; + props.Reverb.DecayHFRatio = AL_EAXREVERB_DEFAULT_DECAY_HFRATIO; + props.Reverb.DecayLFRatio = AL_EAXREVERB_DEFAULT_DECAY_LFRATIO; + props.Reverb.ReflectionsGain = AL_EAXREVERB_DEFAULT_REFLECTIONS_GAIN; + props.Reverb.ReflectionsDelay = AL_EAXREVERB_DEFAULT_REFLECTIONS_DELAY; + props.Reverb.ReflectionsPan[0] = AL_EAXREVERB_DEFAULT_REFLECTIONS_PAN_XYZ; + props.Reverb.ReflectionsPan[1] = AL_EAXREVERB_DEFAULT_REFLECTIONS_PAN_XYZ; + props.Reverb.ReflectionsPan[2] = AL_EAXREVERB_DEFAULT_REFLECTIONS_PAN_XYZ; + props.Reverb.LateReverbGain = AL_EAXREVERB_DEFAULT_LATE_REVERB_GAIN; + props.Reverb.LateReverbDelay = AL_EAXREVERB_DEFAULT_LATE_REVERB_DELAY; + props.Reverb.LateReverbPan[0] = AL_EAXREVERB_DEFAULT_LATE_REVERB_PAN_XYZ; + props.Reverb.LateReverbPan[1] = AL_EAXREVERB_DEFAULT_LATE_REVERB_PAN_XYZ; + props.Reverb.LateReverbPan[2] = AL_EAXREVERB_DEFAULT_LATE_REVERB_PAN_XYZ; + props.Reverb.EchoTime = AL_EAXREVERB_DEFAULT_ECHO_TIME; + props.Reverb.EchoDepth = AL_EAXREVERB_DEFAULT_ECHO_DEPTH; + props.Reverb.ModulationTime = AL_EAXREVERB_DEFAULT_MODULATION_TIME; + props.Reverb.ModulationDepth = AL_EAXREVERB_DEFAULT_MODULATION_DEPTH; + props.Reverb.AirAbsorptionGainHF = AL_EAXREVERB_DEFAULT_AIR_ABSORPTION_GAINHF; + props.Reverb.HFReference = AL_EAXREVERB_DEFAULT_HFREFERENCE; + props.Reverb.LFReference = AL_EAXREVERB_DEFAULT_LFREFERENCE; + props.Reverb.RoomRolloffFactor = AL_EAXREVERB_DEFAULT_ROOM_ROLLOFF_FACTOR; + props.Reverb.DecayHFLimit = AL_EAXREVERB_DEFAULT_DECAY_HFLIMIT; + return props; +} + + +struct StdReverbStateFactory final : public EffectStateFactory { + EffectState *create() override; + ALeffectProps getDefaultProps() const noexcept override; +}; + +EffectState *StdReverbStateFactory::create() +{ return new ReverbState{}; } + +ALeffectProps StdReverbStateFactory::getDefaultProps() const noexcept +{ + ALeffectProps props{}; + props.Reverb.Density = AL_REVERB_DEFAULT_DENSITY; + props.Reverb.Diffusion = AL_REVERB_DEFAULT_DIFFUSION; + props.Reverb.Gain = AL_REVERB_DEFAULT_GAIN; + props.Reverb.GainHF = AL_REVERB_DEFAULT_GAINHF; + props.Reverb.GainLF = 1.0f; + props.Reverb.DecayTime = AL_REVERB_DEFAULT_DECAY_TIME; + props.Reverb.DecayHFRatio = AL_REVERB_DEFAULT_DECAY_HFRATIO; + props.Reverb.DecayLFRatio = 1.0f; + props.Reverb.ReflectionsGain = AL_REVERB_DEFAULT_REFLECTIONS_GAIN; + props.Reverb.ReflectionsDelay = AL_REVERB_DEFAULT_REFLECTIONS_DELAY; + props.Reverb.ReflectionsPan[0] = 0.0f; + props.Reverb.ReflectionsPan[1] = 0.0f; + props.Reverb.ReflectionsPan[2] = 0.0f; + props.Reverb.LateReverbGain = AL_REVERB_DEFAULT_LATE_REVERB_GAIN; + props.Reverb.LateReverbDelay = AL_REVERB_DEFAULT_LATE_REVERB_DELAY; + props.Reverb.LateReverbPan[0] = 0.0f; + props.Reverb.LateReverbPan[1] = 0.0f; + props.Reverb.LateReverbPan[2] = 0.0f; + props.Reverb.EchoTime = 0.25f; + props.Reverb.EchoDepth = 0.0f; + props.Reverb.ModulationTime = 0.25f; + props.Reverb.ModulationDepth = 0.0f; + props.Reverb.AirAbsorptionGainHF = AL_REVERB_DEFAULT_AIR_ABSORPTION_GAINHF; + props.Reverb.HFReference = 5000.0f; + props.Reverb.LFReference = 250.0f; + props.Reverb.RoomRolloffFactor = AL_REVERB_DEFAULT_ROOM_ROLLOFF_FACTOR; + props.Reverb.DecayHFLimit = AL_REVERB_DEFAULT_DECAY_HFLIMIT; + return props; +} + } // namespace EffectStateFactory *ReverbStateFactory_getFactory() @@ -1478,7 +1554,10 @@ EffectStateFactory *ReverbStateFactory_getFactory() } EffectStateFactory *StdReverbStateFactory_getFactory() -{ return ReverbStateFactory_getFactory(); } +{ + static StdReverbStateFactory ReverbFactory{}; + return &ReverbFactory; +} void ALeaxreverb_setParami(ALeffect *effect, ALCcontext *context, ALenum param, ALint val) |