1
0
Fork 0
Commit graph

465 commits

Author SHA1 Message Date
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