/* * DISTRHO glBars Plugin based on XMMS/XBMC "GL Bars" * Copyright (C) 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front Technologies * Copyright (C) 2000 Christian Zander * Copyright (C) 2015 Nedko Arnaudov * Copyright (C) 2016-2022 Filipe Coelho * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * For a full copy of the license see the LICENSE file. */ #include "DistrhoPluginGLBars.hpp" #include "glBars.hpp" START_NAMESPACE_DISTRHO // ----------------------------------------------------------------------- DistrhoPluginGLBars::DistrhoPluginGLBars() : Plugin(kParameterCount, 0, 0), fState(nullptr) { fParameters[kParameterScale] = 1.f / log(256.f); fParameters[kParameterSpeed] = 0.025f; fParameters[kParameterX] = 0.0f; fParameters[kParameterY] = 0.5f; fParameters[kParameterZ] = 0.0f; } DistrhoPluginGLBars::~DistrhoPluginGLBars() { DISTRHO_SAFE_ASSERT(fState == nullptr); } // ----------------------------------------------------------------------- // Init void DistrhoPluginGLBars::initAudioPort(bool input, uint32_t index, AudioPort& port) { port.groupId = kPortGroupMono; Plugin::initAudioPort(input, index, port); } void DistrhoPluginGLBars::initParameter(uint32_t index, Parameter& parameter) { switch (index) { case kParameterScale: parameter.hints = kParameterIsAutomatable|kParameterIsLogarithmic; parameter.name = "Scale"; parameter.symbol = "scale"; parameter.unit = ""; parameter.ranges.def = 1.0f / log(256.f); parameter.ranges.min = 0.5f / log(256.f); parameter.ranges.max = 3.0f / log(256.f); break; case kParameterSpeed: parameter.hints = kParameterIsAutomatable|kParameterIsLogarithmic; parameter.name = "Speed"; parameter.symbol = "speed"; parameter.unit = ""; parameter.ranges.def = 0.025f; parameter.ranges.min = 0.0125f; parameter.ranges.max = 0.1f; break; case kParameterX: parameter.hints = kParameterIsAutomatable; parameter.name = "X"; parameter.symbol = "x"; parameter.unit = ""; parameter.ranges.def = 0.0f; parameter.ranges.min = -4.0f; parameter.ranges.max = 4.0f; break; case kParameterY: parameter.hints = kParameterIsAutomatable; parameter.name = "Y"; parameter.symbol = "y"; parameter.unit = ""; parameter.ranges.def = 0.5f; parameter.ranges.min = -4.0f; parameter.ranges.max = 4.0f; break; case kParameterZ: parameter.hints = kParameterIsAutomatable; parameter.name = "Z"; parameter.symbol = "z"; parameter.unit = ""; parameter.ranges.def = 0.0f; parameter.ranges.min = -4.0f; parameter.ranges.max = 4.0f; break; } } // ----------------------------------------------------------------------- // Internal data float DistrhoPluginGLBars::getParameterValue(uint32_t index) const { if (index >= kParameterCount) return 0.0f; return fParameters[index]; } void DistrhoPluginGLBars::setParameterValue(uint32_t index, float value) { if (index >= kParameterCount) return; fParameters[index] = value; } // ----------------------------------------------------------------------- // Process void DistrhoPluginGLBars::run(const float** inputs, float** outputs, uint32_t frames) { const float* in = inputs[0]; float* out = outputs[0]; if (out != in) std::memcpy(out, in, sizeof(float)*frames); const MutexLocker csm(fMutex); if (fState != nullptr) fState->AudioData(in, frames); } // ----------------------------------------------------------------------- Plugin* createPlugin() { return new DistrhoPluginGLBars(); } // ----------------------------------------------------------------------- END_NAMESPACE_DISTRHO