diff --git a/include/private/plugins/impulse_reverb.h b/include/private/plugins/impulse_reverb.h
index fdb611d..bc895ea 100644
--- a/include/private/plugins/impulse_reverb.h
+++ b/include/private/plugins/impulse_reverb.h
@@ -217,6 +217,7 @@ namespace lsp
plug::IPort *pRank;
plug::IPort *pDry;
plug::IPort *pWet;
+ plug::IPort *pDryWet;
plug::IPort *pOutGain;
plug::IPort *pPredelay;
diff --git a/res/main/ui/convolution/impulse_reverb/mono.xml b/res/main/ui/convolution/impulse_reverb/mono.xml
index eb84882..27d2128 100644
--- a/res/main/ui/convolution/impulse_reverb/mono.xml
+++ b/res/main/ui/convolution/impulse_reverb/mono.xml
@@ -18,7 +18,7 @@
-
+
@@ -41,21 +41,22 @@
-
-
-
-
-
-
+
+
+
+
-
-
-
-
-
+
+
+
-
+
+
+
+
+
+
|
diff --git a/res/main/ui/convolution/impulse_reverb/stereo.xml b/res/main/ui/convolution/impulse_reverb/stereo.xml
index 85b4b04..beda3b7 100644
--- a/res/main/ui/convolution/impulse_reverb/stereo.xml
+++ b/res/main/ui/convolution/impulse_reverb/stereo.xml
@@ -32,7 +32,7 @@
-
+
@@ -48,20 +48,22 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
|
diff --git a/src/doc/manuals/plugins/impulse_reverb.php b/src/doc/manuals/plugins/impulse_reverb.php
index c3ec6a2..cfbea18 100644
--- a/src/doc/manuals/plugins/impulse_reverb.php
+++ b/src/doc/manuals/plugins/impulse_reverb.php
@@ -82,6 +82,7 @@
Pre-delay - amount of pre-delay added to the wet (processed) signal.
Dry - amount of gain applied to the dry (unprocessed) signal.
Wet - amount of gain additionally applied to the wet (processed) signal.
+ Dry/Wet - the balance between the unprocessed (Dry) signal and mixed signal (see Dry and Wet controls).
Output - amount of gain additionally applied to the output signal.
diff --git a/src/main/meta/impulse_reverb.cpp b/src/main/meta/impulse_reverb.cpp
index 92caf1f..65c13e5 100644
--- a/src/main/meta/impulse_reverb.cpp
+++ b/src/main/meta/impulse_reverb.cpp
@@ -112,6 +112,7 @@ namespace lsp
pan, \
DRY_GAIN(1.0f), \
WET_GAIN(1.0f), \
+ DRYWET(100.0f), \
OUT_GAIN
#define IR_SAMPLE_FILE(id, label) \
diff --git a/src/main/plug/impulse_reverb.cpp b/src/main/plug/impulse_reverb.cpp
index 8cd247d..8380953 100644
--- a/src/main/plug/impulse_reverb.cpp
+++ b/src/main/plug/impulse_reverb.cpp
@@ -237,6 +237,7 @@ namespace lsp
pRank = NULL;
pDry = NULL;
pWet = NULL;
+ pDryWet = NULL;
pOutGain = NULL;
pPredelay = NULL;
@@ -483,6 +484,7 @@ namespace lsp
BIND_PORT(pDry);
BIND_PORT(pWet);
+ BIND_PORT(pDryWet);
BIND_PORT(pOutGain);
// Bind impulse file ports
@@ -576,11 +578,14 @@ namespace lsp
void impulse_reverb::update_settings()
{
- float out_gain = pOutGain->value();
- float dry_gain = pDry->value() * out_gain;
- float wet_gain = pWet->value() * out_gain;
- bool bypass = pBypass->value() >= 0.5f;
- float predelay = pPredelay->value();
+ const float out_gain = pOutGain->value();
+ const float dry = pDry->value() * out_gain;
+ const float wet = pWet->value() * out_gain;
+ const float drywet = pDryWet->value() * 0.01f;
+ const float dry_gain = dry * drywet + 1.0f - drywet;;
+ const float wet_gain = wet * drywet;
+ const bool bypass = pBypass->value() >= 0.5f;
+ const float predelay = pPredelay->value();
// Check that FFT rank has changed
size_t rank = get_fft_rank(pRank->value());
@@ -1330,6 +1335,7 @@ namespace lsp
v->write("pRank", pRank);
v->write("pDry", pDry);
v->write("pWet", pWet);
+ v->write("pDryWet", pDryWet);
v->write("pOutGain", pOutGain);
v->write("pPredelay", pPredelay);