1
0
Fork 0
Commit graph

247 commits

Author SHA1 Message Date
Robbert van der Helm 7ca855b3fc Make State cloneable
This is needed for user preset support.
2022-04-07 16:50:02 +02:00
Robbert van der Helm 083885a40c Rework Params trait API with Arc instead of Pin
This is a breaking change requiring a small change to plugin
implementations.

The reason why `Pin<&dyn Params>` was used was more as a hint to
indicate that the object must last for the plugin's lifetime, but `Pin`
doesn't enforce that. It also makes the APIs a lot more awkward.
Requiring the use of `Arc` fixes the following problems:

- When storing the params object in the wrapper, the `ParamPtr`s are
  guaranteed to be stable.
- This makes it possible to access the `Params` object without acquiring
  a lock on the plugin, this is very important for implementing
  plugin-side preset management.
- It enforces immutability on the `Params` object.
- And of course the API is much nicer without a bunch of unsafe code to
  work around Pin's limitations.
2022-04-07 15:31:46 +02:00
Robbert van der Helm 54371fb488 Expose the State object
So we can later allow plugins to save and restore state from their GUI
this way.
2022-04-07 14:12:53 +02:00
Robbert van der Helm b1c34146ee Get rid of automatically generated bypass params
I thought these were mandatory in VST3, they are not.
2022-04-06 13:34:32 +02:00
Robbert van der Helm a49393f863 Update for CLAP 0.24 2022-04-05 16:32:00 +02:00
Robbert van der Helm f301726f37 Fix sample accurate automation for VST3 2022-03-29 00:56:04 +02:00
Robbert van der Helm 7b9eff456c Update for new vizia resize patch
This version uses a property on the context instead of events. This gets
rid of all of the problems and complexity of the previous
implementation.
2022-03-29 00:02:11 +02:00
Robbert van der Helm c568e5d3be Don't wait for the request resize result
We'll need to find a workaround for this, but this makes resizing in the
CLAP example host way too slow.
2022-03-28 00:50:08 +02:00
Robbert van der Helm f3330aee86 Implement the resize request callback for CLAP 2022-03-27 23:11:04 +02:00
Robbert van der Helm f9db59f4bc Add a resize request callback to VST3 GuiContext
With some more work in baseview this can be used to resize windows from
the plugin.
2022-03-27 19:23:43 +02:00
Robbert van der Helm 8d71369b2e Rename .is_bypass() to .make_bypass()
Because just like `.bypass()` sounds like a getter, so does
`.is_bypass()`.
2022-03-27 03:45:06 +02:00
Robbert van der Helm 7f365d1113 Update dependencies 2022-03-25 21:04:48 +01:00
Robbert van der Helm 8090d0ae41 Add explicit bypass parameter handling
Plugins can mark a `BoolParam` with `.is_bypass()`. Hosts can then link
use that parameter directly in their own UI.
2022-03-23 17:42:48 +01:00
Robbert van der Helm 0cb26b5b4c Don't process audio for bypassed plugins 2022-03-23 15:49:34 +01:00
Robbert van der Helm c6a34a63c4 Hide non-automatable parameters 2022-03-23 13:52:23 +01:00
Robbert van der Helm e9983cf71c Use ParamFlags::NON_AUTOMATABLE in the wrappers
Setting this will cause the parameter to be hidden from the host's
generic UI and automation lanes.
2022-03-23 13:11:00 +01:00
Robbert van der Helm f084f14095 Refactor GUIs to use param's own default value
This removes the need to pass a lot of these `ParamSetter`s and
`GuiContext`s around. We also don't need explicit events to reset a
parameter anymore since you can get this information from the parameter
itself.
2022-03-21 13:11:36 +01:00
Robbert van der Helm c22e522629 Greatly simplify Params trait
This now is a single vector with all of the information in the correct
order instead of the hashmaps and a vector. This avoids deduplication,
and it especially makes manual `Params` implementations a lot more
convenient since you can't mess up with mismatching IDs between the
methods.

To accommodate exactly this, the persistent fields methods also have a
default implementation and the trait has been marked as `unsafe` since
it's the programmer's responsibility to make sure these `ParamPtr`s will
remain valid.
2022-03-20 13:05:02 +01:00
Robbert van der Helm b9d79771cc Use String instead of &'static str in Params
This may hurt performance in generic UIs a bit, but it will allow you to
programatically generate custom Params implementations for repeated
Parameters structs.
2022-03-20 02:14:18 +01:00
Robbert van der Helm 8077f10c27 Replace index based for loop
This initially did a linear search within the loop so iterating over the
collection wasn't possible. Now we need to use a hashmap anyways, so
this can be simplified again.
2022-03-17 23:00:15 +01:00
Robbert van der Helm edb492932f Fix parent finding in VST3 unit transformation
Oops.
2022-03-16 22:01:47 +01:00
Robbert van der Helm d9e943a88d Filter out the root group 2022-03-16 22:00:31 +01:00
Robbert van der Helm 8d6a7ae861 Add Debug implementations for ParamUnits 2022-03-16 21:55:59 +01:00
Robbert van der Helm 6e31e18b88 Add parameter groups to VST3 wrapper using units
This was such a mess to implement, and none of the hosts I have
installed even support it.
2022-03-16 20:40:11 +01:00
Robbert van der Helm 2bf32aa771 Add the ParamUnits to the VST3 wrapper 2022-03-16 20:26:02 +01:00
Robbert van der Helm ea30ba7ffb Initialize parameter fields earlier
This seems a bit nicer than initializing them on the struct as empty and
then mutating the struct.
2022-03-16 20:26:02 +01:00
Robbert van der Helm 63a7aadb75 Add an abstraction around VST3's unit shenanigans
And the ability to convert group paths to them.
2022-03-16 20:26:02 +01:00
Robbert van der Helm bbf6e009d1 Add a todo for VST3 parameter units
Implementing this is going to be a pain.
2022-03-16 17:18:25 +01:00
Robbert van der Helm f18c92b3b4 Support parameter groups for CLAP 2022-03-16 17:15:33 +01:00
Robbert van der Helm ce85874340 Implement the CLAP tail extension 2022-03-15 22:28:26 +01:00
Robbert van der Helm 1e9fdeddfb Don't report supporting MIDI and expression events
Since currently these would just get thrown out anyways.
2022-03-15 22:18:37 +01:00
Robbert van der Helm 69e4bc9156 Implement the CLAP note ports extension 2022-03-15 22:16:50 +01:00
Robbert van der Helm f53f6829f0 Implement the CLAP event filter extension 2022-03-15 22:08:29 +01:00
Robbert van der Helm b95c833352 Don't handle CLAP modulation events
This would require special handling. Modulation acts as an absolute
offset for the current parameter value, not as a relative adjustment to
that value.
2022-03-15 21:26:11 +01:00
Robbert van der Helm 9232f8a51e Derive Debug and Clone for CLAP output events 2022-03-15 18:53:35 +01:00
Robbert van der Helm ccc8088218 Update for CLAP 0.23 2022-03-15 18:47:29 +01:00
Robbert van der Helm 6fe967f65e Implement parameter change notifications for CLAP 2022-03-13 18:30:21 +01:00
Robbert van der Helm e1f0f619ed Implement parameter change notifications for VST3 2022-03-13 18:28:56 +01:00
Andrew Palm 4fbf7e0ed3 Fix compilation errors when SSE not available
Looks like these were missed in 7d3beb174e and d878fd692a.
2022-03-11 09:04:57 -05:00
Robbert van der Helm 87e447ab25 Mention potential race condition in CLAP events 2022-03-11 14:33:43 +01:00
Robbert van der Helm f98ba70764 Comment on the CLAP gesture handling 2022-03-11 13:27:23 +01:00
Robbert van der Helm 7339e8e956 Include CLAP_EVENT_SHOULD_RECORD for gestures
Apparently this is what you're supposed to do.
2022-03-11 13:03:26 +01:00
Robbert van der Helm c1ca97c78c Fix false positive warning in CLAP GUI parameters 2022-03-11 00:49:34 +01:00
Robbert van der Helm 246c319bbf Implement automation gestures for CLAP 2022-03-11 00:14:39 +01:00
Robbert van der Helm 5d3527c5c2 Also implement sample accurate automation for VST3 2022-03-10 23:39:58 +01:00
Robbert van der Helm b41b4ef725 Implement sample accurate automation for CLAP 2022-03-10 20:14:42 +01:00
Robbert van der Helm b9412657c1 Fix allocation error from thread locals 2022-03-08 14:07:29 +01:00
Robbert van der Helm 37e1b9523b Optionally disallow allocations in reset function 2022-03-08 00:46:17 +01:00
Robbert van der Helm 70d3b5d557 Add a reset function to the plugin trait
This is used as part of CLAP 0.19/0.20, and we can just always call it
after the initialize function to stay consistent for VST3 plugins.
2022-03-08 00:35:55 +01:00
Robbert van der Helm 10ced981bd Remove todos about fixing skewed discrete ranges
Because those have been removed.
2022-03-08 00:27:25 +01:00