Merge pull request #924 from jpcima/lv2-ardour

lv2: A6 workaround, single output atom port
This commit is contained in:
JP Cimalando 2021-06-22 17:29:01 +02:00 committed by GitHub
commit 42ac729be0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 62 additions and 76 deletions

View file

@ -123,6 +123,7 @@ sfizz_lv2_map_required_uris(sfizz_plugin_t *self)
self->sfizz_log_status_uri = map->map(map->handle, SFIZZ__logStatus); self->sfizz_log_status_uri = map->map(map->handle, SFIZZ__logStatus);
self->sfizz_check_modification_uri = map->map(map->handle, SFIZZ__checkModification); self->sfizz_check_modification_uri = map->map(map->handle, SFIZZ__checkModification);
self->sfizz_osc_blob_uri = map->map(map->handle, SFIZZ__OSCBlob); self->sfizz_osc_blob_uri = map->map(map->handle, SFIZZ__OSCBlob);
self->sfizz_notify_uri = map->map(map->handle, SFIZZ__Notify);
self->sfizz_audio_level_uri = map->map(map->handle, SFIZZ__AudioLevel); self->sfizz_audio_level_uri = map->map(map->handle, SFIZZ__AudioLevel);
self->time_position_uri = map->map(map->handle, LV2_TIME__Position); self->time_position_uri = map->map(map->handle, LV2_TIME__Position);
self->time_bar_uri = map->map(map->handle, LV2_TIME__bar); self->time_bar_uri = map->map(map->handle, LV2_TIME__bar);
@ -200,9 +201,6 @@ connect_port(LV2_Handle instance,
case SFIZZ_CONTROL: case SFIZZ_CONTROL:
self->control_port = (const LV2_Atom_Sequence *)data; self->control_port = (const LV2_Atom_Sequence *)data;
break; break;
case SFIZZ_NOTIFY:
self->notify_port = (LV2_Atom_Sequence *)data;
break;
case SFIZZ_AUTOMATE: case SFIZZ_AUTOMATE:
self->automate_port = (LV2_Atom_Sequence *)data; self->automate_port = (LV2_Atom_Sequence *)data;
break; break;
@ -331,7 +329,7 @@ sfizz_lv2_receive_message(void* data, int delay, const char* path, const char* s
if (osc_size > OSC_TEMP_SIZE) if (osc_size > OSC_TEMP_SIZE)
return; return;
LV2_Atom_Forge* forge = &self->forge_notify; LV2_Atom_Forge* forge = &self->forge_automate;
bool write_ok = bool write_ok =
lv2_atom_forge_frame_time(forge, 0) && lv2_atom_forge_frame_time(forge, 0) &&
lv2_atom_forge_atom(forge, osc_size, self->sfizz_osc_blob_uri) && lv2_atom_forge_atom(forge, osc_size, self->sfizz_osc_blob_uri) &&
@ -439,7 +437,6 @@ instantiate(const LV2_Descriptor *descriptor,
sfizz_lv2_map_required_uris(self); sfizz_lv2_map_required_uris(self);
// Initialize the forge // Initialize the forge
lv2_atom_forge_init(&self->forge_notify, self->map);
lv2_atom_forge_init(&self->forge_automate, self->map); lv2_atom_forge_init(&self->forge_automate, self->map);
lv2_atom_forge_init(&self->forge_secondary, self->map); lv2_atom_forge_init(&self->forge_secondary, self->map);
@ -545,13 +542,14 @@ deactivate(LV2_Handle instance)
} }
static void static void
sfizz_lv2_send_file_path(sfizz_plugin_t *self, LV2_Atom_Forge* forge, LV2_URID urid, const char *path) sfizz_lv2_send_file_path(sfizz_plugin_t *self, LV2_URID verb_uri, LV2_URID urid, const char *path)
{ {
LV2_Atom_Forge_Frame frame; LV2_Atom_Forge_Frame frame;
LV2_Atom_Forge* forge = &self->forge_automate;
bool write_ok = bool write_ok =
lv2_atom_forge_frame_time(forge, 0) && lv2_atom_forge_frame_time(forge, 0) &&
lv2_atom_forge_object(forge, &frame, 0, self->patch_set_uri) && lv2_atom_forge_object(forge, &frame, 0, verb_uri) &&
lv2_atom_forge_key(forge, self->patch_property_uri) && lv2_atom_forge_key(forge, self->patch_property_uri) &&
lv2_atom_forge_urid(forge, urid) && lv2_atom_forge_urid(forge, urid) &&
lv2_atom_forge_key(forge, self->patch_value_uri) && lv2_atom_forge_key(forge, self->patch_value_uri) &&
@ -562,14 +560,15 @@ sfizz_lv2_send_file_path(sfizz_plugin_t *self, LV2_Atom_Forge* forge, LV2_URID u
} }
static void static void
sfizz_lv2_send_controller(sfizz_plugin_t *self, LV2_Atom_Forge* forge, unsigned cc, float value) sfizz_lv2_send_controller(sfizz_plugin_t *self, LV2_URID verb_uri, unsigned cc, float value)
{ {
LV2_URID urid = sfizz_lv2_ccmap_map(self->ccmap, int(cc)); LV2_URID urid = sfizz_lv2_ccmap_map(self->ccmap, int(cc));
LV2_Atom_Forge_Frame frame; LV2_Atom_Forge_Frame frame;
LV2_Atom_Forge* forge = &self->forge_automate;
bool write_ok = bool write_ok =
lv2_atom_forge_frame_time(forge, 0) && lv2_atom_forge_frame_time(forge, 0) &&
lv2_atom_forge_object(forge, &frame, 0, self->patch_set_uri) && lv2_atom_forge_object(forge, &frame, 0, verb_uri) &&
lv2_atom_forge_key(forge, self->patch_property_uri) && lv2_atom_forge_key(forge, self->patch_property_uri) &&
lv2_atom_forge_urid(forge, urid) && lv2_atom_forge_urid(forge, urid) &&
lv2_atom_forge_key(forge, self->patch_value_uri) && lv2_atom_forge_key(forge, self->patch_value_uri) &&
@ -581,11 +580,12 @@ sfizz_lv2_send_controller(sfizz_plugin_t *self, LV2_Atom_Forge* forge, unsigned
#if defined(SFIZZ_LV2_UI) #if defined(SFIZZ_LV2_UI)
static void static void
sfizz_lv2_send_levels(sfizz_plugin_t *self, LV2_Atom_Forge* forge, float left, float right) sfizz_lv2_send_levels(sfizz_plugin_t *self, float left, float right)
{ {
const float levels[] = {left, right}; const float levels[] = {left, right};
uint32_t num_levels = sizeof(levels) / sizeof(levels[0]); uint32_t num_levels = sizeof(levels) / sizeof(levels[0]);
LV2_Atom_Forge* forge = &self->forge_automate;
bool write_ok = lv2_atom_forge_frame_time(forge, 0); bool write_ok = lv2_atom_forge_frame_time(forge, 0);
LV2_Atom_Vector *vector = nullptr; LV2_Atom_Vector *vector = nullptr;
@ -871,7 +871,7 @@ static void
run(LV2_Handle instance, uint32_t sample_count) run(LV2_Handle instance, uint32_t sample_count)
{ {
sfizz_plugin_t *self = (sfizz_plugin_t *)instance; sfizz_plugin_t *self = (sfizz_plugin_t *)instance;
assert(self->control_port && self->notify_port && self->automate_port); assert(self->control_port && self->automate_port);
if (!spin_mutex_trylock(self->synth_mutex)) if (!spin_mutex_trylock(self->synth_mutex))
{ {
@ -881,15 +881,10 @@ run(LV2_Handle instance, uint32_t sample_count)
} }
// Set up dedicated forges to write on their respective ports. // Set up dedicated forges to write on their respective ports.
const size_t notify_capacity = self->notify_port->atom.size;
lv2_atom_forge_set_buffer(&self->forge_notify, (uint8_t *)self->notify_port, notify_capacity);
const size_t automate_capacity = self->automate_port->atom.size; const size_t automate_capacity = self->automate_port->atom.size;
lv2_atom_forge_set_buffer(&self->forge_automate, (uint8_t *)self->automate_port, automate_capacity); lv2_atom_forge_set_buffer(&self->forge_automate, (uint8_t *)self->automate_port, automate_capacity);
// Start sequences in the respective output ports. // Start sequences in the respective output ports.
LV2_Atom_Forge_Frame notify_frame;
if (!lv2_atom_forge_sequence_head(&self->forge_notify, &notify_frame, 0))
assert(false);
LV2_Atom_Forge_Frame automate_frame; LV2_Atom_Forge_Frame automate_frame;
if (!lv2_atom_forge_sequence_head(&self->forge_automate, &automate_frame, 0)) if (!lv2_atom_forge_sequence_head(&self->forge_automate, &automate_frame, 0))
assert(false); assert(false);
@ -913,25 +908,25 @@ run(LV2_Handle instance, uint32_t sample_count)
lv2_atom_object_get(obj, self->patch_property_uri, &property, 0); lv2_atom_object_get(obj, self->patch_property_uri, &property, 0);
if (!property) // Send the full state if (!property) // Send the full state
{ {
sfizz_lv2_send_file_path(self, &self->forge_notify, self->sfizz_sfz_file_uri, self->sfz_file_path); sfizz_lv2_send_file_path(self, self->sfizz_notify_uri, self->sfizz_sfz_file_uri, self->sfz_file_path);
sfizz_lv2_send_file_path(self, &self->forge_notify, self->sfizz_scala_file_uri, self->scala_file_path); sfizz_lv2_send_file_path(self, self->sfizz_notify_uri, self->sfizz_scala_file_uri, self->scala_file_path);
for (unsigned cc = 0; cc < sfz::config::numCCs; ++cc) for (unsigned cc = 0; cc < sfz::config::numCCs; ++cc)
sfizz_lv2_send_controller(self, &self->forge_notify, cc, self->cc_current[cc]); sfizz_lv2_send_controller(self, self->sfizz_notify_uri, cc, self->cc_current[cc]);
} }
else if (property->body == self->sfizz_sfz_file_uri) else if (property->body == self->sfizz_sfz_file_uri)
{ {
sfizz_lv2_send_file_path(self, &self->forge_notify, self->sfizz_sfz_file_uri, self->sfz_file_path); sfizz_lv2_send_file_path(self, self->sfizz_notify_uri, self->sfizz_sfz_file_uri, self->sfz_file_path);
} }
else if (property->body == self->sfizz_scala_file_uri) else if (property->body == self->sfizz_scala_file_uri)
{ {
sfizz_lv2_send_file_path(self, &self->forge_notify, self->sfizz_scala_file_uri, self->scala_file_path); sfizz_lv2_send_file_path(self, self->sfizz_notify_uri, self->sfizz_scala_file_uri, self->scala_file_path);
} }
else else
{ {
int cc = sfizz_lv2_ccmap_unmap(self->ccmap, property->body); int cc = sfizz_lv2_ccmap_unmap(self->ccmap, property->body);
if (cc != -1) if (cc != -1)
sfizz_lv2_send_controller(self, &self->forge_notify, unsigned(cc), self->cc_current[cc]); sfizz_lv2_send_controller(self, self->sfizz_notify_uri, unsigned(cc), self->cc_current[cc]);
} }
} }
else if (obj->body.otype == self->time_position_uri) else if (obj->body.otype == self->time_position_uri)
@ -1079,7 +1074,7 @@ run(LV2_Handle instance, uint32_t sample_count)
for (unsigned cc = 0; cc < sfz::config::numCCs; ++cc) { for (unsigned cc = 0; cc < sfz::config::numCCs; ++cc) {
absl::optional<float> value = self->ccauto[cc]; absl::optional<float> value = self->ccauto[cc];
if (value) { if (value) {
sfizz_lv2_send_controller(self, &self->forge_automate, cc, *value); sfizz_lv2_send_controller(self, self->patch_set_uri, cc, *value);
self->ccauto[cc] = absl::nullopt; self->ccauto[cc] = absl::nullopt;
} }
} }
@ -1094,7 +1089,7 @@ run(LV2_Handle instance, uint32_t sample_count)
self->rms_follower.process(self->output_buffers[0], self->output_buffers[1], sample_count); self->rms_follower.process(self->output_buffers[0], self->output_buffers[1], sample_count);
const simde__m128 rms = self->rms_follower.getRMS(); const simde__m128 rms = self->rms_follower.getRMS();
const float *levels = (const float *)&rms; const float *levels = (const float *)&rms;
sfizz_lv2_send_levels(self, &self->forge_notify, levels[0], levels[1]); sfizz_lv2_send_levels(self, levels[0], levels[1]);
} }
else else
{ {
@ -1102,7 +1097,6 @@ run(LV2_Handle instance, uint32_t sample_count)
} }
#endif #endif
lv2_atom_forge_pop(&self->forge_notify, &notify_frame);
lv2_atom_forge_pop(&self->forge_automate, &automate_frame); lv2_atom_forge_pop(&self->forge_automate, &automate_frame);
} }

View file

@ -102,7 +102,7 @@ midnam:update a lv2:Feature .
lv2:port [ lv2:port [
a lv2:InputPort, atom:AtomPort ; a lv2:InputPort, atom:AtomPort ;
atom:bufferType atom:Sequence ; atom:bufferType atom:Sequence ;
atom:supports patch:Message, midi:MidiEvent, time:Position, <@LV2PLUGIN_URI@:OSCBlob> ; atom:supports patch:Message, midi:MidiEvent, time:Position, <@LV2PLUGIN_URI@:OSCBlob>, <@LV2PLUGIN_URI@:Notify> ;
lv2:designation lv2:control ; lv2:designation lv2:control ;
lv2:index 0 ; lv2:index 0 ;
lv2:symbol "control" ; lv2:symbol "control" ;
@ -113,24 +113,15 @@ midnam:update a lv2:Feature .
a lv2:OutputPort, atom:AtomPort ; a lv2:OutputPort, atom:AtomPort ;
atom:bufferType atom:Sequence ; atom:bufferType atom:Sequence ;
atom:supports patch:Message, <@LV2PLUGIN_URI@:OSCBlob> ; atom:supports patch:Message, <@LV2PLUGIN_URI@:OSCBlob> ;
lv2:index 1 ;
lv2:symbol "notify" ;
lv2:name "Notify",
"Notification"@fr ;
rsz:minimumSize 524288 ;
] , [
a lv2:OutputPort, atom:AtomPort ;
atom:bufferType atom:Sequence ;
atom:supports patch:Message ;
lv2:designation lv2:control ; lv2:designation lv2:control ;
lv2:index 2 ; lv2:index 1 ;
lv2:symbol "automate" ; lv2:symbol "automate" ;
lv2:name "Automate", lv2:name "Automate",
"Automatisation"@fr ; "Automatisation"@fr ;
rsz:minimumSize 524288 ; rsz:minimumSize 524288 ;
] , [ ] , [
a lv2:AudioPort, lv2:OutputPort ; a lv2:AudioPort, lv2:OutputPort ;
lv2:index 3 ; lv2:index 2 ;
lv2:symbol "out_left" ; lv2:symbol "out_left" ;
lv2:name "Left Output", lv2:name "Left Output",
"Sortie gauche"@fr , "Sortie gauche"@fr ,
@ -139,7 +130,7 @@ midnam:update a lv2:Feature .
lv2:designation pg:left lv2:designation pg:left
] , [ ] , [
a lv2:AudioPort, lv2:OutputPort ; a lv2:AudioPort, lv2:OutputPort ;
lv2:index 4 ; lv2:index 3 ;
lv2:symbol "out_right" ; lv2:symbol "out_right" ;
lv2:name "Right Output", lv2:name "Right Output",
"Sortie droite"@fr , "Sortie droite"@fr ,
@ -148,7 +139,7 @@ midnam:update a lv2:Feature .
lv2:designation pg:right lv2:designation pg:right
] , [ ] , [
a lv2:InputPort, lv2:ControlPort ; a lv2:InputPort, lv2:ControlPort ;
lv2:index 5 ; lv2:index 4 ;
lv2:symbol "volume" ; lv2:symbol "volume" ;
lv2:name "Volume" ; lv2:name "Volume" ;
lv2:default 0.0 ; lv2:default 0.0 ;
@ -157,7 +148,7 @@ midnam:update a lv2:Feature .
units:unit units:db units:unit units:db
] , [ ] , [
a lv2:InputPort, lv2:ControlPort ; a lv2:InputPort, lv2:ControlPort ;
lv2:index 6 ; lv2:index 5 ;
lv2:symbol "num_voices" ; lv2:symbol "num_voices" ;
lv2:name "Polyphony", lv2:name "Polyphony",
"Polyphonie"@fr , "Polyphonie"@fr ,
@ -202,7 +193,7 @@ midnam:update a lv2:Feature .
] ; ] ;
] , [ ] , [
a lv2:InputPort, lv2:ControlPort ; a lv2:InputPort, lv2:ControlPort ;
lv2:index 7 ; lv2:index 6 ;
lv2:symbol "oversampling" ; lv2:symbol "oversampling" ;
lv2:name "Oversampling factor", lv2:name "Oversampling factor",
"Facteur de suréchantillonnage"@fr , "Facteur de suréchantillonnage"@fr ,
@ -237,7 +228,7 @@ midnam:update a lv2:Feature .
] ; ] ;
] , [ ] , [
a lv2:InputPort, lv2:ControlPort ; a lv2:InputPort, lv2:ControlPort ;
lv2:index 8 ; lv2:index 7 ;
lv2:symbol "preload_size" ; lv2:symbol "preload_size" ;
lv2:name "Preload size", lv2:name "Preload size",
"Taille préchargée"@fr , "Taille préchargée"@fr ,
@ -280,7 +271,7 @@ midnam:update a lv2:Feature .
] ; ] ;
] , [ ] , [
a lv2:InputPort, lv2:ControlPort ; a lv2:InputPort, lv2:ControlPort ;
lv2:index 9 ; lv2:index 8 ;
lv2:symbol "freewheeling" ; lv2:symbol "freewheeling" ;
lv2:name "Freewheeling", lv2:name "Freewheeling",
"En roue libre (freewheeling)"@fr , "En roue libre (freewheeling)"@fr ,
@ -292,7 +283,7 @@ midnam:update a lv2:Feature .
lv2:maximum 1 ; lv2:maximum 1 ;
] , [ ] , [
a lv2:InputPort, lv2:ControlPort ; a lv2:InputPort, lv2:ControlPort ;
lv2:index 10 ; lv2:index 9 ;
lv2:symbol "scala_root_key" ; lv2:symbol "scala_root_key" ;
lv2:name "Scala root key", lv2:name "Scala root key",
"Tonalité de base Scala"@fr , "Tonalité de base Scala"@fr ,
@ -305,7 +296,7 @@ midnam:update a lv2:Feature .
units:unit units:midiNote units:unit units:midiNote
] , [ ] , [
a lv2:InputPort, lv2:ControlPort ; a lv2:InputPort, lv2:ControlPort ;
lv2:index 11 ; lv2:index 10 ;
lv2:symbol "tuning_frequency" ; lv2:symbol "tuning_frequency" ;
lv2:name "Tuning frequency", lv2:name "Tuning frequency",
"Fréquence d'accordage"@fr , "Fréquence d'accordage"@fr ,
@ -317,7 +308,7 @@ midnam:update a lv2:Feature .
units:unit units:hz units:unit units:hz
] , [ ] , [
a lv2:InputPort, lv2:ControlPort ; a lv2:InputPort, lv2:ControlPort ;
lv2:index 12 ; lv2:index 11 ;
lv2:symbol "stretched_tuning" ; lv2:symbol "stretched_tuning" ;
lv2:name "Stretched tuning", lv2:name "Stretched tuning",
"Accordage étiré"@fr , "Accordage étiré"@fr ,
@ -329,7 +320,7 @@ midnam:update a lv2:Feature .
units:unit units:coef units:unit units:coef
] , [ ] , [
a lv2:InputPort, lv2:ControlPort ; a lv2:InputPort, lv2:ControlPort ;
lv2:index 13 ; lv2:index 12 ;
lv2:symbol "sample_quality" ; lv2:symbol "sample_quality" ;
lv2:name "Sample quality", lv2:name "Sample quality",
"Qualité des échantillons"@fr , "Qualité des échantillons"@fr ,
@ -340,7 +331,7 @@ midnam:update a lv2:Feature .
lv2:maximum 10.0 lv2:maximum 10.0
] , [ ] , [
a lv2:InputPort, lv2:ControlPort ; a lv2:InputPort, lv2:ControlPort ;
lv2:index 14 ; lv2:index 13 ;
lv2:symbol "oscillator_quality" ; lv2:symbol "oscillator_quality" ;
lv2:name "Oscillator quality", lv2:name "Oscillator quality",
"Qualité des oscillateurs"@fr , "Qualité des oscillateurs"@fr ,
@ -351,7 +342,7 @@ midnam:update a lv2:Feature .
lv2:maximum 3.0 lv2:maximum 3.0
] , [ ] , [
a lv2:OutputPort, lv2:ControlPort ; a lv2:OutputPort, lv2:ControlPort ;
lv2:index 15 ; lv2:index 14 ;
lv2:symbol "active_voices" ; lv2:symbol "active_voices" ;
lv2:name "Active voices", lv2:name "Active voices",
"Voix utilisées"@fr ; "Voix utilisées"@fr ;
@ -362,7 +353,7 @@ midnam:update a lv2:Feature .
lv2:maximum 256 ; lv2:maximum 256 ;
] , [ ] , [
a lv2:OutputPort, lv2:ControlPort ; a lv2:OutputPort, lv2:ControlPort ;
lv2:index 16 ; lv2:index 15 ;
lv2:symbol "num_curves" ; lv2:symbol "num_curves" ;
lv2:name "Number of curves", lv2:name "Number of curves",
"Nombre de courbes"@fr ; "Nombre de courbes"@fr ;
@ -373,7 +364,7 @@ midnam:update a lv2:Feature .
lv2:maximum 65535 ; lv2:maximum 65535 ;
] , [ ] , [
a lv2:OutputPort, lv2:ControlPort ; a lv2:OutputPort, lv2:ControlPort ;
lv2:index 17 ; lv2:index 16 ;
lv2:symbol "num_masters" ; lv2:symbol "num_masters" ;
lv2:name "Number of masters", lv2:name "Number of masters",
"Nombre de maîtres"@fr ; "Nombre de maîtres"@fr ;
@ -384,7 +375,7 @@ midnam:update a lv2:Feature .
lv2:maximum 65535 ; lv2:maximum 65535 ;
] , [ ] , [
a lv2:OutputPort, lv2:ControlPort ; a lv2:OutputPort, lv2:ControlPort ;
lv2:index 18 ; lv2:index 17 ;
lv2:symbol "num_groups" ; lv2:symbol "num_groups" ;
lv2:name "Number of groups", lv2:name "Number of groups",
"Nombre de groupes"@fr ; "Nombre de groupes"@fr ;
@ -395,7 +386,7 @@ midnam:update a lv2:Feature .
lv2:maximum 65535 ; lv2:maximum 65535 ;
] , [ ] , [
a lv2:OutputPort, lv2:ControlPort ; a lv2:OutputPort, lv2:ControlPort ;
lv2:index 19 ; lv2:index 18 ;
lv2:symbol "num_regions" ; lv2:symbol "num_regions" ;
lv2:name "Number of regions", lv2:name "Number of regions",
"Nombre de régions"@fr ; "Nombre de régions"@fr ;
@ -406,7 +397,7 @@ midnam:update a lv2:Feature .
lv2:maximum 65535 ; lv2:maximum 65535 ;
] , [ ] , [
a lv2:OutputPort, lv2:ControlPort ; a lv2:OutputPort, lv2:ControlPort ;
lv2:index 20 ; lv2:index 19 ;
lv2:symbol "num_samples" ; lv2:symbol "num_samples" ;
lv2:name "Number of samples", lv2:name "Number of samples",
"Nombre d'échantillons"@fr ; "Nombre d'échantillons"@fr ;

View file

@ -44,32 +44,32 @@
#define SFIZZ__checkModification SFIZZ_URI ":" "check_modification" #define SFIZZ__checkModification SFIZZ_URI ":" "check_modification"
// OSC atoms // OSC atoms
#define SFIZZ__OSCBlob SFIZZ_URI ":" "OSCBlob" #define SFIZZ__OSCBlob SFIZZ_URI ":" "OSCBlob"
#define SFIZZ__Notify SFIZZ_URI ":" "Notify"
// Level atoms // Level atoms
#define SFIZZ__AudioLevel SFIZZ_URI ":" "AudioLevel" #define SFIZZ__AudioLevel SFIZZ_URI ":" "AudioLevel"
enum enum
{ {
SFIZZ_CONTROL = 0, SFIZZ_CONTROL = 0,
SFIZZ_NOTIFY = 1, SFIZZ_AUTOMATE = 1,
SFIZZ_AUTOMATE = 2, SFIZZ_LEFT = 2,
SFIZZ_LEFT = 3, SFIZZ_RIGHT = 3,
SFIZZ_RIGHT = 4, SFIZZ_VOLUME = 4,
SFIZZ_VOLUME = 5, SFIZZ_POLYPHONY = 5,
SFIZZ_POLYPHONY = 6, SFIZZ_OVERSAMPLING = 6,
SFIZZ_OVERSAMPLING = 7, SFIZZ_PRELOAD = 7,
SFIZZ_PRELOAD = 8, SFIZZ_FREEWHEELING = 8,
SFIZZ_FREEWHEELING = 9, SFIZZ_SCALA_ROOT_KEY = 9,
SFIZZ_SCALA_ROOT_KEY = 10, SFIZZ_TUNING_FREQUENCY = 10,
SFIZZ_TUNING_FREQUENCY = 11, SFIZZ_STRETCH_TUNING = 11,
SFIZZ_STRETCH_TUNING = 12, SFIZZ_SAMPLE_QUALITY = 12,
SFIZZ_SAMPLE_QUALITY = 13, SFIZZ_OSCILLATOR_QUALITY = 13,
SFIZZ_OSCILLATOR_QUALITY = 14, SFIZZ_ACTIVE_VOICES = 14,
SFIZZ_ACTIVE_VOICES = 15, SFIZZ_NUM_CURVES = 15,
SFIZZ_NUM_CURVES = 16, SFIZZ_NUM_MASTERS = 16,
SFIZZ_NUM_MASTERS = 17, SFIZZ_NUM_GROUPS = 17,
SFIZZ_NUM_GROUPS = 18, SFIZZ_NUM_REGIONS = 18,
SFIZZ_NUM_REGIONS = 19, SFIZZ_NUM_SAMPLES = 19,
SFIZZ_NUM_SAMPLES = 20,
}; };
// For use with instance-access // For use with instance-access

View file

@ -34,7 +34,6 @@ struct sfizz_plugin_t
// Ports // Ports
const LV2_Atom_Sequence *control_port {}; const LV2_Atom_Sequence *control_port {};
LV2_Atom_Sequence *notify_port {};
LV2_Atom_Sequence *automate_port {}; LV2_Atom_Sequence *automate_port {};
float *output_buffers[2] {}; float *output_buffers[2] {};
const float *volume_port {}; const float *volume_port {};
@ -55,7 +54,6 @@ struct sfizz_plugin_t
float *num_samples_port {}; float *num_samples_port {};
// Atom forge // Atom forge
LV2_Atom_Forge forge_notify {}; ///< Forge for writing notification atoms in run thread
LV2_Atom_Forge forge_automate {}; ///< Forge for writing automation atoms in run thread LV2_Atom_Forge forge_automate {}; ///< Forge for writing automation atoms in run thread
LV2_Atom_Forge forge_secondary {}; ///< Forge for writing into other buffers LV2_Atom_Forge forge_secondary {}; ///< Forge for writing into other buffers
@ -92,6 +90,7 @@ struct sfizz_plugin_t
LV2_URID sfizz_check_modification_uri {}; LV2_URID sfizz_check_modification_uri {};
LV2_URID sfizz_active_voices_uri {}; LV2_URID sfizz_active_voices_uri {};
LV2_URID sfizz_osc_blob_uri {}; LV2_URID sfizz_osc_blob_uri {};
LV2_URID sfizz_notify_uri {};
LV2_URID sfizz_audio_level_uri {}; LV2_URID sfizz_audio_level_uri {};
LV2_URID time_position_uri {}; LV2_URID time_position_uri {};
LV2_URID time_bar_uri {}; LV2_URID time_bar_uri {};

View file

@ -116,6 +116,7 @@ struct sfizz_ui_t : EditorController, VSTGUIEditorInterface {
LV2_URID sfizz_sfz_file_uri; LV2_URID sfizz_sfz_file_uri;
LV2_URID sfizz_scala_file_uri; LV2_URID sfizz_scala_file_uri;
LV2_URID sfizz_osc_blob_uri; LV2_URID sfizz_osc_blob_uri;
LV2_URID sfizz_notify_uri;
LV2_URID sfizz_audio_level_uri; LV2_URID sfizz_audio_level_uri;
std::unique_ptr<sfizz_lv2_ccmap, sfizz_lv2_ccmap_delete> ccmap; std::unique_ptr<sfizz_lv2_ccmap, sfizz_lv2_ccmap_delete> ccmap;
@ -218,6 +219,7 @@ instantiate(const LV2UI_Descriptor *descriptor,
self->sfizz_sfz_file_uri = map->map(map->handle, SFIZZ__sfzFile); self->sfizz_sfz_file_uri = map->map(map->handle, SFIZZ__sfzFile);
self->sfizz_scala_file_uri = map->map(map->handle, SFIZZ__tuningfile); self->sfizz_scala_file_uri = map->map(map->handle, SFIZZ__tuningfile);
self->sfizz_osc_blob_uri = map->map(map->handle, SFIZZ__OSCBlob); self->sfizz_osc_blob_uri = map->map(map->handle, SFIZZ__OSCBlob);
self->sfizz_notify_uri = map->map(map->handle, SFIZZ__Notify);
self->sfizz_audio_level_uri = map->map(map->handle, SFIZZ__AudioLevel); self->sfizz_audio_level_uri = map->map(map->handle, SFIZZ__AudioLevel);
self->ccmap.reset(sfizz_lv2_ccmap_create(map)); self->ccmap.reset(sfizz_lv2_ccmap_create(map));