BogaudioModules

BogaudioModules for VCV Rack
Log | Files | Refs | README | LICENSE

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:
Mres-src/Noise-src.svg | 22++++++++++++----------
Mres/Noise.svg | 0
Msrc/Noise.cpp | 25+++++++++++++++----------
Msrc/Noise.hpp | 2++
Msrc/dsp/noise.hpp | 11+++++++++++
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;