99 DynamicRangeCompressorParameterThreshold,
1010 DynamicRangeCompressorParameterAttackDuration,
1111 DynamicRangeCompressorParameterReleaseDuration,
12+ DynamicRangeCompressorParameterGain,
13+ DynamicRangeCompressorParameterDryWetMix,
1214};
1315
1416class DynamicRangeCompressorDSP : public SoundpipeDSPBase {
1921 ParameterRamper thresholdRamp;
2022 ParameterRamper attackDurationRamp;
2123 ParameterRamper releaseDurationRamp;
24+ ParameterRamper gainRamp;
25+ ParameterRamper dryWetMixRamp;
2226
2327public:
2428 DynamicRangeCompressorDSP () {
2529 parameters[DynamicRangeCompressorParameterRatio] = &ratioRamp;
2630 parameters[DynamicRangeCompressorParameterThreshold] = &thresholdRamp;
2731 parameters[DynamicRangeCompressorParameterAttackDuration] = &attackDurationRamp;
2832 parameters[DynamicRangeCompressorParameterReleaseDuration] = &releaseDurationRamp;
33+ parameters[DynamicRangeCompressorParameterGain] = &gainRamp;
34+ parameters[DynamicRangeCompressorParameterDryWetMix] = &dryWetMixRamp;
2935 }
3036
3137 void init (int channelCount, double sampleRate) override {
@@ -64,6 +70,14 @@ void process(FrameRange range) override {
6470
6571 sp_compressor_compute (sp, compressor0, &leftIn, &leftOut);
6672 sp_compressor_compute (sp, compressor1, &rightIn, &rightOut);
73+
74+ float gain = gainRamp.getAndStep ();
75+ leftOut *= gain;
76+ rightOut *= gain;
77+
78+ float dryWetMix = dryWetMixRamp.getAndStep ();
79+ outputSample (0 , i) = dryWetMix * leftOut + (1 .0f - dryWetMix) * leftIn;
80+ outputSample (1 , i) = dryWetMix * rightOut + (1 .0f - dryWetMix) * rightIn;
6781 }
6882 }
6983};
@@ -73,3 +87,5 @@ void process(FrameRange range) override {
7387AK_REGISTER_PARAMETER(DynamicRangeCompressorParameterThreshold)
7488AK_REGISTER_PARAMETER(DynamicRangeCompressorParameterAttackDuration)
7589AK_REGISTER_PARAMETER(DynamicRangeCompressorParameterReleaseDuration)
90+ AK_REGISTER_PARAMETER(DynamicRangeCompressorParameterGain)
91+ AK_REGISTER_PARAMETER(DynamicRangeCompressorParameterDryWetMix)
0 commit comments