BogaudioModules

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

commit c91416555b60ee3ce914f83d3398f0e7a9d1c4c2
parent 0ab4cc28c8d7670d493a9783d450baedffda04db
Author: Matt Demanett <matt@fundera.com>
Date:   Fri,  1 Dec 2017 17:01:10 -0500

Analyzer: implement Smooth knob (number of FFT frames to average for display).

Diffstat:
Mres/Analyzer-src.svg | 0
Mres/Analyzer.svg | 0
Msrc/Analyzer.cpp | 27+++++++++++++++++++++++----
3 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/res/Analyzer-src.svg b/res/Analyzer-src.svg Binary files differ. diff --git a/res/Analyzer.svg b/res/Analyzer.svg Binary files differ. diff --git a/src/Analyzer.cpp b/src/Analyzer.cpp @@ -57,7 +57,7 @@ bool ChannelAnalyzer::step(float sample) { struct Analyzer : Module { enum ParamsIds { RANGE_PARAM, - // SMOOTH_PARAM, + SMOOTH_PARAM, // TYPE_PARAM, POWER_PARAM, NUM_PARAMS @@ -90,6 +90,7 @@ struct Analyzer : Module { ChannelAnalyzer* _channelA = NULL; ChannelAnalyzer* _channelB = NULL; float _range = 0.0; + float _smooth = 0.0; Analyzer() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { reset(); @@ -99,13 +100,17 @@ struct Analyzer : Module { } virtual void reset() override; + void resetChannels(); virtual void step() override; void stepChannel(ChannelAnalyzer*& channelPointer, bool running, Input& input, Output& output); }; void Analyzer::reset() { _displayType = DISPLAYTYPE_LINE; - _averageN = 10; + resetChannels(); +} + +void Analyzer::resetChannels() { if (_channelA) { delete _channelA; _channelA = NULL; @@ -118,6 +123,13 @@ void Analyzer::reset() { void Analyzer::step() { _range = clampf(params[RANGE_PARAM].value, 0.1, 1.0); + + int smooth = (int)roundf(clampf(params[SMOOTH_PARAM].value, 1.0, 10.0)); + if (_averageN != smooth) { + _averageN = smooth; + resetChannels(); + } + bool running = params[POWER_PARAM].value == 1.0; stepChannel(_channelA, running, inputs[SIGNALA_INPUT], outputs[SIGNALA_OUTPUT]); stepChannel(_channelB, running, inputs[SIGNALB_INPUT], outputs[SIGNALB_OUTPUT]); @@ -352,6 +364,13 @@ int AnalyzerDisplay::binValueToHeight(float value) { } +struct AnalyzerKnob : Knob38 { + AnalyzerKnob() : Knob38() { + snap = true; + } +}; + + AnalyzerWidget::AnalyzerWidget() { auto module = new Analyzer(); setModule(module); @@ -380,7 +399,7 @@ AnalyzerWidget::AnalyzerWidget() { // generated by svg_widgets.rb auto rangeParamPosition = Vec(100.08, 303.58); - // auto smoothParamPosition = Vec(164.08, 303.58); + auto smoothParamPosition = Vec(164.08, 303.58); // auto typeParamPosition = Vec(231.9, 305.4); auto powerParamPosition = Vec(272.9, 305.4); @@ -392,7 +411,7 @@ AnalyzerWidget::AnalyzerWidget() { // end generated by svg_widgets.rb addParam(createParam<Knob38>(rangeParamPosition, module, Analyzer::RANGE_PARAM, 0.1, 1.0, 0.5)); - // addParam(createParam<Knob38>(smoothParamPosition, module, Analyzer::SMOOTH_PARAM, 0.1, 1.0, 0.3)); + addParam(createParam<AnalyzerKnob>(smoothParamPosition, module, Analyzer::SMOOTH_PARAM, 1.0, 10.0, 5.0)); // addParam(createParam<CKSS>(typeParamPosition, module, Analyzer::TYPE_PARAM, 0.0, 1.0, 1.0)); addParam(createParam<CKSS>(powerParamPosition, module, Analyzer::POWER_PARAM, 0.0, 1.0, 1.0));