Browse Source

eg-sampler: Send update to UI if gain parameter changes

zrythm_meson
Filipe Coelho 2 years ago committed by David Robillard
parent
commit
64d4a4a469
  1. 26
      plugins/eg-sampler.lv2/sampler.c
  2. 28
      plugins/eg-sampler.lv2/uris.h

26
plugins/eg-sampler.lv2/sampler.c

@ -82,6 +82,7 @@ typedef struct { @@ -82,6 +82,7 @@ typedef struct {
sf_count_t frame;
bool play;
bool activated;
bool gain_changed;
bool sample_changed;
} Sampler;
@ -435,13 +436,21 @@ run(LV2_Handle instance, uint32_t sample_count) @@ -435,13 +436,21 @@ run(LV2_Handle instance, uint32_t sample_count)
// Start a sequence in the notify output port.
lv2_atom_forge_sequence_head(&self->forge, &self->notify_frame, 0);
// Send update to UI if sample has changed due to state restore
if (self->sample_changed) {
// Send update to UI if gain or sample has changed due to state restore
if (self->gain_changed || self->sample_changed) {
lv2_atom_forge_frame_time(&self->forge, 0);
write_set_file(&self->forge, &self->uris,
self->sample->path,
self->sample->path_len);
self->sample_changed = false;
if (self->gain_changed) {
write_set_gain(&self->forge, &self->uris, self->gain_dB);
self->gain_changed = false;
}
if (self->sample_changed) {
write_set_file(&self->forge, &self->uris,
self->sample->path,
self->sample->path_len);
self->sample_changed = false;
}
}
// Iterate over incoming events, emitting audio along the way
@ -587,8 +596,9 @@ restore(LV2_Handle instance, @@ -587,8 +596,9 @@ restore(LV2_Handle instance,
return LV2_STATE_ERR_BAD_TYPE;
}
self->gain_dB = *(const float*)value;
self->gain = DB_CO(self->gain_dB);
self->gain_dB = *(const float*)value;
self->gain = DB_CO(self->gain_dB);
self->gain_changed = true;
return LV2_STATE_SUCCESS;
}

28
plugins/eg-sampler.lv2/uris.h

@ -74,6 +74,34 @@ map_sampler_uris(LV2_URID_Map* map, SamplerURIs* uris) @@ -74,6 +74,34 @@ map_sampler_uris(LV2_URID_Map* map, SamplerURIs* uris)
uris->patch_value = map->map(map->handle, LV2_PATCH__value);
}
/**
Write a message like the following to `forge`:
[source,turtle]
----
[]
a patch:Set ;
patch:property param:gain ;
patch:value 0.0f .
----
*/
static inline LV2_Atom_Forge_Ref
write_set_gain(LV2_Atom_Forge* forge,
const SamplerURIs* uris,
const float gain)
{
LV2_Atom_Forge_Frame frame;
LV2_Atom_Forge_Ref set = lv2_atom_forge_object(
forge, &frame, 0, uris->patch_Set);
lv2_atom_forge_key(forge, uris->patch_property);
lv2_atom_forge_urid(forge, uris->param_gain);
lv2_atom_forge_key(forge, uris->patch_value);
lv2_atom_forge_float(forge, gain);
lv2_atom_forge_pop(forge, &frame);
return set;
}
/**
Write a message like the following to `forge`:
[source,turtle]

Loading…
Cancel
Save