Robbert van der Helm
65d87f87ed
Add a way to output note events
...
This supports all note events supported by NIH-plug, and both CLAP and
VST3.
2022-04-11 20:46:51 +02:00
Robbert van der Helm
84d91d8826
Update dependencies for CLAP
...
The signature for this function was incorrect.
2022-04-11 16:18:39 +02:00
Robbert van der Helm
5b5bbf19f7
Prefix all polyphonic expressions with Poly
...
Makes it much more obvious that they're polyphonic at a glance.
2022-04-11 15:57:27 +02:00
Robbert van der Helm
63ad2b2cb8
Parse redundant CLAP MIDI events just in case
2022-04-11 15:56:33 +02:00
Robbert van der Helm
33c2d8288b
Don't warn on parameter hash overflow
...
But do mention overflows in the duplicate parameter warning.
2022-04-09 11:47:23 +02:00
Robbert van der Helm
52d7b47a24
Improve block splitting transport information
...
Don't do any recomputations at the start of the buffer, and also
recompute the bar positions and numbers.
2022-04-08 23:10:38 +02:00
Robbert van der Helm
24837d1552
Implement full MIDI support for CLAP
2022-04-07 23:28:31 +02:00
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
2af3f84416
Rename State to PluginState
...
Now that it is part of the public API.
2022-04-07 17:39:34 +02:00
Robbert van der Helm
84bac0a47c
Spool param rescan call to the GUI thread
...
Otherwise the CLAP example host std::terminates, and we can also reuse
the existing restart task for the VST3 wrapper.
2022-04-07 17:25:12 +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
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
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
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
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
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
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
Robbert van der Helm
8ee380864c
Update for CLAP 0.20
2022-03-08 00:21:51 +01:00
Robbert van der Helm
9267a8371c
Add DPI scaling support
...
That hopefully works.
2022-03-05 13:37:35 +01:00