1
0
Fork 0
Commit graph

82 commits

Author SHA1 Message Date
Robbert van der Helm 0b3a5cd297 Support all of the CLAP expression types
These aren't supported for VST3 yet, we'll need to register note
expression controllers for that.
2022-04-07 21:17:31 +02:00
Robbert van der Helm b9a10455bb Add polyphonic aftertouch support 2022-04-07 20:55:31 +02:00
Robbert van der Helm 1141616466 Replace ACCEPTS_MIDI bool with new enum
So we can gate future MIDI CC support behind an additional option since
this involves more work on the VST3 side.
2022-04-07 20:27:37 +02:00
Robbert van der Helm 8f359feadb Store velocity as a float
Instead of converting this to a 0-127 value. We may be throwing away
precision otherwise.
2022-04-07 20:12:30 +02:00
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 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 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 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 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 581e5911fc Add parameter groups with #[nested = "Group Name"] 2022-03-16 17:04:38 +01:00
Robbert van der Helm 1fa2b5f74f Add an Editor callback to notify parameter changes
This will be needed to allow iced to be reactive in our model.
2022-03-13 18:03:23 +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 36d54edae7 Add a constant for sample accurate automation 2022-03-10 18:57: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 79ab0cd7ed Add the special win32-dpi-aware feature on Windows 2022-03-05 16:02:52 +01:00
Robbert van der Helm 9267a8371c Add DPI scaling support
That hopefully works.
2022-03-05 13:37:35 +01:00
Robbert van der Helm e2605c8cee Add transport information for VST3 and CLAP
This is available through the process context.
2022-03-04 15:05:00 +01:00
Robbert van der Helm 3e0316e17c Add missing docstrings 2022-03-03 23:34:06 +01:00
Robbert van der Helm 80457ac0f9 Fix doc links after prelude migration 2022-03-03 23:30:29 +01:00
Robbert van der Helm f581294d7b Update rustdoc formatting for links
Apparently it showed this text verbatim, and not in monospace.
2022-03-03 23:05:12 +01:00
Robbert van der Helm ca461d3d15 Touch up list of missing features 2022-03-03 22:27:48 +01:00
Robbert van der Helm d688174b8b Require Send+Sync on the editor handle 2022-03-03 15:40:16 +01:00
Robbert van der Helm 17145a4482 Add a helper for initializing all block smoothers 2022-03-01 17:11:34 +01:00
Robbert van der Helm a26ddbb45e Change CLAP_KEYWORDS to CLAP_FEATURES
This name was changed in CLAP 0.19, but in 0.18 it's still called
features.
2022-02-28 17:29:53 +01:00
Robbert van der Helm 1151a80769 Add the other CLAP metadata fields 2022-02-28 17:18:11 +01:00
Robbert van der Helm c7f1c46f18 Add a reverse DNS ID field to ClapPlugin 2022-02-28 17:04:47 +01:00
Robbert van der Helm d5d90e3e61 Add a ClapPlugin trait
Just like the Vst3Plugin trait
2022-02-28 14:45:07 +01:00
Robbert van der Helm 287576d064 Fix rustdoc hyperlinks 2022-02-14 14:22:57 +01:00
Robbert van der Helm f645b6a92f Relicense under the ISC license 2022-02-12 16:04:46 +01:00
Robbert van der Helm 6e1f7930e3 Fix VST3 CID consistency between platforms 2022-02-10 21:31:27 +01:00
Robbert van der Helm 08fe8e703e Explicitly guarantee no simultaneous editors exist 2022-02-08 20:16:04 +01:00
Robbert van der Helm 556bec7c0b Move editor handling to its own struct
This makes the API much, much nicer (especially consuming the egui
wrapper), and it also avoids having to lock the plugin instance which is
obviously very bad if the plugin is also supposed to be processing audio
on another thread.
2022-02-06 17:12:57 +01:00
Robbert van der Helm 5017dad7d3 Add a semi-broken GUI example
This needs a lot of work. We need widgets that know how to deal with our
parameters, and also basic widgets for things like meters. Egui-baseview
also has a couple quirks left. Most notably it only updates when
actively moving over the GUI (which means VU meters look pretty janky)
and it randomly panics.
2022-02-06 13:16:28 +01:00
Robbert van der Helm d35957db65 Require static lifetimes on GUI contexts 2022-02-06 00:22:15 +01:00
Robbert van der Helm 7a6bfa4573 Add a HasRawWindowHandle wrapper struct 2022-02-06 00:22:15 +01:00
Robbert van der Helm 83c3410736 Don't require Send+Sync on the editor 2022-02-05 20:48:21 +01:00
Robbert van der Helm 75435ecb4a Don't require a Drop bound on Editor
On second thought, unless you're implementing something completely from
scratch this will already be part of the library you're using.
2022-02-05 20:15:09 +01:00
Robbert van der Helm 9d20ca8106 Add an idea for how the IRunLoop can be integrated 2022-02-05 19:35:20 +01:00
Robbert van der Helm b075d1b1bb Modify the editor API to use trait objects
The alternative isn't really feasible without specialization, and
NIH-plug should work on the stable compiler.
2022-02-05 17:12:03 +01:00
Robbert van der Helm 1e77a92285 Require plugins to be 'static
They can't contain any references anyways since they're default
initialized. If they don't have a 'static lifetime, then it won't be
possible to pass a trait object casted from the inner wrapper to the
plugin.
2022-02-05 16:03:16 +01:00
Robbert van der Helm 78a83d5051 Allow unused variables in trait defaults 2022-02-05 13:32:03 +01:00
Robbert van der Helm d2407db284 Replace editor close function with a Drop bound 2022-02-05 13:06:18 +01:00
Robbert van der Helm 63d30d33e4 Fix rustdoc links 2022-02-05 12:52:34 +01:00
Robbert van der Helm 7ac1df0d8d Add stubs for editor handling 2022-02-05 12:46:26 +01:00
Robbert van der Helm bbc190c67f Hold the RwLock guard in the process context
This avoids having to constantly acquire a new lock.
2022-02-04 23:03:11 +01:00
Robbert van der Helm cbd51b0c3a Monomorphize the context variables
For the parameter setting context functions we don't be able to use
trait objects.
2022-02-04 22:34:53 +01:00
Robbert van der Helm f2d3d987a0 Update the current MIDI support status 2022-02-04 22:31:43 +01:00
Robbert van der Helm a93ad650be Remove old todo 2022-02-04 19:04:36 +01:00
Robbert van der Helm 366deda83c Add MIDI support to the sine example 2022-02-04 15:17:42 +01:00