BogaudioModules

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

commit a0b6c688b9596a60db145d07839277eb00a363df
parent d16b50fae7f4a3e68f35c91910d266c2afe015a1
Author: Matt Demanett <matt@demanett.net>
Date:   Mon,  9 Dec 2019 00:54:11 -0500

SINE: add ramp waveform.

Diffstat:
Msrc/Sine.cpp | 17++++++++++++++---
Msrc/Sine.hpp | 2++
2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/src/Sine.cpp b/src/Sine.cpp @@ -19,7 +19,7 @@ void Sine::dataFromJson(json_t* root) { json_t* w = json_object_get(root, WAVE); if (w) { _wave = (Wave)json_integer_value(w); - if (!(_wave == TRIANGLE_WAVE || _wave == SAW_WAVE || _wave == SQUARE_WAVE || _wave == PULSE_25_WAVE || _wave == PULSE_10_WAVE)) { + if (!(_wave == TRIANGLE_WAVE || _wave == SAW_WAVE || _wave == RAMP_WAVE || _wave == SQUARE_WAVE || _wave == PULSE_25_WAVE || _wave == PULSE_10_WAVE)) { _wave = SINE_WAVE; } } @@ -48,8 +48,19 @@ void Sine::modulateChannel(int c) { VCOBase::modulateChannel(c); Engine& e = *_engines[c]; + _outputScale = 1.0f; + e.sawActive = false; e.squareActive = false; switch (_wave) { + case SAW_WAVE: { + e.sawActive = true; + break; + } + case RAMP_WAVE: { + e.sawActive = true; + _outputScale = -1.0f; + break; + } case SQUARE_WAVE: { e.squareActive = true; e.square.setPulseWidth(e.squarePulseWidthSL.next(0.5f)); @@ -68,7 +79,6 @@ void Sine::modulateChannel(int c) { default: { } } - e.sawActive = _wave == SAW_WAVE; e.triangleActive = _wave == TRIANGLE_WAVE; e.sineActive = _wave == SINE_WAVE; } @@ -85,7 +95,7 @@ void Sine::processChannel(const ProcessArgs& args, int c) { VCOBase::processChannel(args, c); outputs[OUT_OUTPUT].setChannels(_channels); - outputs[OUT_OUTPUT].setVoltage(e.squareOut + e.sawOut + e.triangleOut + e.sineOut, c); + outputs[OUT_OUTPUT].setVoltage(_outputScale * (e.squareOut + e.sawOut + e.triangleOut + e.sineOut), c); } struct SineWidget : ModuleWidget { @@ -141,6 +151,7 @@ struct SineWidget : ModuleWidget { w->addItem(OptionMenuItem("Sine", [m]() { return m->_wave == Sine::SINE_WAVE; }, [m]() { m->_wave = Sine::SINE_WAVE; })); w->addItem(OptionMenuItem("Triangle", [m]() { return m->_wave == Sine::TRIANGLE_WAVE; }, [m]() { m->_wave = Sine::TRIANGLE_WAVE; })); w->addItem(OptionMenuItem("Saw", [m]() { return m->_wave == Sine::SAW_WAVE; }, [m]() { m->_wave = Sine::SAW_WAVE; })); + w->addItem(OptionMenuItem("Ramp", [m]() { return m->_wave == Sine::RAMP_WAVE; }, [m]() { m->_wave = Sine::RAMP_WAVE; })); w->addItem(OptionMenuItem("Square", [m]() { return m->_wave == Sine::SQUARE_WAVE; }, [m]() { m->_wave = Sine::SQUARE_WAVE; })); w->addItem(OptionMenuItem("25% pulse", [m]() { return m->_wave == Sine::PULSE_25_WAVE; }, [m]() { m->_wave = Sine::PULSE_25_WAVE; })); w->addItem(OptionMenuItem("10% pulse", [m]() { return m->_wave == Sine::PULSE_10_WAVE; }, [m]() { m->_wave = Sine::PULSE_10_WAVE; })); diff --git a/src/Sine.hpp b/src/Sine.hpp @@ -33,12 +33,14 @@ struct Sine : VCOBase { SINE_WAVE, TRIANGLE_WAVE, SAW_WAVE, + RAMP_WAVE, SQUARE_WAVE, PULSE_25_WAVE, PULSE_10_WAVE }; Wave _wave = SINE_WAVE; + float _outputScale = 1.0f; Sine() : VCOBase(