Robbert van der Helm
c082085711
Remove todo about adding more event types
2022-04-08 20:57:52 +02:00
Robbert van der Helm
1a8f81e4c0
Support MIDI CCs, aftertouch, pitch bend for VST3
...
This required rewriting the way events and parameter changes are handled
for VST3 by putting them all in a single sorted array, because we can
now no longer read directly from the host's events list because we also
need to mix these new generated MIDI CC events in with it.
2022-04-08 20:53:32 +02:00
Robbert van der Helm
059c733b78
Handle predefined VST3 note expressions
2022-04-08 17:49:13 +02:00
Robbert van der Helm
2a4a61947f
Update reasoning for clearing last param ID bit
2022-04-08 00:02:28 +02:00
Robbert van der Helm
9740246d0a
Always sort VST3 note events in prep for CCs
...
So we won't forget to add this then. CC messages come from the parameter
change queues while regular note event messages come from another queue,
so they need to be merged into one sorted queue.
2022-04-07 23:57:56 +02:00
Robbert van der Helm
4abefe23cf
Mention lack of VST3 support for new note events
2022-04-07 23:37:49 +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
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
Robbert van der Helm
95370667d7
Rearrange the Param methods
2022-03-19 16:09:31 +01:00
Robbert van der Helm
d9330628c0
Add stepping functions to Param
...
This can be useful for GUI widgets.
2022-03-19 16:06:20 +01:00
Robbert van der Helm
64950055ea
Implement most of the iced ParamSlider for Vizia
2022-03-19 01:17:13 +01:00
Robbert van der Helm
f43d209a60
Add a .plain_value() to ParamPtr
...
Useful for snapping when you don't have access to the concrete parameter
type.
2022-03-18 18:10:22 +01:00
Robbert van der Helm
fb60f3a28b
Remove unused Param::set_from_string
...
This method is a bit more efficient than converting the string to a
normalized value and then setting the parameter using that but it's not
used right now and it adds a form of redundancy.
2022-03-18 17:53:38 +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
581e5911fc
Add parameter groups with #[nested = "Group Name"]
2022-03-16 17:04:38 +01:00
Robbert van der Helm
6628baf47e
Split up the nih_plug_derive crate into modules
2022-03-16 15:53:35 +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
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
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
26c503d862
Remove accidentally copied tests
2022-03-10 19:38:39 +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
02622e6e4f
Split up the buffer module
2022-03-10 18:15:55 +01:00
Robbert van der Helm
3c5aff1ec6
Rename Buffer::iter_mut() to iter_samples()
...
Since there's also an iter_blocks(). This is consistent with the new
Block method.
2022-03-09 20:11:37 +01:00
Robbert van der Helm
fcd0522a33
Mark the remaining buffer iterators as inline
2022-03-09 19:45:42 +01:00
Robbert van der Helm
5041f959b7
Add a per-sample per-channel iterator for blocks
2022-03-09 19:27:21 +01:00
Robbert van der Helm
dfb2407698
Rename the Channels struct to ChannelSamples
...
To make it slightly more obvious what it's iterating over.
2022-03-09 19:19:32 +01:00
Robbert van der Helm
2811ab2996
Mark more of the buffer functions as inline
2022-03-09 15:02:38 +01:00
Robbert van der Helm
1a7ad0a7a0
Trim whitespace and units when parsing parameters
2022-03-08 18:53:35 +01:00
Robbert van der Helm
c3767831cd
Mention unit handing in value to string
2022-03-08 18:47:28 +01:00
Robbert van der Helm
2c6f65a342
Add formatters for percentages
2022-03-08 18:45:18 +01:00
Robbert van der Helm
24f3593de0
Move order conversion to formatters module
2022-03-08 18:31:20 +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
329da782b5
Fix with_string_to_value() after param refactor
2022-03-07 21:00:39 +01:00
Robbert van der Helm
17f3c6cc6c
Add an in-place version of the Hann function
2022-03-07 20:52:37 +01:00
Robbert van der Helm
f05d209169
Add an analysis-only function to StftHelper
2022-03-07 01:14:36 +01:00
Robbert van der Helm
b06e67bde7
Supper non-buffer and non-sidechain inputs in STFT
2022-03-06 22:26:37 +01:00
Robbert van der Helm
e61a42e96f
Revert windowing change from 93ab08e
...
This is actually needed to prevent spectral leakage from IDTFs with
small window sizes.
2022-03-06 19:17:42 +01:00
Robbert van der Helm
93ab08e5d5
Remove post-IDFT windowing in STFT helper
...
There's no reason to.
2022-03-06 19:08:04 +01:00
Robbert van der Helm
7c8da39159
Fix position increment in STFT helper
...
This was what was causing the spectral leakage. It already sounded like
parts of the buffer were being cleared too early or old parts were being
reused, but I guess that makes sense now...
2022-03-06 18:45:34 +01:00
Robbert van der Helm
82e74a7c53
Redefine the Hann window as a cosine
...
This fixes some of the spectral leakage.
2022-03-06 18:38:50 +01:00
Robbert van der Helm
295e5493ec
Add post-IDFT windowing to StftHelper
2022-03-06 17:50:58 +01:00
Robbert van der Helm
c81ec15228
Fix comment on window scale remapping
2022-03-06 15:46:59 +01:00
Robbert van der Helm
07cf10e81d
Add more todos to the STFT helper
2022-03-06 15:45:19 +01:00
Robbert van der Helm
af4db7be53
Fix fallback permit_alloc() implementation
2022-03-06 15:42:32 +01:00
Robbert van der Helm
8e2fd66573
Process sidechain inputs in STFT helper
2022-03-06 15:36:50 +01:00
Robbert van der Helm
2343485c1c
Don't do gain compensation in STFT helper
...
You'll likely want to add some scaling yourself anyways, so this would
just be a wasted operation since the scaling also depends on your window
function.
2022-03-06 15:36:24 +01:00
Robbert van der Helm
f7b3bd9198
Add gain compensation to the STFT helper
2022-03-06 15:28:35 +01:00
Robbert van der Helm
0fa394247f
Add a permit_alloc function
...
Since assert_no_alloc also hides panic messages which can make debugging
more difficult:
https://github.com/Windfisch/rust-assert-no-alloc/issues/4
2022-03-06 15:11:42 +01:00
Robbert van der Helm
592a908132
Fix samples until next window calculation
2022-03-06 15:11:42 +01:00
Robbert van der Helm
bf215ef88e
Add a Hann function for the STFT helper
2022-03-06 14:41:40 +01:00
Robbert van der Helm
3c62670164
Add proper overlap-add to the StftHelper
...
Doesn't make much sense without it.
2022-03-06 14:33:30 +01:00
Robbert van der Helm
963696cbff
Warn on invalid ranges with logarithmic smoothing
2022-03-06 12:27:52 +01:00
Robbert van der Helm
8355c38b9a
Add some TODOs to the STFT helper
2022-03-06 02:15:14 +01:00
Robbert van der Helm
4ff2e65b5c
Add a note regarding the Buffer lifetime
2022-03-06 02:10:33 +01:00
Robbert van der Helm
b2600f4b93
Add a helper for buffering audio for STFTs
2022-03-06 02:07:44 +01:00
Robbert van der Helm
e5bac1e220
Add a channel count function to Buffer
2022-03-06 01:21:00 +01:00
Robbert van der Helm
54881dfa15
Add a len() function to Buffer
2022-03-06 01:12:28 +01:00
Robbert van der Helm
03eef2c832
Require PartialEq on plain parameter types
...
So you can compare them in parameter widgets.
2022-03-05 19:50:12 +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
e491ff6319
Fix clippy lints
2022-03-04 15:07:34 +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
713e778117
Add a Default implementation for the transport
2022-03-04 14:32:23 +01:00
Robbert van der Helm
a483dbc6a6
Add a Transport struct with conversion methods
...
We'll add this to the ProcessContext in a bit.
2022-03-04 14:25:38 +01:00
Robbert van der Helm
99f97978a9
Reorder ProcessContext methods
...
When we'll add more things here the more common getters should come
first and less common operations like changing latency should come last.
2022-03-04 13:22:58 +01:00
Robbert van der Helm
d758dd652f
Re-export all macros in the prelude
...
Now you don't need the `#[macro_use] extern crate nih_plug;` anymore
2022-03-04 12:01:47 +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
4c0b07c578
💥 Move re-exports to a prelude module
...
So you can import everything at once, because you're likely going to
need at least 90% of it anyways.
2022-03-03 23:23:51 +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
542012aa0e
Request restart for latency change when processing
...
Calling this change function seems to work fine, but apparently you're
supposed to do it this way.
2022-03-03 21:58:40 +01:00
Robbert van der Helm
8acebadac0
Fix EnumParam step count after refactor
2022-03-03 21:34:04 +01:00
Robbert van der Helm
02a6b99308
Fix broken links in docs
2022-03-03 21:22:20 +01:00
Robbert van der Helm
4160970571
Implement PersistentField for AtomicRefCell
2022-03-03 21:21:08 +01:00
Robbert van der Helm
80b1bf12f2
Use AtomicRefCell for all uncontested locks
...
Since it would be a bug if those locks were somehow contested.
2022-03-03 21:21:08 +01:00
Robbert van der Helm
184355a886
Delay CLAP host extension query to init()
...
Or the CLAP example host will get very mad at us.
2022-03-03 21:09:12 +01:00
Robbert van der Helm
be4bbd4400
Allow nested parameter structs
...
See the Parameters docstring for the caveats.
2022-03-03 20:38:28 +01:00
Robbert van der Helm
76369ad1e1
💥 Rework FloatParam and IntParam
...
They are now two separate types with slightly different options. I had
these merged initially because they're 95% the same, and I thought it
would be fun to have weird distributions for integer parameters, but
that doesn't really work because hosts and the plugin APIs expect the
steps to be linear. And if you're going to have an unstepped integer
parameter, might as well use FloatParam with rounding.
Because non-linear ranges are no longer possible with IntParam, the
types have been split up to make everything much more readable instead
of adding a parameterizing the range type with another type family.
2022-03-03 19:24:40 +01:00
Robbert van der Helm
c0f03a97fc
Add a todo about removing skewed integer ranges
2022-03-03 18:36:36 +01:00
Robbert van der Helm
27570be4a6
Implement platform-specific CLAP GUI extensions
2022-03-03 18:29:37 +01:00
Robbert van der Helm
b5993c1bb8
Add a CLAP GuiContext for sending param changes
2022-03-03 17:47:41 +01:00
Robbert van der Helm
a4930dc887
Add parameter change outputs for CLAP
...
But without any way to send them, at least for now.
2022-03-03 17:21:32 +01:00
Robbert van der Helm
8f92669a47
Keep track of the processing status
2022-03-03 17:03:52 +01:00
Robbert van der Helm
de4921c033
Move CLAP input event handling to a function
2022-03-03 16:58:57 +01:00
Robbert van der Helm
f91958e971
Move VST3 GuiContext to a separate object
2022-03-03 16:33:41 +01:00
Robbert van der Helm
5766f037b2
Implement the general CLAP GUI extension
2022-03-03 15:52:10 +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
91f2f49fd3
Create stubs for the CLAP editor
2022-03-03 15:40:16 +01:00
Robbert van der Helm
87830abdf6
Store a reference to the wrapper on the wrapper
2022-03-03 15:13:36 +01:00
Robbert van der Helm
6d63d3f095
Rename wrapper: 👏 :plugin to *::wrapper
...
To match the struct name.
2022-03-03 15:08:14 +01:00
Robbert van der Helm
4ceb0efdc4
Use Arc instead of Box for the wrapper
...
We'll need this for the GuiContext.
2022-03-03 15:06:47 +01:00
Robbert van der Helm
d1840b8d86
Move Box creation to the CLAP wrapper
...
So the new->destroy pair makes more sense
2022-03-03 15:01:28 +01:00
Robbert van der Helm
cd070ad876
Remove todo about latency not being implemented
2022-03-03 14:42:17 +01:00
Robbert van der Helm
fa01d3bfeb
Generate most of ParamPtr with a macro
2022-03-03 14:28:52 +01:00
Robbert van der Helm
b5a471747f
Add name, unit, and step count functions to Param
...
Now we can simplify ParamPtr by generating all of these accessors.
2022-03-03 13:55:54 +01:00
Robbert van der Helm
4eb35ed585
Implement the CLAP latency extension
2022-03-03 00:46:49 +01:00
Robbert van der Helm
c3efc81957
Remove old todo
2022-03-03 00:11:12 +01:00
Robbert van der Helm
41ee117bfa
Prepent CLAP states with the length
...
To avoid having to read in chunks.
2022-03-02 22:25:10 +01:00
Robbert van der Helm
8cc216dc02
Actually support the state extension
...
That seems sort of useful, you know?
2022-03-02 16:26:47 +01:00
Robbert van der Helm
7e9eadfc64
Implement state handling for CLAP
2022-03-02 16:25:30 +01:00
Robbert van der Helm
ec452bd41d
Also move state deserialization to a function
2022-03-02 16:00:11 +01:00
Robbert van der Helm
7a3d3b8c8e
Move state serialization to a helper function
...
So we can reuse it for the CLAP wrapper.
2022-03-02 15:49:40 +01:00
Robbert van der Helm
bc2332801c
Implement the CLAP audio ports extension
2022-03-02 15:16:58 +01:00
Robbert van der Helm
70c81642a5
Implement CLAP audio ports config extension
2022-03-02 14:57:30 +01:00
Robbert van der Helm
78b815fede
Add consistent null pointer checks to CLAP wrapper
...
Just like we do for the VST3 wrapper.
2022-03-02 14:25:26 +01:00
Robbert van der Helm
5b369f6ab5
Re-introduce destructuring assignments
...
Now that that's landed on the stable compiler.
2022-03-02 02:03:57 +01:00
Robbert van der Helm
29c1b5e5d5
Clear input events in CLAP wrapper
2022-03-02 00:38:25 +01:00
Robbert van der Helm
69a085ddad
Handle MIDI events for CLAP
2022-03-02 00:29:50 +01:00
Robbert van der Helm
0d359c344a
Fix CLAP step count handling
2022-03-02 00:04:33 +01:00
Robbert van der Helm
37e88d063f
Change bypassed Enabled label to Not Bypassed
...
To remove ambiguity.
2022-03-01 23:55:33 +01:00
Robbert van der Helm
fdda32696a
Remove unused import
2022-03-01 23:50:41 +01:00
Robbert van der Helm
57ed66f8f6
Implement basic CLAP audio processing
2022-03-01 23:50:10 +01:00
Robbert van der Helm
a28e553fd2
Rename Block SIMD functions for more clarity
...
Because you could also do per-sample SIMD. For blocks that's simple
enough to do without any help though.
2022-03-01 21:59:12 +01:00
Robbert van der Helm
8c837573a0
Also add SIMD channel helpers for Block
2022-03-01 21:48:03 +01:00
Robbert van der Helm
33905e5bc2
Add optional SIMD helpers for channel buffers
2022-03-01 21:39:53 +01:00
Robbert van der Helm
8eafcebe62
Mention the panicking behavior of block smoothing
2022-03-01 20:23:04 +01:00
Robbert van der Helm
3e8b2b3759
Use AtomicRef instead of Mutexes for block smooth
2022-03-01 19:52:56 +01:00
Robbert van der Helm
3bd83ca55a
Implement CLAP input parameter handling
2022-03-01 19:31:16 +01:00
Robbert van der Helm
09534a2657
Add a TODO regarding inlining iterators
2022-03-01 19:02:49 +01:00
Robbert van der Helm
5a005553bc
Fix block length semantics
2022-03-01 17:55:38 +01:00
Robbert van der Helm
c3f4e7e2d9
Yield offsets in the block iterator
2022-03-01 17:46:34 +01:00
Robbert van der Helm
f389e0341e
Also run buffer miri tests without miri
2022-03-01 17:43:04 +01:00
Robbert van der Helm
3122c0cb41
Pass block references to the block smoother
...
So you can't mess this up by passing the maximum block size instead.
2022-03-01 17:33:22 +01:00
Robbert van der Helm
dffddfaf04
Implement the block smoothers
2022-03-01 17:29:09 +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
d470a1db5a
Add functions for allocating block smoothers
2022-03-01 17:07:03 +01:00
Robbert van der Helm
892aef7e37
Mark smoother functions as inline
2022-03-01 16:55:30 +01:00
Robbert van der Helm
f103e1e14c
Reorder Param methods
...
Moving the things that are only used internally to the bottom.
2022-03-01 16:53:18 +01:00
Robbert van der Helm
e6292a4650
Add a usage example to Buffer::iter_blocks()
2022-03-01 16:16:13 +01:00
Robbert van der Helm
b177e3114c
Add per-block iterators to Buffer
2022-03-01 16:03:13 +01:00
Robbert van der Helm
a58c796fc0
Add an output slices field to Buffer
2022-03-01 15:43:13 +01:00
Robbert van der Helm
6ded3d6f11
Use the thread check extension in the CLAP wrapper
2022-03-01 13:47:06 +01:00
Robbert van der Helm
afb9449df5
Reorder buffer module
...
To have the same definitions -> trait impls -> other impls structure as
most other modules.
2022-03-01 04:21:26 +01:00
Robbert van der Helm
d2517d6785
Rename Buffer::as_raw to Buffer::as_slice
...
Since things named `as_raw` usually involve pointers.
2022-03-01 04:18:06 +01:00
Robbert van der Helm
e5edbac2b4
Add comments for potential parameter quirks
2022-03-01 02:15:23 +01:00
Robbert van der Helm
5f1ebca6e6
Implement clap_plugin_params::get_value()
2022-03-01 02:00:12 +01:00
Robbert van der Helm
ae3c00d069
Implement CLAP parmater info
2022-03-01 01:54:04 +01:00
Robbert van der Helm
0fd80330bb
Move parameter step count to ParamPtr
2022-03-01 01:53:48 +01:00
Robbert van der Helm
1c4a5bc4da
Add stubs for the CLAP params extension
2022-03-01 01:27:01 +01:00
Robbert van der Helm
a268d71eee
Add a note on snapping normalized values
2022-03-01 01:02:00 +01:00
Robbert van der Helm
08d63f0e73
Fix typo
2022-03-01 00:06:22 +01:00
Robbert van der Helm
ae212962a3
Add a todo for nested params objects
2022-02-28 22:16:46 +01:00
Robbert van der Helm
af77d45877
Add a Send+Sync wrapper for CLAP object pointers
...
We'll need this for the extensions.
2022-02-28 20:39:15 +01:00
Robbert van der Helm
12075b1a24
Rename main CLAP plugin wrapper struct to Wrapper
2022-02-28 20:25:49 +01:00
Robbert van der Helm
2750b2a6ad
Implement the event loop for CLAP
...
It cannot yet handle any tasks though.
2022-02-28 20:05:48 +01:00
Robbert van der Helm
4ad972ea23
Add stubs for a CLAP ProcessContext implementation
...
And the `clap_plugin::active()` function.
2022-02-28 19:45:41 +01:00
Robbert van der Helm
41663a404a
Change VST3 wrapper trait bounds to Vst3Plugin
...
To be consistent with the CLAP wrapper
2022-02-28 19:21:14 +01:00
Robbert van der Helm
6d1e581c26
Partially implement clap_plugin
2022-02-28 19:16:03 +01:00
Robbert van der Helm
0511053b3b
Add stubs for the clap_plugin methods
2022-02-28 18:55:33 +01:00
Robbert van der Helm
2e6faaa324
Move plugin descriptor to its own module
...
Because we also need this in the clap_plugin implementation.
2022-02-28 18:44:03 +01:00
Robbert van der Helm
32a640acf7
Create a clap_plugin instance stub
2022-02-28 18:27:57 +01:00
Robbert van der Helm
0b0876e4a5
Remove entry point debug prints
2022-02-28 18:17:01 +01:00
Robbert van der Helm
560d5fd78f
Build the CLAP plugin descriptor
...
This requires a _lot_ of CStrings.
2022-02-28 17:46:20 +01:00
Robbert van der Helm
e718bbd0a4
Capitalize the FACTORY lazy static
...
To stop the linters from complaining.
2022-02-28 17:30:21 +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
089f1589bf
Add the remaining CLAP factory stubs
2022-02-28 16:53:31 +01:00
Robbert van der Helm
31e2480458
Begin clap objects with vtables for pointer casts
2022-02-28 16:50:37 +01:00
Robbert van der Helm
17b51c8920
Remove function pointer transmutes
2022-02-28 16:46:06 +01:00
Robbert van der Helm
0609f89df6
Create a factory stub from the entry point macro
...
From this point on we should no longer need any of these ugly macros.
2022-02-28 16:31:49 +01:00
Robbert van der Helm
51d7532b87
Add some more use path safety for the clap export
2022-02-28 15:48:26 +01:00
Robbert van der Helm
56c1545196
Add a basic nih_export_clap!() macro
...
This does not do anything useful yet.
2022-02-28 14:45:31 +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
b209c9caf3
Move the event loop to its own module
...
Now that the context module is becoming larger and larger.
2022-02-28 12:57:01 +01:00
Robbert van der Helm
0675feb54b
Keep a reference to WrapperView in WrapperInner
2022-02-27 00:51:41 +01:00
Robbert van der Helm
8ddad4e893
Store the IPlugFrame instance
2022-02-27 00:51:41 +01:00
Robbert van der Helm
95f0183d27
Add VST3 smart pointers for regular objects
2022-02-27 00:51:41 +01:00
Robbert van der Helm
dcca3f8bf4
Fix events not working in release builds
2022-02-15 23:11:50 +01:00
Robbert van der Helm
6fbec6393d
Include the Linux event loop module on macOS
2022-02-15 21:31:02 +01:00
Robbert van der Helm
b7904126ac
Allow the Linux event loop on macOS
2022-02-15 21:25:55 +01:00
Robbert van der Helm
5d9f268d4c
Don't doctest the enum example
2022-02-14 16:21:34 +01:00
Robbert van der Helm
ecd1be8965
Add a derive macro for Enum parameters
2022-02-14 16:16:05 +01:00
Robbert van der Helm
4f0e2b70b5
Rework EnumParam to be a whole lot less sketchy
...
Now it no longer needs to do any unsound type punning. The internal
parameter that the wrapper has access to has been completely type
erased, and only the outer parameter knows about enum T. This also gets
rid of strum and replaces it with a custom trait.
2022-02-14 15:34:46 +01:00
Robbert van der Helm
0e930668f2
Move EnumParam to its own module
2022-02-14 14:35:57 +01:00
Robbert van der Helm
5a26756765
Move BoolParam to its own module
2022-02-14 14:27:40 +01:00
Robbert van der Helm
287576d064
Fix rustdoc hyperlinks
2022-02-14 14:22:57 +01:00
Robbert van der Helm
70da6209fc
Move PlainParam to its own module
2022-02-14 14:19:46 +01:00
Robbert van der Helm
cf0fb039b0
Add todo about enum value serialization
2022-02-14 02:29:08 +01:00
Robbert van der Helm
847887db9d
Allow custom names for enum variants
2022-02-14 02:26:11 +01:00
Robbert van der Helm
0c1f105910
Fix string to value for enum parameters
2022-02-14 02:10:12 +01:00
Robbert van der Helm
39e8dfc83c
Add somewhat shady enum parameters
2022-02-14 02:04:17 +01:00
Robbert van der Helm
d878fd692a
Prefix all marker fields with underscores
2022-02-13 22:58:51 +01:00
Robbert van der Helm
fd3f4c2c48
Allow skipping steps in the smoothers
...
I'll need this for Diopser since it's going to have a parameter to
control the automation's granularity.
2022-02-13 18:33:05 +01:00
Robbert van der Helm
99fe9e865b
Fix decimals in snapping test
2022-02-13 18:07:19 +01:00
Robbert van der Helm
990072f529
Fix step size based formatting
2022-02-13 18:03:45 +01:00
Robbert van der Helm
19d2dc0a67
Implement step snapping for parameters
2022-02-13 17:52:54 +01:00
Robbert van der Helm
4481ef0ae9
Avoid more redundancy in parameter handling
2022-02-13 16:49:29 +01:00
Robbert van der Helm
4783535ebb
Use preview_plain when setting normalized values
...
To prevent bugs, there should be only one way parameters are
unnormalized.
2022-02-13 16:44:18 +01:00
Robbert van der Helm
adf59c192b
Add a step size for float parameters
2022-02-13 16:41:31 +01:00
Robbert van der Helm
ef4c2ad7f9
Add missing #[cfg(test)]
2022-02-13 16:14:26 +01:00
Robbert van der Helm
16c0dc8b1e
Shorten miri tests
...
These extra iterations shouldn't matter, and miri is pretty slow.
2022-02-13 15:54:19 +01:00
Robbert van der Helm
7d3beb174e
Simplify ScopedFtz
2022-02-13 13:51:02 +01:00
Robbert van der Helm
e7c3e19519
Add (miri) tests for {u16,}strlcpy()
2022-02-13 13:04:19 +01:00
Robbert van der Helm
a70edc8105
Remove now-unnecessary unsafe blocks
2022-02-13 12:47:14 +01:00
Robbert van der Helm
2525319207
Add a miri test for the buffer
2022-02-13 02:29:10 +01:00
Robbert van der Helm
a734dd09f3
Fix lifetimes on buffer adapter
2022-02-13 01:58:22 +01:00
Robbert van der Helm
73fe012751
Rename the buffer lifetimes
2022-02-13 01:48:56 +01:00
Robbert van der Helm
16e299ca34
Add the outer lifetime back to the sample buffer
2022-02-13 01:47:26 +01:00
Robbert van der Helm
81ddb410f5
Fix buffer iterators over last refactor
...
This len() function returns the remaining length, which is not what we
want.
2022-02-13 01:16:52 +01:00
Robbert van der Helm
8411313270
Move Buffer::iter_mut() lifetime definitions
2022-02-13 01:11:23 +01:00
Robbert van der Helm
eac3fdf612
Fix duplicate mutable borrow soundness in buffer
...
This gets rid of multiple simultaneous &mut references to the
vector (which should be fine, I think), and also replaces the
`.iter_mut()` that just resets the index (which definitely leads to
soundness issues) with an `.iter_mut()` and a `.into_iter()` that don't
let you have concurrent mutable borrows to the same sample data.
2022-02-13 00:59:25 +01:00
Robbert van der Helm
eea05cc748
Rename reset_iter to iter_mut
...
So it's more consistent.
2022-02-12 23:28:15 +01:00
Robbert van der Helm
2c394aabd5
Add nicer adapter for repeating channel iteration
2022-02-12 23:16:07 +01:00
Robbert van der Helm
c99877ec05
Fix Smoother::is_smoothing()
2022-02-12 20:54:03 +01:00
Robbert van der Helm
0bb3113197
Fix manual buffer accessors
2022-02-12 20:33:31 +01:00
Robbert van der Helm
cd0b870682
Directly pass a style to .with_smoother()
2022-02-12 19:56:37 +01:00
Robbert van der Helm
693b618bc5
Add accessors for channel data
...
This is needed when you want to modify the same sample multiple times
within an outer loop.
2022-02-12 19:24:41 +01:00
Robbert van der Helm
bc11c97fcf
Use the new builder interface
2022-02-12 17:19:52 +01:00
Robbert van der Helm
34fa536acb
Add a builder interface for constructing params
2022-02-12 17:10:25 +01:00
Robbert van der Helm
f645b6a92f
Relicense under the ISC license
2022-02-12 16:04:46 +01:00
Robbert van der Helm
93fdb0da97
Shamelessly plug yabridge
2022-02-10 23:53:31 +01:00
Robbert van der Helm
379c74e874
Remove spurious dbg!() calls
2022-02-10 23:41:04 +01:00
Robbert van der Helm
69498f3527
Implement the event loop for Windows
2022-02-10 23:37:59 +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
8934d06381
Add a todo for adding builders to parameters
2022-02-10 01:21:07 +01:00