commit 9caa041b640f70bee8bf2cf95bef82ffa812cf9c
parent f8e617fc760a89c30d29632d7d7fc205215e64cc
Author: Matt Demanett <matt@demanett.net>
Date: Tue, 24 Apr 2018 22:29:49 -0400
NOISE: Add blue noise output.
Diffstat:
5 files changed, 40 insertions(+), 20 deletions(-)
diff --git a/res-src/Noise-src.svg b/res-src/Noise-src.svg
@@ -53,19 +53,21 @@
<g transform="translate(0 18)">
<g transform="translate(7.5 0)">
- <rect width="34" height="168" rx="5" fill="#bbb" transform="translate(-2 0)" />
- <use id="WHITE_OUTPUT" xlink:href="#output" transform="translate(3 6)" />
- <text font-size="5pt" letter-spacing="2px" transform="translate(0.5 39)">WHITE</text>
- <use id="PINK_OUTPUT" xlink:href="#output" transform="translate(3 47)" />
- <text font-size="5pt" letter-spacing="2px" transform="translate(4.5 80)">PINK</text>
- <use id="RED_OUTPUT" xlink:href="#output" transform="translate(3 88)" />
- <text font-size="5pt" letter-spacing="2px" transform="translate(7 121)">RED</text>
- <use id="GAUSS_OUTPUT" xlink:href="#output" transform="translate(3 129)" />
- <text font-size="5pt" letter-spacing="2px" transform="translate(0 162)">GAUSS</text>
+ <rect width="34" height="209" rx="5" fill="#bbb" transform="translate(-2 0)" />
+ <use id="BLUE_OUTPUT" xlink:href="#output" transform="translate(3 6)" />
+ <text font-size="5pt" letter-spacing="2px" transform="translate(4 39)">BLUE</text>
+ <use id="WHITE_OUTPUT" xlink:href="#output" transform="translate(3 47)" />
+ <text font-size="5pt" letter-spacing="2px" transform="translate(0.5 80)">WHITE</text>
+ <use id="PINK_OUTPUT" xlink:href="#output" transform="translate(3 88)" />
+ <text font-size="5pt" letter-spacing="2px" transform="translate(4.5 121)">PINK</text>
+ <use id="RED_OUTPUT" xlink:href="#output" transform="translate(3 129)" />
+ <text font-size="5pt" letter-spacing="2px" transform="translate(7 162)">RED</text>
+ <use id="GAUSS_OUTPUT" xlink:href="#output" transform="translate(3 170)" />
+ <text font-size="5pt" letter-spacing="2px" transform="translate(0 203)">GAUSS</text>
</g>
</g>
- <g transform="translate(0 242)">
+ <g transform="translate(0 250)">
<text font-size="6pt" letter-spacing="2px" transform="translate(13 -4)">ABS</text>
<g transform="translate(5.5 0)">
<rect width="34" height="10" fill="#fafafa" transform="translate(0 28)" />
diff --git a/res/Noise.svg b/res/Noise.svg
Binary files differ.
diff --git a/src/Noise.cpp b/src/Noise.cpp
@@ -2,17 +2,20 @@
#include "Noise.hpp"
void Noise::step() {
+ if (outputs[BLUE_OUTPUT].active) {
+ outputs[BLUE_OUTPUT].value = clamp(_blue.next() * 20.0f, -10.0f, 10.f);
+ }
if (outputs[WHITE_OUTPUT].active) {
- outputs[WHITE_OUTPUT].value = _white.next() * 10.0;
+ outputs[WHITE_OUTPUT].value = clamp(_white.next() * 10.0f, -10.0f, 10.f);
}
if (outputs[PINK_OUTPUT].active) {
- outputs[PINK_OUTPUT].value = _pink.next() * 10.0;
+ outputs[PINK_OUTPUT].value = clamp(_pink.next() * 15.0f, -10.0f, 10.f);
}
if (outputs[RED_OUTPUT].active) {
- outputs[RED_OUTPUT].value = _red.next() * 10.0;
+ outputs[RED_OUTPUT].value = clamp(_red.next() * 20.0f, -10.0f, 10.f);
}
if (outputs[GAUSS_OUTPUT].active) {
- outputs[GAUSS_OUTPUT].value = _gauss.next();
+ outputs[GAUSS_OUTPUT].value = clamp(_gauss.next(), -10.0f, 10.f);
}
float in = 0.0;
@@ -40,17 +43,19 @@ struct NoiseWidget : ModuleWidget {
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 15, 365)));
// generated by svg_widgets.rb
- auto absInputPosition = Vec(10.5, 245.0);
+ auto absInputPosition = Vec(10.5, 253.0);
- auto whiteOutputPosition = Vec(10.5, 24.0);
- auto pinkOutputPosition = Vec(10.5, 65.0);
- auto redOutputPosition = Vec(10.5, 106.0);
- auto gaussOutputPosition = Vec(10.5, 147.0);
- auto absOutputPosition = Vec(10.5, 283.0);
+ auto blueOutputPosition = Vec(10.5, 24.0);
+ auto whiteOutputPosition = Vec(10.5, 65.0);
+ auto pinkOutputPosition = Vec(10.5, 106.0);
+ auto redOutputPosition = Vec(10.5, 147.0);
+ auto gaussOutputPosition = Vec(10.5, 188.0);
+ auto absOutputPosition = Vec(10.5, 291.0);
// end generated by svg_widgets.rb
addInput(Port::create<Port24>(absInputPosition, Port::INPUT, module, Noise::ABS_INPUT));
+ addOutput(Port::create<Port24>(blueOutputPosition, Port::OUTPUT, module, Noise::BLUE_OUTPUT));
addOutput(Port::create<Port24>(whiteOutputPosition, Port::OUTPUT, module, Noise::WHITE_OUTPUT));
addOutput(Port::create<Port24>(pinkOutputPosition, Port::OUTPUT, module, Noise::PINK_OUTPUT));
addOutput(Port::create<Port24>(redOutputPosition, Port::OUTPUT, module, Noise::RED_OUTPUT));
diff --git a/src/Noise.hpp b/src/Noise.hpp
@@ -25,6 +25,7 @@ struct Noise : Module {
RED_OUTPUT,
GAUSS_OUTPUT,
ABS_OUTPUT,
+ BLUE_OUTPUT,
NUM_OUTPUTS
};
@@ -32,6 +33,7 @@ struct Noise : Module {
NUM_LIGHTS
};
+ BlueNoiseGenerator _blue;
WhiteNoiseGenerator _white;
PinkNoiseGenerator _pink;
RedNoiseGenerator _red;
diff --git a/src/dsp/noise.hpp b/src/dsp/noise.hpp
@@ -64,6 +64,17 @@ struct PinkNoiseGenerator : BasePinkNoiseGenerator<WhiteNoiseGenerator> {};
struct RedNoiseGenerator : BasePinkNoiseGenerator<PinkNoiseGenerator> {};
+struct BlueNoiseGenerator : NoiseGenerator {
+ PinkNoiseGenerator _pink;
+ float _last = 0.0f;
+
+ virtual float _next() override {
+ float t = _last;
+ _last = _pink.next();
+ return _last - t;
+ }
+};
+
struct GaussianNoiseGenerator : NoiseGenerator {
std::normal_distribution<float> _normal;