/* * DISTRHO Cardinal Plugin * Copyright (C) 2021 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 3 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 GNU General Public License see the LICENSE file. */ #include #include #include "DistrhoUtils.hpp" using namespace rack; extern Model* modelSpringReverb; Plugin* pluginInstance__Befaco; namespace rack { Context::~Context() { } static thread_local Context* threadContext; Context* contextGet() { DISTRHO_SAFE_ASSERT(threadContext != nullptr); return threadContext; } // Apple's clang incorrectly compiles this function when -O2 or higher is enabled. #ifdef ARCH_MAC __attribute__((optnone)) #endif void contextSet(Context* const context) { // DISTRHO_SAFE_ASSERT(threadContext == nullptr); threadContext = context; } Exception::Exception(const char* format, ...) { va_list args; va_start(args, format); msg = string::fV(format, args); va_end(args); } namespace asset { std::string plugin(plugin::Plugin* plugin, std::string filename) { return {}; } std::string system(std::string filename) { return {}; } } namespace engine { float Engine::getParamValue(Module* module, int paramId) { return 0.0f; } float Engine::getParamSmoothValue(Module* module, int paramId) { return 0.0f; } void Engine::setParamValue(Module* module, int paramId, float value) {} void Engine::setParamSmoothValue(Module* module, int paramId, float value) {} } namespace plugin { void Plugin::addModel(Model* model) { // Check that the model is not added to a plugin already DISTRHO_SAFE_ASSERT_RETURN(model != nullptr,); DISTRHO_SAFE_ASSERT_RETURN(model->plugin == nullptr,); model->plugin = this; models.push_back(model); } Model* modelFromJson(json_t* moduleJ) { return nullptr; } std::vector plugins; } // namespace plugin } // namespace rack int main() { Plugin* const p = new Plugin; pluginInstance__Befaco = p; p->addModel(modelSpringReverb); engine::Module* module = modelSpringReverb->createModule(); d_stdout("modelSpringReverb is %p %p", modelSpringReverb, module); d_stdout("modelSpringReverb has %d ins, %d outs, %d lights, %d params", module->getNumInputs(), module->getNumOutputs(), module->getNumLights(), module->getNumParams()); for (int i=0; igetNumInputs(); ++i) d_stdout(" in %d has name '%s'; description '%s'", i+1, module->getInputInfo(i)->getFullName().c_str(), module->getInputInfo(i)->getDescription().c_str()); for (int i=0; igetNumOutputs(); ++i) d_stdout(" out %d has name '%s'; description '%s'", i+1, module->getOutputInfo(i)->getFullName().c_str(), module->getOutputInfo(i)->getDescription().c_str()); // for (int i=0; igetNumLights(); ++i) // { // LightInfo* l = module->getLightInfo(i); // DISTRHO_SAFE_ASSERT_CONTINUE(l != nullptr); // d_stdout(" light %d has name '%s'; description '%s'", // i+1, l->getName().c_str(), l->getDescription().c_str()); // } for (int i=0; igetNumParams(); ++i) { ParamQuantity* q = module->getParamQuantity(i); d_stdout(" param %d has name '%s'; description '%s'; unit '%s'; min %f; max %f; def %f", i+1, q->name.c_str(), q->getDescription().c_str(), q->unit.c_str(), q->minValue, q->maxValue, q->defaultValue); } Module::ProcessArgs args = { 48000.0f, 1.0f / 48000.0f, 0 }; for (int i=0; i<96000; ++i) { module->process(args); ++args.frame; } return 0; }