commit 79c59e6e71b59dcbb91d56f2af383f87c943f525
parent 1ab16d5d4517dfc9adfd5d92f6dd8ac8ff197171
Author: Matt Demanett <matt@demanett.net>
Date: Mon, 9 Sep 2019 23:58:06 -0400
Poly: BOOL and SUMS.
Diffstat:
5 files changed, 46 insertions(+), 31 deletions(-)
diff --git a/src/Bool.cpp b/src/Bool.cpp
@@ -1,14 +1,25 @@
#include "Bool.hpp"
-void Bool::processChannel(const ProcessArgs& args, int _c) {
- bool a = inputs[A_INPUT].getVoltage() > 1.0f;
- bool b = inputs[B_INPUT].getVoltage() > 1.0f;
- outputs[AND_OUTPUT].setVoltage(a && b ? 5.0f : 0.0f);
- outputs[OR_OUTPUT].setVoltage(a || b ? 5.0f : 0.0f);
- outputs[XOR_OUTPUT].setVoltage(a ^ b ? 5.0f : 0.0f);
-
- outputs[NOT_OUTPUT].setVoltage((inputs[NOT_INPUT].isConnected() && inputs[NOT_INPUT].getVoltage() > 1.0f) ? 0.0f : 5.0f);
+void Bool::processChannel(const ProcessArgs& args, int c) {
+ assert(c == 0);
+
+ for (int i = 0, cn = std::max(inputs[A_INPUT].getChannels(), inputs[B_INPUT].getChannels()); i < cn; ++i) {
+ bool a = inputs[A_INPUT].getPolyVoltage(i) > 1.0f;
+ bool b = inputs[B_INPUT].getPolyVoltage(i) > 1.0f;
+ outputs[AND_OUTPUT].setChannels(cn);
+ outputs[AND_OUTPUT].setVoltage(5.0f * (a && b), i);
+ outputs[OR_OUTPUT].setChannels(cn);
+ outputs[OR_OUTPUT].setVoltage(5.0f * (a || b), i);
+ outputs[XOR_OUTPUT].setChannels(cn);
+ outputs[XOR_OUTPUT].setVoltage(5.0f * (a ^ b), i);
+ }
+
+ int cn = inputs[NOT_INPUT].getChannels();
+ outputs[NOT_OUTPUT].setChannels(cn);
+ for (int i = 0; i < cn; ++i) {
+ outputs[NOT_OUTPUT].setVoltage(5.0f * (inputs[NOT_INPUT].isConnected() && inputs[NOT_INPUT].getPolyVoltage(i) > 1.0f), i);
+ }
}
struct BoolWidget : ModuleWidget {
diff --git a/src/Bool.hpp b/src/Bool.hpp
@@ -32,9 +32,9 @@ struct Bool : BGModule {
Bool() {
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);
- }
+ }
- void processChannel(const ProcessArgs& args, int _c) override;
+ void processChannel(const ProcessArgs& args, int c) override;
};
} // namespace bogaudio
diff --git a/src/FlipFlop.hpp b/src/FlipFlop.hpp
@@ -47,7 +47,6 @@ struct FlipFlop : BGModule {
}
void reset() override;
- int channels() override { return 1; }
void processChannel(const ProcessArgs& args, int c) override;
void channelStep(
int c,
diff --git a/src/Sums.cpp b/src/Sums.cpp
@@ -1,33 +1,38 @@
#include "Sums.hpp"
-void Sums::processChannel(const ProcessArgs& args, int _c) {
- float a = inputs[A_INPUT].getVoltageSum();
- float b = inputs[B_INPUT].getVoltageSum();
- if (_disableOutputLimit) {
- outputs[SUM_OUTPUT].setVoltage(a + b);
- outputs[DIFFERENCE_OUTPUT].setVoltage(a - b);
- outputs[MAX_OUTPUT].setVoltage(std::max(a, b));
- outputs[MIN_OUTPUT].setVoltage(std::min(a, b));
+void Sums::processChannel(const ProcessArgs& args, int c) {
+ assert(c == 0);
- if (inputs[NEGATE_INPUT].isConnected()) {
- outputs[NEGATE_OUTPUT].setVoltage(-inputs[NEGATE_INPUT].getVoltage());
+ for (int i = 0, cn = std::max(inputs[A_INPUT].getChannels(), inputs[B_INPUT].getChannels()); i < cn; ++i) {
+ float a = inputs[A_INPUT].getPolyVoltage(i);
+ float b = inputs[B_INPUT].getPolyVoltage(i);
+ outputs[SUM_OUTPUT].setChannels(cn);
+ outputs[DIFFERENCE_OUTPUT].setChannels(cn);
+ outputs[MAX_OUTPUT].setChannels(cn);
+ outputs[MIN_OUTPUT].setChannels(cn);
+ if (_disableOutputLimit) {
+ outputs[SUM_OUTPUT].setVoltage(a + b, i);
+ outputs[DIFFERENCE_OUTPUT].setVoltage(a - b, i);
+ outputs[MAX_OUTPUT].setVoltage(std::max(a, b), i);
+ outputs[MIN_OUTPUT].setVoltage(std::min(a, b), i);
}
else {
- outputs[NEGATE_OUTPUT].setVoltage(0.0f);
+ outputs[SUM_OUTPUT].setVoltage(clamp(a + b, -12.0f, 12.0f), i);
+ outputs[DIFFERENCE_OUTPUT].setVoltage(clamp(a - b, -12.0f, 12.0f), i);
+ outputs[MAX_OUTPUT].setVoltage(clamp(std::max(a, b), -12.0f, 12.0f), i);
+ outputs[MIN_OUTPUT].setVoltage(clamp(std::min(a, b), -12.0f, 12.0f), i);
}
}
- else {
- outputs[SUM_OUTPUT].setVoltage(clamp(a + b, -12.0f, 12.0f));
- outputs[DIFFERENCE_OUTPUT].setVoltage(clamp(a - b, -12.0f, 12.0f));
- outputs[MAX_OUTPUT].setVoltage(clamp(std::max(a, b), -12.0f, 12.0f));
- outputs[MIN_OUTPUT].setVoltage(clamp(std::min(a, b), -12.0f, 12.0f));
- if (inputs[NEGATE_INPUT].isConnected()) {
- outputs[NEGATE_OUTPUT].setVoltage(clamp(-inputs[NEGATE_INPUT].getVoltage(), -12.0f, 12.0f));
+ int cn = inputs[NEGATE_INPUT].getChannels();
+ outputs[NEGATE_OUTPUT].setChannels(cn);
+ for (int i = 0; i < cn; ++i) {
+ if (_disableOutputLimit) {
+ outputs[NEGATE_OUTPUT].setVoltage(-inputs[NEGATE_INPUT].getPolyVoltage(i), i);
}
else {
- outputs[NEGATE_OUTPUT].setVoltage(0.0f);
+ outputs[NEGATE_OUTPUT].setVoltage(clamp(-inputs[NEGATE_INPUT].getPolyVoltage(i), -12.0f, 12.0f), i);
}
}
}
diff --git a/src/Sums.hpp b/src/Sums.hpp
@@ -36,7 +36,7 @@ struct Sums : DisableOutputLimitModule {
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);
}
- void processChannel(const ProcessArgs& args, int _c) override;
+ void processChannel(const ProcessArgs& args, int c) override;
};
} // namespace bogaudio