summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2017-12-02 12:38:17 +1100
committerDamien Zammit <damien@zamaudio.com>2017-12-02 12:38:17 +1100
commita33178808d105c6d48d3a5913f536eb06089ff43 (patch)
tree87e319ea197bf953409f5260b9eefdcd916ef2d0
parent331e65d8992d86800f1689137a6bd414440ec5ec (diff)
convolution plugins: Disable signal path when deactivating
-rw-r--r--plugins/ZamHeadX2/ZamHeadX2Plugin.cpp13
-rw-r--r--plugins/ZamHeadX2/ZamHeadX2Plugin.hpp2
-rw-r--r--plugins/ZamVerb/ZamVerbPlugin.cpp15
-rw-r--r--plugins/ZamVerb/ZamVerbPlugin.hpp2
4 files changed, 31 insertions, 1 deletions
diff --git a/plugins/ZamHeadX2/ZamHeadX2Plugin.cpp b/plugins/ZamHeadX2/ZamHeadX2Plugin.cpp
index 7e21f26..63e6d94 100644
--- a/plugins/ZamHeadX2/ZamHeadX2Plugin.cpp
+++ b/plugins/ZamHeadX2/ZamHeadX2Plugin.cpp
@@ -25,6 +25,7 @@ START_NAMESPACE_DISTRHO
ZamHeadX2Plugin::ZamHeadX2Plugin()
: Plugin(paramCount, 1, 1)
{
+ signal = false;
swap = 0;
clv[swap] = new LV2convolv();
clv[swap]->clv_configure("convolution.ir.preset", "0", "0");
@@ -164,6 +165,12 @@ void ZamHeadX2Plugin::setParameterValue(uint32_t index, float value)
void ZamHeadX2Plugin::activate()
{
setState("reload", "");
+ signal = true;
+}
+
+void ZamHeadX2Plugin::deactivate()
+{
+ signal = false;
}
String ZamHeadX2Plugin::getState(const char*) const
@@ -216,6 +223,12 @@ void ZamHeadX2Plugin::run(const float** inputs, float** outputs, uint32_t frames
int nprocessed;
active = swap;
+ if (!signal) {
+ memcpy(outputs[0], inputs[0], frames * sizeof(float));
+ memcpy(outputs[1], inputs[1], frames * sizeof(float));
+ return;
+ }
+
assert(frames < 8192);
for (i = 0; i < frames; i++) {
m = (inputs[0][i] + inputs[1][i]) * 0.5;
diff --git a/plugins/ZamHeadX2/ZamHeadX2Plugin.hpp b/plugins/ZamHeadX2/ZamHeadX2Plugin.hpp
index b4655b4..0da7750 100644
--- a/plugins/ZamHeadX2/ZamHeadX2Plugin.hpp
+++ b/plugins/ZamHeadX2/ZamHeadX2Plugin.hpp
@@ -114,6 +114,7 @@ protected:
}
void activate() override;
+ void deactivate() override;
void run(const float** inputs, float** outputs, uint32_t frames) override;
void pushsample(float* buf, float val, int i, uint32_t maxframes);
float getsample(float* buf, int i, uint32_t maxframes);
@@ -121,6 +122,7 @@ protected:
// -------------------------------------------------------------------
private:
+ bool signal;
float elevation, azimuth, width;
int azold, elold;
int swap, active;
diff --git a/plugins/ZamVerb/ZamVerbPlugin.cpp b/plugins/ZamVerb/ZamVerbPlugin.cpp
index 1bb3db3..0668ee3 100644
--- a/plugins/ZamVerb/ZamVerbPlugin.cpp
+++ b/plugins/ZamVerb/ZamVerbPlugin.cpp
@@ -24,6 +24,7 @@ START_NAMESPACE_DISTRHO
ZamVerbPlugin::ZamVerbPlugin()
: Plugin(paramCount, 1, 1) // 1 program, 1 states
{
+ signal = false;
swap = 0;
clv[swap] = new LV2convolv();
clv[swap]->clv_configure("convolution.ir.preset", "0");
@@ -162,7 +163,13 @@ void ZamVerbPlugin::loadProgram(uint32_t index)
void ZamVerbPlugin::activate()
{
- setState("reload", "");
+ setState("reload", "");
+ signal = true;
+}
+
+void ZamVerbPlugin::deactivate()
+{
+ signal = false;
}
String ZamVerbPlugin::getState(const char*) const
@@ -199,6 +206,12 @@ void ZamVerbPlugin::run(const float** inputs, float** outputs, uint32_t frames)
int nprocessed;
active = swap;
+ if (!signal) {
+ memcpy(outputs[0], inputs[0], frames * sizeof(float));
+ memcpy(outputs[1], inputs[1], frames * sizeof(float));
+ return;
+ }
+
assert(frames < 8192);
memcpy(tmpins[0], inputs[0], frames * sizeof(float));
memcpy(tmpins[1], inputs[1], frames * sizeof(float));
diff --git a/plugins/ZamVerb/ZamVerbPlugin.hpp b/plugins/ZamVerb/ZamVerbPlugin.hpp
index a2c94c7..c4c96b0 100644
--- a/plugins/ZamVerb/ZamVerbPlugin.hpp
+++ b/plugins/ZamVerb/ZamVerbPlugin.hpp
@@ -112,11 +112,13 @@ protected:
}
void activate() override;
+ void deactivate() override;
void run(const float** inputs, float** outputs, uint32_t frames) override;
LV2convolv *clv[2];
int8_t swap;
int8_t active;
+ bool signal;
// -------------------------------------------------------------------
float **tmpouts;