#pragma once #include "common.hpp" #include "string.hpp" #include "engine/Param.hpp" #include "engine/Port.hpp" #include "engine/Light.hpp" #include #include namespace rack { namespace engine { struct Module { /** Automatically generated by the engine. */ int id = -1; std::vector params; std::vector outputs; std::vector inputs; std::vector lights; /** For CPU meter. */ float cpuTime = 0.f; bool bypass = false; /** Constructs a Module with no params, inputs, outputs, and lights. */ Module(); /** Use config() instead. */ DEPRECATED Module(int numParams, int numInputs, int numOutputs, int numLights = 0) : Module() { config(numParams, numInputs, numOutputs, numLights); } virtual ~Module() {} /** Configures the number of Params, Outputs, Inputs, and Lights. */ void config(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 one audio sample. 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 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 engine } // namespace rack