| 38 | } |
| 39 | |
| 40 | void process(const ProcessArgs& args) override { |
| 41 | // Gaussian noise generator |
| 42 | float noise = 2.0 * random::normal(); |
| 43 | |
| 44 | // S&H |
| 45 | if (trigger.process(inputs[TRIG_INPUT].getVoltage() / 0.7)) { |
| 46 | sample = inputs[SH_INPUT].getNormalVoltage(noise); |
| 47 | } |
| 48 | |
| 49 | // lights |
| 50 | lights[SIGN_POS_LIGHT].setSmoothBrightness(fmaxf(0.0, inputs[SIGN_INPUT].getVoltage() / 5.0), args.sampleTime); |
| 51 | lights[SIGN_NEG_LIGHT].setSmoothBrightness(fmaxf(0.0, -inputs[SIGN_INPUT].getVoltage() / 5.0), args.sampleTime); |
| 52 | float logicSum = inputs[LOGIC_A_INPUT].getVoltage() + inputs[LOGIC_B_INPUT].getVoltage(); |
| 53 | lights[LOGIC_POS_LIGHT].setSmoothBrightness(fmaxf(0.0, logicSum / 5.0), args.sampleTime); |
| 54 | lights[LOGIC_NEG_LIGHT].setSmoothBrightness(fmaxf(0.0, -logicSum / 5.0), args.sampleTime); |
| 55 | lights[SH_POS_LIGHT].setBrightness(fmaxf(0.0, sample / 5.0)); |
| 56 | lights[SH_NEG_LIGHT].setBrightness(fmaxf(0.0, -sample / 5.0)); |
| 57 | |
| 58 | // outputs |
| 59 | outputs[INVERT_OUTPUT].setVoltage(-inputs[SIGN_INPUT].getVoltage()); |
| 60 | outputs[HALF_RECTIFY_OUTPUT].setVoltage(fmaxf(0.0, inputs[SIGN_INPUT].getVoltage())); |
| 61 | outputs[FULL_RECTIFY_OUTPUT].setVoltage(fabsf(inputs[SIGN_INPUT].getVoltage())); |
| 62 | outputs[MAX_OUTPUT].setVoltage(fmaxf(inputs[LOGIC_A_INPUT].getVoltage(), inputs[LOGIC_B_INPUT].getVoltage())); |
| 63 | outputs[MIN_OUTPUT].setVoltage(fminf(inputs[LOGIC_A_INPUT].getVoltage(), inputs[LOGIC_B_INPUT].getVoltage())); |
| 64 | outputs[NOISE_OUTPUT].setVoltage(noise); |
| 65 | outputs[SH_OUTPUT].setVoltage(sample); |
| 66 | } |
| 67 | }; |
| 68 | |
| 69 |
nothing calls this directly
no outgoing calls
no test coverage detected