Commit 9965f3bd authored by ale's avatar ale

Properly expose humanize-enable boolean control

And remove some obsolete state management code.
parent f9c88ca6
......@@ -129,6 +129,16 @@
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
] , [
a lv2:InputPort ,
lv2:ControlPort ;
lv2:index 10 ;
lv2:symbol "hu_enable" ;
lv2:name "Enable Humanizer" ;
lv2:portProperty lv2:toggled ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
];
state:state [
<http://lv2.incal.net/plugins/hydrumkit#drumkit> </usr/share/hydrogen/data/drumkits/GMkit/drumkit.xml>
......
......@@ -250,12 +250,20 @@ static void handle_event(struct sampler_plugin *plugin, LV2_Atom_Event *ev) {
}
static void update_hsettings(struct sampler_plugin *plugin) {
// Apply settings to sampler.
// Apply settings to sampler.
if (*plugin->input_ports[PORT_HUMANIZE_ENABLE] > 0) {
plugin->hsettings.latency_max_ms = *plugin->input_ports[PORT_HUMANIZE_LATENCY_MAX];
plugin->hsettings.latency_stddev_ms = *plugin->input_ports[PORT_HUMANIZE_LATENCY_STDDEV];
plugin->hsettings.latency_laid_back_ms = *plugin->input_ports[PORT_HUMANIZE_LATENCY_LAID_BACK];
plugin->hsettings.latency_regain = *plugin->input_ports[PORT_HUMANIZE_LATENCY_REGAIN];
plugin->hsettings.velocity_stddev = *plugin->input_ports[PORT_HUMANIZE_VELOCITY_STDDEV];
} else {
plugin->hsettings.latency_max_ms = 0;
plugin->hsettings.latency_stddev_ms = 0;
plugin->hsettings.latency_laid_back_ms = 0;
plugin->hsettings.latency_regain = 1;
plugin->hsettings.velocity_stddev = 0;
}
}
static void render(struct sampler_plugin *plugin, uint32_t start,
......@@ -277,26 +285,7 @@ static void run(LV2_Handle instance, uint32_t sample_count) {
if (plugin->send_settings_to_ui) {
plugin->send_settings_to_ui = 0;
#if 0
// Forge container object of type 'ui_state'
LV2_Atom_Forge_Frame frame;
lv2_atom_forge_frame_time(&plugin->forge, 0);
lv2_atom_forge_object(&plugin->forge, &frame, 0, plugin->uris.ui_State);
// Add UI state as properties
lv2_atom_forge_key(&plugin->forge, plugin->uris.ui_hu_latency_max);
lv2_atom_forge_float(&plugin->forge, plugin->hsettings.latency_max_ms);
lv2_atom_forge_key(&plugin->forge, plugin->uris.ui_hu_latency_stddev);
lv2_atom_forge_float(&plugin->forge, plugin->hsettings.latency_stddev_ms);
lv2_atom_forge_key(&plugin->forge, plugin->uris.ui_hu_latency_laidback);
lv2_atom_forge_float(&plugin->forge, plugin->hsettings.latency_laid_back_ms);
lv2_atom_forge_key(&plugin->forge, plugin->uris.ui_hu_latency_regain);
lv2_atom_forge_float(&plugin->forge, plugin->hsettings.latency_regain);
lv2_atom_forge_key(&plugin->forge, plugin->uris.ui_hu_velocity_stddev);
lv2_atom_forge_float(&plugin->forge, plugin->hsettings.velocity_stddev);
lv2_atom_forge_pop(&plugin->forge, &frame);
#endif
// Currently a no-op.
}
// Incrementally process control events and render audio data.
......
......@@ -12,6 +12,7 @@
#define PORT_HUMANIZE_LATENCY_LAID_BACK 7
#define PORT_HUMANIZE_LATENCY_REGAIN 8
#define PORT_HUMANIZE_VELOCITY_STDDEV 9
#define PORT_LAST 10
#define PORT_HUMANIZE_ENABLE 10
#define PORT_LAST 11
#endif
......@@ -111,12 +111,12 @@ static void on_load_dialog_response(GtkDialog *widget, gint response, void *hand
};
}
#define WRITECONTROLVALUE(expr, port) \
val = ui->humanize_enabled ? expr : 0; \
ui->write(ui->controller, port, sizeof(float), 0, (const void *)&val)
#define WRITECONTROLVALUE(expr, port) { \
float val_ = (expr); \
ui->write(ui->controller, port, sizeof(float), 0, (const void *)&val_); \
}
static void write_control_values(struct plugin_ui *ui) {
float val;
WRITECONTROLVALUE(ui->humanize_latency_max_value * 400.0, PORT_HUMANIZE_LATENCY_MAX);
WRITECONTROLVALUE(ui->humanize_latency_stddev_value * 100.0, PORT_HUMANIZE_LATENCY_STDDEV);
WRITECONTROLVALUE(ui->humanize_latency_laid_back_value* 100.0, PORT_HUMANIZE_LATENCY_LAID_BACK);
......@@ -128,7 +128,7 @@ static void on_humanize_button_click(GtkButton *widget, void *handle) {
struct plugin_ui *ui = (struct plugin_ui *)handle;
ui->humanize_enabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
write_control_values(ui);
WRITECONTROLVALUE((float)ui->humanize_enabled, PORT_HUMANIZE_ENABLE);
}
static void on_humanize_knob_change(KnobWidget *widget, void *handle) {
......@@ -282,56 +282,6 @@ static void cleanup(LV2UI_Handle handle) {
free(ui);
}
static int recv_ui_state(struct plugin_ui *ui, const LV2_Atom_Object *obj) {
#if 0
const LV2_Atom *hu_latency_max_val = NULL;
const LV2_Atom *hu_latency_stddev_val = NULL;
const LV2_Atom *hu_latency_laidback_val = NULL;
const LV2_Atom *hu_latency_regain_val = NULL;
const LV2_Atom *hu_velocity_stddev_val = NULL;
const int n_props = lv2_atom_object_get(obj,
ui->uris.ui_hu_latency_max, &hu_latency_max_val,
ui->uris.ui_hu_latency_stddev, &hu_latency_stddev_val,
ui->uris.ui_hu_latency_laidback, &hu_latency_laidback_val,
ui->uris.ui_hu_latency_regain, &hu_latency_regain_val,
ui->uris.ui_hu_velocity_stddev, &hu_velocity_stddev_val,
NULL);
if (n_props != 5 ||
hu_latency_max_val->type != ui->uris.atom_Float ||
hu_latency_stddev_val->type != ui->uris.atom_Float ||
hu_latency_laidback_val->type != ui->uris.atom_Float ||
hu_latency_regain_val->type != ui->uris.atom_Float ||
hu_velocity_stddev_val->type != ui->uris.atom_Float) {
// Object does not have the required properties with correct types.
return 0;
}
// Get the values we need from the body of the property value atoms.
ui->humanize_latency_max_value = 400 * ((const LV2_Atom_Float *)hu_latency_max_val)->body;
ui->humanize_latency_stddev_value = 100 * ((const LV2_Atom_Float *)hu_latency_stddev_val)->body;
ui->humanize_latency_laid_back_value = 100 * ((const LV2_Atom_Float *)hu_latency_laidback_val)->body;
ui->humanize_latency_regain_value = ((const LV2_Atom_Float *)hu_latency_regain_val)->body;
ui->humanize_velocity_stddev_value = ((const LV2_Atom_Float *)hu_velocity_stddev_val)->body;
printf("received UI state update, huLat=%g/%g/%g/%g, huVel=%g\n",
ui->humanize_latency_max_value,
ui->humanize_latency_stddev_value,
ui->humanize_latency_laid_back_value,
ui->humanize_latency_regain_value,
ui->humanize_velocity_stddev_value);
// Update UI.
gtk_widget_queue_draw(ui->humanize_latency_max_knob);
gtk_widget_queue_draw(ui->humanize_latency_stddev_knob);
gtk_widget_queue_draw(ui->humanize_latency_laid_back_knob);
gtk_widget_queue_draw(ui->humanize_latency_regain_knob);
gtk_widget_queue_draw(ui->humanize_velocity_stddev_knob);
#endif
return 1;
}
// The drumkit "name" that we show to the user is just the basename of
// the drumkit directory.
static char *get_drumkit_label(const char *filename) {
......@@ -370,10 +320,6 @@ static void port_event(LV2UI_Handle handle, uint32_t port_index,
} else if (!path) {
lv2_log_warning(&ui->logger, "Set message has no path\n");
}
} else if (obj->body.otype == ui->uris.ui_State) {
if (!recv_ui_state(ui, obj)) {
lv2_log_error(&ui->logger, "Error receiving UI state\n");
}
}
} else {
lv2_log_error(&ui->logger, "Unknown message type\n");
......@@ -398,6 +344,10 @@ static void port_event(LV2UI_Handle handle, uint32_t port_index,
float val = *(float *)buffer;
ui->humanize_velocity_stddev_value = val;
gtk_widget_queue_draw(ui->humanize_velocity_stddev_knob);
} else if (port_index == PORT_HUMANIZE_ENABLE) {
float val = *(float *)buffer;
int enabled = (val > 0) ? 1 : 0;
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ui->humanize_button), enabled);
} else {
lv2_log_warning(&ui->logger, "Unknown port event format\n");
}
......
......@@ -19,11 +19,6 @@
#define EG_SAMPLER__freeDrumkit EG_SAMPLER_URI "#freeDrumkit"
#define EG_SAMPLER__drumkit EG_SAMPLER_URI "#drumkit"
#define EG_SAMPLER__uiState EG_SAMPLER_URI "#UiState"
#define EG_SAMPLER__huLatencyMax EG_SAMPLER_URI "#hu-latency-max"
#define EG_SAMPLER__huLatencyStdDev EG_SAMPLER_URI "#hu-latency-stddev"
#define EG_SAMPLER__huLatencyLaidBack EG_SAMPLER_URI "#hu-latency-laidback"
#define EG_SAMPLER__huLatencyRegain EG_SAMPLER_URI "#hu-latency-regain"
#define EG_SAMPLER__huVelocityStdDev EG_SAMPLER_URI "#hu-velocity-stddev"
typedef struct {
LV2_URID atom_Float;
......@@ -41,11 +36,6 @@ typedef struct {
LV2_URID patch_property;
LV2_URID patch_value;
LV2_URID ui_State;
LV2_URID ui_hu_latency_max;
LV2_URID ui_hu_latency_stddev;
LV2_URID ui_hu_latency_laidback;
LV2_URID ui_hu_latency_regain;
LV2_URID ui_hu_velocity_stddev;
} plugin_uris;
static inline void map_sampler_uris(LV2_URID_Map *map, plugin_uris *uris) {
......@@ -64,11 +54,6 @@ static inline void map_sampler_uris(LV2_URID_Map *map, plugin_uris *uris) {
uris->patch_property = map->map(map->handle, LV2_PATCH__property);
uris->patch_value = map->map(map->handle, LV2_PATCH__value);
uris->ui_State = map->map(map->handle, EG_SAMPLER__uiState);
uris->ui_hu_latency_max = map->map(map->handle, EG_SAMPLER__huLatencyMax);
uris->ui_hu_latency_stddev = map->map(map->handle, EG_SAMPLER__huLatencyStdDev);
uris->ui_hu_latency_laidback = map->map(map->handle, EG_SAMPLER__huLatencyLaidBack);
uris->ui_hu_latency_regain = map->map(map->handle, EG_SAMPLER__huLatencyRegain);
uris->ui_hu_velocity_stddev = map->map(map->handle, EG_SAMPLER__huVelocityStdDev);
}
/**
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment