1
0
Fork 0
Commit graph

749 commits

Author SHA1 Message Date
Robbert van der Helm
d0064f87d6 Add state saving and restoring through GuiContext
While preventing any possible data races.
2022-04-07 17:19:24 +02:00
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
7cc05fce9a Use crate instead of super for prelude reexports 2022-04-07 14:13:03 +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
98d725d24f Add an Iterator implementation for smoothers 2022-04-04 17:58:25 +02:00
Robbert van der Helm
6f01097b03 Add mapped next_block() functions for smoothers 2022-04-04 17:44:49 +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
f37974448d Change naming convention for formatters
This still isn't idea, but at least it's less ambiguous than it was
before this.
2022-03-27 03:43:39 +02:00
Robbert van der Helm
47a96ee02b Fix broken rustdoc links 2022-03-27 03:32:45 +02:00
Robbert van der Helm
7f365d1113 Update dependencies 2022-03-25 21:04:48 +01:00
Robbert van der Helm
9c608c77f9 Add formatters for bypass parameters 2022-03-23 17:42: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
3d7a23c812 Expose steps_left on the smoothers 2022-03-23 16:50:09 +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
a1be942d6d Add flags to control parameter visibility
For the host and in generic UIs. These aren't wired up to anything yet.
2022-03-23 13:04:14 +01:00
Robbert van der Helm
9e3149b931 Move ParamPtr to the prelude 2022-03-23 12:46:46 +01:00
Robbert van der Helm
b0ba815514 Fix -inf in gain to Db conversion 2022-03-21 19:17:41 +01:00
Robbert van der Helm
a1cb362dda Fix subtract with overflow in Hz->kHz formatter
When supplying a short input value without a unit.
2022-03-21 15:00:03 +01:00
Robbert van der Helm
2911efaa79 Don't treat invalid inputs as center panning 2022-03-21 14:56:50 +01:00
Robbert van der Helm
b516e5341e Fix the f32_hz_then_khz formatter 2022-03-21 14:47:30 +01:00
Robbert van der Helm
0f60ce9609 Clean up i32 note formatters 2022-03-21 14:40:17 +01:00
Robbert van der Helm
e90bfecc0b Add a matching from_f32_hz_then_khz function 2022-03-21 14:28:28 +01:00
Robbert van der Helm
44aa3dd564 Clean up the f32_hz_then_khz formatter 2022-03-21 14:17:16 +01:00
Robbert van der Helm
2af93436a6 Clean up panning formatters 2022-03-21 14:14:24 +01:00
Robbert van der Helm
8344645523 Rename lin_to_db formatter to gain_to_db
And use the existing functions from the util module.
2022-03-21 13:59:31 +01:00
Robbert van der Helm
71dba0fbed
Merge pull request #5 from Fredemus/feature/more-formatters
a few more formatters
2022-03-21 13:54:32 +01:00
Robbert van der Helm
30b913e159 Don't use direct Param initialization in exmaples
Since you now also need to specify the default field you probably
shouldn't use this anymore.
2022-03-21 13:29:03 +01:00
Robbert van der Helm
40d99a5cb3 Automatically implement Param::set_normalized_value() 2022-03-21 13:28:59 +01:00
Robbert van der Helm
021d175264 Use a default implementation for Param::normalized_value() 2022-03-21 13:28:59 +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
a844051054 Store defaults on Param objects
And add methods for querying them.
2022-03-21 12:49:59 +01:00
Fredemus
8bbcb1a093 add panning formatter 2022-03-20 21:37:50 +01:00
Fredemus
41db682c20 i32_note_formatter + from_f32_lin_to_db 2022-03-20 21:15:17 +01:00
Fredemus
f0ee2739f1 a few more formatters 2022-03-20 16:08:43 +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
8371f767ce Fix typo in debug assert macros 2022-03-20 12:44:29 +01:00
Robbert van der Helm
a6f4202ac5 Add a todo for combining the Params methods 2022-03-20 02:44:13 +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
4c5d61057e Fix typos 2022-03-19 19:24:08 +01:00
Robbert van der Helm
a6e35cfaa9 Add methods for normalized parameter stepping
This is mostly useful for GUIs.
2022-03-19 16:12:56 +01:00