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
Robbert van der Helm
b61d17fee9
Require all parameters to have a Display instance
...
So their value can be easily formatted in UIs.
2022-02-09 19:45:16 +01:00
Robbert van der Helm
cd683187e0
Allow resetting parameters by double clicking
2022-02-09 11:51:30 +01:00
Robbert van der Helm
0633fddb5c
Add a function for setting pre-normalized values
2022-02-09 01:07:17 +01:00
Robbert van der Helm
1d6a9aac74
Add a way to fetch a parameter's default value
2022-02-08 23:51:07 +01:00
Robbert van der Helm
19bf213204
Add alignment specifiers and soundness comment
2022-02-08 23:16:32 +01:00
Robbert van der Helm
0ddfae1dd3
Also mode the factory to its own module
...
Now you can finally find the thing you're looking for.
2022-02-08 22:32:54 +01:00
Robbert van der Helm
05b9d4dd0b
Move the main VST3 wrapper to a module
2022-02-08 22:28:18 +01:00
Robbert van der Helm
08fe8e703e
Explicitly guarantee no simultaneous editors exist
2022-02-08 20:16:04 +01:00
Robbert van der Helm
02115d5004
Use a patched {egui-,}baseview for X11 GL contexts
2022-02-07 21:58:59 +01:00
Robbert van der Helm
0fb8ce6f7e
Add part of a Windows event loop implementation
2022-02-07 00:33:41 +01:00
Robbert van der Helm
ce37ec288e
Don't store a GUID in the factory
...
This isn't actually needed.
2022-02-07 00:19:05 +01:00
Robbert van der Helm
c9a5818cb4
Fix Windows entry point names
2022-02-06 23:37:40 +01:00
Robbert van der Helm
df76047419
Move the process context to its own module
2022-02-06 18:51:46 +01:00
Robbert van der Helm
37a8f529b0
Move WrapperView to its own module
2022-02-06 18:46:16 +01:00
Robbert van der Helm
9db4c0d691
Move inner wrapper to its own module
...
We'll need to do this with the other parts as well. Navigating this
module has become practically impossible
2022-02-06 17:50:15 +01:00
Robbert van der Helm
427c7674b9
Move VST3 pointer check macros to a module
2022-02-06 17:40:35 +01:00
Robbert van der Helm
556bec7c0b
Move editor handling to its own struct
...
This makes the API much, much nicer (especially consuming the egui
wrapper), and it also avoids having to lock the plugin instance which is
obviously very bad if the plugin is also supposed to be processing audio
on another thread.
2022-02-06 17:12:57 +01:00
Robbert van der Helm
3ede5ed751
Move the TODO on GUI opening xruns
2022-02-06 15:32:54 +01:00
Robbert van der Helm
3bd3696abe
Put the no_alloc guard around entire process call
2022-02-06 15:24:18 +01:00
Robbert van der Helm
f644ae8df8
Don't require a write lock to create an editor
2022-02-06 15:22:30 +01:00
Robbert van der Helm
7000e9d42e
Don't propagate parameter changes while processing
...
Let the host do this, this would solve all unsoundness issues and
potential collisions.
2022-02-06 14:15:43 +01:00
Robbert van der Helm
5017dad7d3
Add a semi-broken GUI example
...
This needs a lot of work. We need widgets that know how to deal with our
parameters, and also basic widgets for things like meters. Egui-baseview
also has a couple quirks left. Most notably it only updates when
actively moving over the GUI (which means VU meters look pretty janky)
and it randomly panics.
2022-02-06 13:16:28 +01:00
Robbert van der Helm
33ad2d0b15
Fix typo in buffer iterator
2022-02-06 12:59:29 +01:00
Robbert van der Helm
c4b983baf8
Implement ExactSizeIterator for the buffer adapter
2022-02-06 12:45:13 +01:00
Robbert van der Helm
2486368d08
Use AtomicF32 for the smoothing
...
This should at least not have a big performance impact since we can use
relaxed memory ordering here. AtomicCell always uses acquire/release
ordering.
2022-02-06 03:43:59 +01:00
Robbert van der Helm
6db85c535f
Move ParamSetter creation to its own struct
...
This cannot be called from the trait object.
2022-02-06 01:52:16 +01:00
Robbert van der Helm
bf070fce5a
Use atomics in the smoother
...
This is needed so we can share the params with the editor, but it isn't
great, is there a better alternative?
2022-02-06 01:33:19 +01:00
Robbert van der Helm
29a9c41389
Delay the process_wrapper() use
...
The other parts also don't allocate, but parking_lot doesn't play nicely
when spawning an editor thread. In that case its hashmap may get resized
on the audio thread which is not what we want, but it won't cause any
real problems.
2022-02-06 00:51:18 +01:00
Robbert van der Helm
d35957db65
Require static lifetimes on GUI contexts
2022-02-06 00:22:15 +01:00
Robbert van der Helm
3c867f9305
Allow all platform constants to be unused
2022-02-06 00:22:15 +01:00
Robbert van der Helm
7a6bfa4573
Add a HasRawWindowHandle wrapper struct
2022-02-06 00:22:15 +01:00
Robbert van der Helm
4021b28155
Fix rustdoc links
2022-02-06 00:22:15 +01:00
Robbert van der Helm
b1afe0b224
Downgrade raw-window-handle for baseview compat
2022-02-06 00:22:15 +01:00
Robbert van der Helm
7b14106505
Update local parameters when changing from GUI
2022-02-05 22:26:42 +01:00
Robbert van der Helm
83c3410736
Don't require Send+Sync on the editor
2022-02-05 20:48:21 +01:00
Robbert van der Helm
75435ecb4a
Don't require a Drop bound on Editor
...
On second thought, unless you're implementing something completely from
scratch this will already be part of the library you're using.
2022-02-05 20:15:09 +01:00
Robbert van der Helm
9d20ca8106
Add an idea for how the IRunLoop can be integrated
2022-02-05 19:35:20 +01:00
Robbert van der Helm
7e240146b7
Implement IPlugView
2022-02-05 18:42:06 +01:00
Robbert van der Helm
895dada6f6
Add window type constants missing from vst3_sys
2022-02-05 18:41:54 +01:00
Robbert van der Helm
2a0fde2fd5
Create a plugview if the plugin has an editor
...
The plugview, however, is still filled with stubs.
2022-02-05 18:07:03 +01:00
Robbert van der Helm
ea8edf2563
Move the editor to the IPlugView instance
...
This way the RAII make much more sense.
2022-02-05 18:06:52 +01:00
Robbert van der Helm
4c5622cf40
Implement GuiContext for the VST3 wrapper
2022-02-05 17:47:55 +01:00
Robbert van der Helm
640fe0ebd7
Make parameter pointers hashable
...
So we can use have generic APIs that take a `Param` implementation and
know how to map those to the parameter IDs used by the plugin API.
2022-02-05 17:43:15 +01:00
Robbert van der Helm
e97082aba2
Implement the ParamSetter
2022-02-05 17:32:57 +01:00
Robbert van der Helm
0bc8f9b5b1
Move preview_{normalized,plain} to Param
...
We're going to need this for setting parameter values with a gneric API.
2022-02-05 17:32:06 +01:00
Robbert van der Helm
9d2ddf016a
Add Editor and GuiContext stubs in VST3 wrapper
2022-02-05 17:15:07 +01:00
Robbert van der Helm
b075d1b1bb
Modify the editor API to use trait objects
...
The alternative isn't really feasible without specialization, and
NIH-plug should work on the stable compiler.
2022-02-05 17:12:03 +01:00