@@ -21,12 +21,15 @@ if [ "${USER}" = "cameron" ]; then | |||||
CPU_ARCH=skylake-avx512 | CPU_ARCH=skylake-avx512 | ||||
fi | fi | ||||
# Extra compiler flags (C and C++) | |||||
#EXTRA_FLAGS=-DUSE_LOG_PRINTF | |||||
EXTRA_FLAGS="" | |||||
# Extra C compiler flags | # Extra C compiler flags | ||||
export EXTRA_CFLAGS=-march=${CPU_ARCH} | |||||
#-DUSE_LOG_PRINTF | |||||
export EXTRA_CFLAGS="-march=${CPU_ARCH} ${EXTRA_FLAGS}" | |||||
# Extra C++ compiler flags | # Extra C++ compiler flags | ||||
export EXTRA_CPPFLAGS=-march=${CPU_ARCH} | |||||
export EXTRA_CPPFLAGS="-march=${CPU_ARCH} ${EXTRA_FLAGS}" | |||||
# Extra optimization flags (C/C++) | # Extra optimization flags (C/C++) | ||||
export EXTRA_OPTFLAGS= | export EXTRA_OPTFLAGS= | ||||
@@ -39,5 +42,5 @@ export VST2_SDK_DIR=/mnt/dev/vstsdk2.4/pluginterfaces/vst2.x/ | |||||
# n = build the plugin w/o 3rd party modules (only useful for debugging purposes) | # n = build the plugin w/o 3rd party modules (only useful for debugging purposes) | ||||
# y = statically link 3rd party modules | # y = statically link 3rd party modules | ||||
#export RACK_STATIC_MODULES=y | |||||
export RACK_STATIC_MODULES=n | |||||
export RACK_STATIC_MODULES=y | |||||
#export RACK_STATIC_MODULES=n |
@@ -13,6 +13,15 @@ | |||||
#endif // USE_VST2 | #endif // USE_VST2 | ||||
#ifdef USE_LOG_PRINTF | |||||
extern void log_printf(const char *logData, ...); | |||||
#undef Dprintf | |||||
#define Dprintf log_printf | |||||
#else | |||||
#define Dprintf printf | |||||
#endif // USE_LOG_PRINTF | |||||
namespace rack { | namespace rack { | ||||
@@ -185,6 +194,7 @@ void ModuleWidget::fromJson(json_t *rootJ) { | |||||
if (!paramIdJ) | if (!paramIdJ) | ||||
continue; | continue; | ||||
int paramId = json_integer_value(paramIdJ); | int paramId = json_integer_value(paramIdJ); | ||||
// Dprintf("fromJson: paramId=%d\n", paramId); | |||||
// Find ParamWidget(s) with paramId | // Find ParamWidget(s) with paramId | ||||
for (ParamWidget *paramWidget : params) { | for (ParamWidget *paramWidget : params) { | ||||
if (paramWidget->paramId == paramId) | if (paramWidget->paramId == paramId) | ||||
@@ -4,6 +4,14 @@ | |||||
#include "global.hpp" | #include "global.hpp" | ||||
#include "global_ui.hpp" | #include "global_ui.hpp" | ||||
#ifdef USE_LOG_PRINTF | |||||
extern void log_printf(const char *logData, ...); | |||||
#undef Dprintf | |||||
#define Dprintf log_printf | |||||
#else | |||||
#define Dprintf printf | |||||
#endif // USE_LOG_PRINTF | |||||
namespace rack { | namespace rack { | ||||
@@ -21,7 +29,11 @@ json_t *ParamWidget::toJson() { | |||||
void ParamWidget::fromJson(json_t *rootJ) { | void ParamWidget::fromJson(json_t *rootJ) { | ||||
json_t *valueJ = json_object_get(rootJ, "value"); | json_t *valueJ = json_object_get(rootJ, "value"); | ||||
if (valueJ) | if (valueJ) | ||||
setValue(json_number_value(valueJ)); | |||||
{ | |||||
float numberVal = json_number_value(valueJ); | |||||
// Dprintf("ParamWidget::fromJson: numberVal=%f\n", numberVal); | |||||
setValue(numberVal); | |||||
} | |||||
} | } | ||||
void ParamWidget::reset() { | void ParamWidget::reset() { | ||||
@@ -21,6 +21,14 @@ | |||||
#include <fenv.h> | #include <fenv.h> | ||||
#endif | #endif | ||||
#ifdef USE_LOG_PRINTF | |||||
extern void log_printf(const char *logData, ...); | |||||
#undef Dprintf | |||||
#define Dprintf log_printf | |||||
#else | |||||
#define Dprintf printf | |||||
#endif // USE_LOG_PRINTF | |||||
namespace rack { | namespace rack { | ||||
@@ -369,6 +377,7 @@ void vst2_handle_queued_params(void) { | |||||
if(paramRange > 0.0f) | if(paramRange > 0.0f) | ||||
{ | { | ||||
float value = (qp.value * paramRange) + paramWidget->minValue; | float value = (qp.value * paramRange) + paramWidget->minValue; | ||||
// Dprintf("vst2_handle_queued_params: paramId=%d value=%f min=%f max=%f\n", paramId, value, paramWidget->minValue, paramWidget->maxValue); | |||||
engineSetParam(module, paramId, value, false/*bVSTAutomate*/); | engineSetParam(module, paramId, value, false/*bVSTAutomate*/); | ||||
// Update UI widget | // Update UI widget | ||||
@@ -405,7 +414,21 @@ float vst2_get_param(int uniqueParamId) { | |||||
{ | { | ||||
if(sUI(paramId) < sUI(module->params.size())) // paranoia | if(sUI(paramId) < sUI(module->params.size())) // paranoia | ||||
{ | { | ||||
return module->params[paramId].value; | |||||
ModuleWidget *moduleWidget = global_ui->app.gRackWidget->findModuleWidgetByModule(module); | |||||
if(NULL != moduleWidget) | |||||
{ | |||||
// Find | |||||
ParamWidget *paramWidget = moduleWidget->findParamWidgetByParamId(paramId); | |||||
if(NULL != paramWidget) | |||||
{ | |||||
if(isfinite(paramWidget->minValue) && isfinite(paramWidget->maxValue)) | |||||
{ | |||||
float value = module->params[paramId].value; | |||||
value = (value - paramWidget->minValue) / (paramWidget->maxValue - paramWidget->minValue); | |||||
return value; | |||||
} | |||||
} | |||||
} | |||||
} | } | ||||
} | } | ||||
return 0.0f; | return 0.0f; | ||||
@@ -1983,6 +1983,11 @@ VstIntPtr VSTPluginDispatcher(VSTPlugin *vstPlugin, | |||||
} | } | ||||
break; | break; | ||||
case 56: | |||||
case 66: | |||||
// (todo) what are these ? Bitwig (Linux) sends a lot of them | |||||
break; | |||||
default: | default: | ||||
// ignoring all other opcodes | // ignoring all other opcodes | ||||
Dprintf("vstrack_plugin:dispatcher: unhandled opCode %d [ignored] \n", opCode); | Dprintf("vstrack_plugin:dispatcher: unhandled opCode %d [ignored] \n", opCode); | ||||
@@ -1,5 +1,13 @@ | |||||
#include "widgets.hpp" | #include "widgets.hpp" | ||||
#ifdef USE_LOG_PRINTF | |||||
extern void log_printf(const char *logData, ...); | |||||
#undef Dprintf | |||||
#define Dprintf log_printf | |||||
#else | |||||
#define Dprintf printf | |||||
#endif // USE_LOG_PRINTF | |||||
namespace rack { | namespace rack { | ||||
@@ -9,21 +17,23 @@ QuantityWidget::QuantityWidget() { | |||||
} | } | ||||
void QuantityWidget::setValue(float value) { | void QuantityWidget::setValue(float value) { | ||||
// printf("xxx QuantityWidget::setValue: value=%f\n", value); | |||||
// Dprintf("xxx QuantityWidget::setValue: value=%f\n", value); | |||||
if(isfinite(minValue) && isfinite(maxValue)) | if(isfinite(minValue) && isfinite(maxValue)) | ||||
{ | { | ||||
// Dprintf("xxx QuantityWidget::setValue: isfinite value=%f\n", value); | |||||
this->value = clamp(value, fminf(minValue, maxValue), fmaxf(minValue, maxValue)); | this->value = clamp(value, fminf(minValue, maxValue), fmaxf(minValue, maxValue)); | ||||
EventChange e; | EventChange e; | ||||
onChange(e); | onChange(e); | ||||
} | } | ||||
else | else | ||||
{ | { | ||||
// Dprintf("xxx QuantityWidget::setValue: !isfinite value=%f\n", value); | |||||
// Rotary knob | // Rotary knob | ||||
this->value = value; | this->value = value; | ||||
EventChange e; | EventChange e; | ||||
onChange(e); | onChange(e); | ||||
} | } | ||||
// printf("xxx QuantityWidget::setValue: LEAVE value=%f\n", value); | |||||
// Dprintf("xxx QuantityWidget::setValue: LEAVE value=%f\n", value); | |||||
} | } | ||||
void QuantityWidget::setLimits(float minValue, float maxValue) { | void QuantityWidget::setLimits(float minValue, float maxValue) { | ||||