1
0
Fork 0
Commit graph

791 commits

Author SHA1 Message Date
Robbert van der Helm 37b62e4278 Add an IRunLoop event runner on Linux 2022-04-20 19:44:03 +02:00
Robbert van der Helm 4fa54ceabe Add an object for implementing IEventLoop
We can't do this directly on WrapperView because of vst3-sys
limitations.
2022-04-20 17:18:41 +02:00
Robbert van der Helm f3bb552cfe Get a reference to the host's IRunLoop 2022-04-20 17:03:15 +02:00
Robbert van der Helm 55aabcea31 Add a note for PolyPressure + MPE 2022-04-20 16:48:37 +02:00
Robbert van der Helm 8eaecb6e5c Add a way to completely exclude the vst3-sys dep
Because technically you might still include GPL'd symbols even if you
wouldn't use the `nih_export_vst3!()` macro.
2022-04-15 16:14:42 +02:00
Robbert van der Helm 0fd9a68146 Move u16strlcpy to the VST3 wrapper utils module 2022-04-15 16:13:14 +02:00
Robbert van der Helm 7b24dea719 Clarify param_map() docstring 2022-04-13 20:20:27 +02:00
Robbert van der Helm 877eeadc7f Add a todo for implementing FTZ for AArch64 2022-04-12 02:08:41 +02:00
Robbert van der Helm 54db43f48d Fix c_char usage on AArch64
Apparently char is unsigned on AArch64.
2022-04-12 02:06:29 +02:00
Robbert van der Helm 3c69fb72cf Make parameter names owned
That way you can generate parameters with custom `Params`
implementations.
2022-04-11 23:27:36 +02:00
Robbert van der Helm ad50852aeb Fix CLAP event output struct sizes 2022-04-11 20:53:25 +02:00
Robbert van der Helm 5e486ab3d9 Explicitly handle 0 channel IO
Instead of treating it as a flush. This is needed for note effect
plugins.
2022-04-11 20:46:51 +02:00
Robbert van der Helm e0c5a3f5e4 Fix default accepts_bus_config implementation
This should use the constants.
2022-04-11 20:46:51 +02:00
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 1f8db9d9c2 Mention NoteEvents being zero indexed 2022-04-11 19:48:07 +02:00
Robbert van der Helm 8219d5f2b8 Add an example for next_event() 2022-04-11 18:25:01 +02:00
Robbert van der Helm e4606918e7 Rename next_midi_event() to next_event() 2022-04-11 18:15:14 +02:00
Robbert van der Helm 329d1a63ab Use $crate in the macros to refer to other macros
So you don't need to import all of them for them to work.
2022-04-11 17:44:54 +02:00
Robbert van der Helm 4e5afc152a Add a basic docstring to the Params module 2022-04-11 17:38:20 +02:00
Robbert van der Helm 1e12fbe3f5 Add a feature flag to enable doc_auto_cfg 2022-04-11 16:41:09 +02:00
Robbert van der Helm c3b1ded35b Fix links in docs 2022-04-11 16:23:34 +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 476dfb9f81 Fix compilation failure from f0303fe 2022-04-09 12:12:34 +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 f0303fed4b Remove now unnecessary input events sort
This was added in anticipation of having to merge the parameter change
MIDI CC events into the events stream, but VST3 threw a curveball and
now we need to do the sorting one step earlier.
2022-04-09 11:32:20 +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 8db35aaf9d Remove notes about VST3 support for events 2022-04-08 20:59:46 +02:00
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