@@ -59,9 +59,11 @@ struct Funcgen : Module {
5959 dsp::SchmittTrigger push[CHANNEL_COUNT ];
6060 dsp::SchmittTrigger cascade_trigger;
6161 dsp::SchmittTrigger cascade_push;
62+ dsp::BooleanTrigger normal_mode_trigger;
6263 dsp::BooleanTrigger eoc_trigger[CHANNEL_COUNT ];
6364 dsp::PulseGenerator eoc_pulse[CHANNEL_COUNT ];
6465
66+ bool normal_mode = true ;
6567 bool cascade_mode = false ;
6668
6769 Funcgen () {
@@ -100,6 +102,7 @@ struct Funcgen : Module {
100102 void process (const ProcessArgs& args) override {
101103 float st = args.sampleTime ;
102104 cascade_mode = params[MODE_PARAM ].getValue () > 0 .5f ;
105+ normal_mode = !cascade_mode;
103106 for (int i = 0 ; i < CHANNEL_COUNT ; i++) {
104107 float rise_time = params[RISE_PARAM + i].getValue ();
105108 float fall_time = params[FALL_PARAM + i].getValue ();
@@ -135,8 +138,16 @@ struct Funcgen : Module {
135138 cascade_output = std::max (cascade_output, envelope[3 ].env );
136139 outputs[CASCADE_OUTPUT ].setVoltage (cascade_output);
137140 }
141+ if (normal_mode_trigger.process (normal_mode)) {
142+ for (int i = 0 ; i < CHANNEL_COUNT ; i++) {
143+ envelope[i].reset ();
144+ }
145+ }
138146 if (cascade_mode && (cascade_trigger.process (inputs[CASCADE_TRIGGER_INPUPT ].getVoltage ()) || cascade_push.process (params[CASCADE_TRIGGER_PARAM ].getValue ()))) {
139147 envelope[0 ].retrigger ();
148+ envelope[1 ].reset ();
149+ envelope[2 ].reset ();
150+ envelope[3 ].reset ();
140151 }
141152 float a = envelope[0 ].env ;
142153 float b = envelope[1 ].env ;
0 commit comments