/* * Simple Gain audio effect based on DISTRHO Plugin Framework (DPF) * * SPDX-License-Identifier: MIT * * Copyright (C) 2021 Jean Pierre Cimalando * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #ifndef PLUGIN_SIMPLEGAIN_H #define PLUGIN_SIMPLEGAIN_H #include "DistrhoPlugin.hpp" #include "CParamSmooth.hpp" #include "extra/ScopedPointer.hpp" START_NAMESPACE_DISTRHO #ifndef MIN #define MIN(a,b) ( (a) < (b) ? (a) : (b) ) #endif #ifndef MAX #define MAX(a,b) ( (a) > (b) ? (a) : (b) ) #endif #ifndef CLAMP #define CLAMP(v, min, max) (MIN((max), MAX((min), (v)))) #endif #ifndef DB_CO #define DB_CO(g) ((g) > -90.0f ? powf(10.0f, (g) * 0.05f) : 0.0f) #endif // ----------------------------------------------------------------------- class PluginSimpleGain : public Plugin { public: enum Parameters { paramGain = 0, paramCount }; PluginSimpleGain(); protected: // ------------------------------------------------------------------- // Information const char* getLabel() const noexcept override { return "SimpleGain"; } const char* getDescription() const override { return "A simple audio volume gain plugin with ImGui for its GUI"; } const char* getMaker() const noexcept override { return "Jean Pierre Cimalando, falkTX"; } const char* getLicense() const noexcept override { return "MIT"; } uint32_t getVersion() const noexcept override { return d_version(1, 0, 0); } int64_t getUniqueId() const noexcept override { return d_cconst('d', 'I', 'm', 'G'); } // ------------------------------------------------------------------- // Init void initParameter(uint32_t index, Parameter& parameter) override; // ------------------------------------------------------------------- // Internal data float getParameterValue(uint32_t index) const override; void setParameterValue(uint32_t index, float value) override; // ------------------------------------------------------------------- // Optional // Optional callback to inform the plugin about a sample rate change. void sampleRateChanged(double newSampleRate) override; // ------------------------------------------------------------------- // Process void activate() override; void run(const float**, float** outputs, uint32_t frames) override; // ------------------------------------------------------------------- private: double fSampleRate; float fGainDB; float fGainLinear; ScopedPointer fSmoothGain; DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(PluginSimpleGain) }; // ----------------------------------------------------------------------- END_NAMESPACE_DISTRHO #endif // #ifndef PLUGIN_SIMPLEGAIN_H