| @@ -33,12 +33,12 @@ struct EvenVCO : Module { | |||
| /** Whether we are past the pulse width already */ | |||
| bool halfPhase = false; | |||
| dsp::MinBLEP<16> triSquareMinBLEP; | |||
| dsp::MinBLEP<16> triMinBLEP; | |||
| dsp::MinBLEP<16> sineMinBLEP; | |||
| dsp::MinBLEP<16> doubleSawMinBLEP; | |||
| dsp::MinBLEP<16> sawMinBLEP; | |||
| dsp::MinBLEP<16> squareMinBLEP; | |||
| dsp::MinBlepGenerator<16, 32> triSquareMinBlep; | |||
| dsp::MinBlepGenerator<16, 32> triMinBlep; | |||
| dsp::MinBlepGenerator<16, 32> sineMinBlep; | |||
| dsp::MinBlepGenerator<16, 32> doubleSawMinBlep; | |||
| dsp::MinBlepGenerator<16, 32> sawMinBlep; | |||
| dsp::MinBlepGenerator<16, 32> squareMinBlep; | |||
| dsp::RCFilter triFilter; | |||
| @@ -47,19 +47,6 @@ struct EvenVCO : Module { | |||
| params[OCTAVE_PARAM].config(-5.0, 4.0, 0.0, "Octave", "'", 0.5); | |||
| params[TUNE_PARAM].config(-7.0, 7.0, 0.0, "Tune", " semitones"); | |||
| params[PWM_PARAM].config(-1.0, 1.0, 0.0, "Pulse width"); | |||
| triSquareMinBLEP.minblep = dsp::minblep_16_32; | |||
| triSquareMinBLEP.oversample = 32; | |||
| triMinBLEP.minblep = dsp::minblep_16_32; | |||
| triMinBLEP.oversample = 32; | |||
| sineMinBLEP.minblep = dsp::minblep_16_32; | |||
| sineMinBLEP.oversample = 32; | |||
| doubleSawMinBLEP.minblep = dsp::minblep_16_32; | |||
| doubleSawMinBLEP.oversample = 32; | |||
| sawMinBLEP.minblep = dsp::minblep_16_32; | |||
| sawMinBLEP.oversample = 32; | |||
| squareMinBLEP.minblep = dsp::minblep_16_32; | |||
| squareMinBLEP.oversample = 32; | |||
| } | |||
| void step() override { | |||
| @@ -82,13 +69,13 @@ struct EvenVCO : Module { | |||
| if (oldPhase < 0.5 && phase >= 0.5) { | |||
| float crossing = -(phase - 0.5) / deltaPhase; | |||
| triSquareMinBLEP.jump(crossing, 2.f); | |||
| doubleSawMinBLEP.jump(crossing, -2.f); | |||
| triSquareMinBlep.insertDiscontinuity(crossing, 2.f); | |||
| doubleSawMinBlep.insertDiscontinuity(crossing, -2.f); | |||
| } | |||
| if (!halfPhase && phase >= pw) { | |||
| float crossing = -(phase - pw) / deltaPhase; | |||
| squareMinBLEP.jump(crossing, 2.f); | |||
| squareMinBlep.insertDiscontinuity(crossing, 2.f); | |||
| halfPhase = true; | |||
| } | |||
| @@ -96,16 +83,16 @@ struct EvenVCO : Module { | |||
| if (phase >= 1.f) { | |||
| phase -= 1.f; | |||
| float crossing = -phase / deltaPhase; | |||
| triSquareMinBLEP.jump(crossing, -2.f); | |||
| doubleSawMinBLEP.jump(crossing, -2.f); | |||
| squareMinBLEP.jump(crossing, -2.f); | |||
| sawMinBLEP.jump(crossing, -2.f); | |||
| triSquareMinBlep.insertDiscontinuity(crossing, -2.f); | |||
| doubleSawMinBlep.insertDiscontinuity(crossing, -2.f); | |||
| squareMinBlep.insertDiscontinuity(crossing, -2.f); | |||
| sawMinBlep.insertDiscontinuity(crossing, -2.f); | |||
| halfPhase = false; | |||
| } | |||
| // Outputs | |||
| float triSquare = (phase < 0.5) ? -1.f : 1.f; | |||
| triSquare += triSquareMinBLEP.shift(); | |||
| triSquare += triSquareMinBlep.process(); | |||
| // Integrate square for triangle | |||
| tri += 4.f * triSquare * freq * app()->engine->getSampleTime(); | |||
| @@ -113,12 +100,12 @@ struct EvenVCO : Module { | |||
| float sine = -std::cos(2*M_PI * phase); | |||
| float doubleSaw = (phase < 0.5) ? (-1.f + 4.f*phase) : (-1.f + 4.f*(phase - 0.5)); | |||
| doubleSaw += doubleSawMinBLEP.shift(); | |||
| doubleSaw += doubleSawMinBlep.process(); | |||
| float even = 0.55 * (doubleSaw + 1.27 * sine); | |||
| float saw = -1.f + 2.f*phase; | |||
| saw += sawMinBLEP.shift(); | |||
| saw += sawMinBlep.process(); | |||
| float square = (phase < pw) ? -1.f : 1.f; | |||
| square += squareMinBLEP.shift(); | |||
| square += squareMinBlep.process(); | |||
| // Set outputs | |||
| outputs[TRI_OUTPUT].value = 5.f*tri; | |||