#pragma once #include "common.hpp" #include "string.hpp" #include "engine/Param.hpp" #include "engine/Input.hpp" #include "engine/Output.hpp" #include "engine/Light.hpp" #include #include namespace rack { struct Module { int id = 0; std::vector params; std::vector inputs; std::vector outputs; std::vector lights; /** For power meter */ float cpuTime = 0.f; bool bypass = false; /** Constructs a Module with no params, inputs, outputs, and lights */ Module(); /** Deprecated. Use setup() instead. */ Module(int numParams, int numInputs, int numOutputs, int numLights = 0) : Module() { setup(numParams, numInputs, numOutputs, numLights); } virtual ~Module() {} void setup(int numParams, int numInputs, int numOutputs, int numLights = 0); json_t *toJson(); void fromJson(json_t *rootJ); void reset(); void randomize(); /** Advances the module by 1 audio frame with duration 1.0 / gSampleRate Override this method to read inputs and params, and to write outputs and lights. */ virtual void step() {} /** Called when the engine sample rate is changed */ virtual void onSampleRateChange() {} /** Called when user clicks Initialize in the module context menu */ virtual void onReset() {} /** Called when user clicks Randomize in the module context menu */ virtual void onRandomize() {} /** Override these to store extra internal data in the "data" property of the module's JSON object */ virtual json_t *dataToJson() { return NULL; } virtual void dataFromJson(json_t *root) {} }; } // namespace rack