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
Robbert van der Helm
e4c6c6c25b
Update the documentation on the updated GuiContext
2022-02-05 17:10:17 +01:00
Robbert van der Helm
3e2dc92b22
Avoid destructuring assignment
...
Somehow the nightly compiler just lets you do this without needing to
opt in to the unstable feature.
2022-02-05 16:46:29 +01:00
Robbert van der Helm
fe96b8572e
Type erase GuiContext by splitting the safe API
...
These functions not being able to be made into an object was the whole
reason why we needed the associated type in the first place. This will
make everything much nicer to work with, since
specialization/overlapping instances is still not possible with the
stable compiler.
2022-02-05 16:30:33 +01:00
Robbert van der Helm
1f2029ecbe
Replace spawn_unchecked with static lifetimes
...
These things don't need to hold references, so this gets rid of some
nasty c ode.
2022-02-05 16:09:59 +01:00
Robbert van der Helm
1e77a92285
Require plugins to be 'static
...
They can't contain any references anyways since they're default
initialized. If they don't have a 'static lifetime, then it won't be
possible to pass a trait object casted from the inner wrapper to the
plugin.
2022-02-05 16:03:16 +01:00
Robbert van der Helm
78a83d5051
Allow unused variables in trait defaults
2022-02-05 13:32:03 +01:00
Robbert van der Helm
d2407db284
Replace editor close function with a Drop bound
2022-02-05 13:06:18 +01:00
Robbert van der Helm
b901dac012
Disambiguate rustdoc link references
2022-02-05 12:56:03 +01:00
Robbert van der Helm
63d30d33e4
Fix rustdoc links
2022-02-05 12:52:34 +01:00
Robbert van der Helm
7ac1df0d8d
Add stubs for editor handling
2022-02-05 12:46:26 +01:00
Robbert van der Helm
bbc190c67f
Hold the RwLock guard in the process context
...
This avoids having to constantly acquire a new lock.
2022-02-04 23:03:11 +01:00
Robbert van der Helm
ce3da8ea44
Use a dedicated struct for the process context
2022-02-04 22:55:10 +01:00
Robbert van der Helm
209c19b74f
Get rid of lifetime parameters for VST3 wrapper
...
This lifetime didn't make any sense anyways since these buffers don't
adhere to Rust's lifetime rules. Getting rid of these will let us make
nicer wrappers around the process context.
2022-02-04 22:54:28 +01:00
Robbert van der Helm
cbd51b0c3a
Monomorphize the context variables
...
For the parameter setting context functions we don't be able to use
trait objects.
2022-02-04 22:34:53 +01:00
Robbert van der Helm
f2d3d987a0
Update the current MIDI support status
2022-02-04 22:31:43 +01:00
Robbert van der Helm
a93ad650be
Remove old todo
2022-02-04 19:04:36 +01:00
Robbert van der Helm
4c0031d7b3
Fix clippy lints
2022-02-04 18:42:42 +01:00
Robbert van der Helm
073fe743c2
Split up set_target and reset in smoothers
...
This makes it a bit less awkward to use in user code, if you need a
separate smoother there.
2022-02-04 15:17:42 +01:00
Robbert van der Helm
366deda83c
Add MIDI support to the sine example
2022-02-04 15:17:42 +01:00
Robbert van der Helm
fdfd1b01c2
Add a function for retrieving the next note event
2022-02-04 15:17:42 +01:00
Robbert van der Helm
0e67c61be0
Store timing along with the note events
2022-02-04 15:17:42 +01:00
Robbert van der Helm
02cf16e9c0
Accept incoming note events
2022-02-04 15:17:42 +01:00
Robbert van der Helm
51dace591d
Add an event bus depending on ACCEPTS_MIDI
2022-02-04 15:17:42 +01:00
Robbert van der Helm
aee3775c10
Add default implementations for most trait methods
...
Except for process()
2022-02-04 15:17:42 +01:00
Robbert van der Helm
74e0fa5964
Add defaults for some of the plugin constants
2022-02-04 15:17:42 +01:00
Robbert van der Helm
f69fdcef5f
Add another plugin constant for MIDI support
2022-02-04 15:17:42 +01:00
Robbert van der Helm
c1f435d909
Refer to the gain plugin in the Params trait
2022-02-03 17:05:38 +01:00
Robbert van der Helm
fc96bb4349
Fix channel map debug assertion
2022-02-03 17:03:33 +01:00
Robbert van der Helm
dfb73f6902
Mention the 6 character overflow limit for IDs
2022-02-03 17:02:42 +01:00
Robbert van der Helm
30609c3ecd
Add an is_smoothing() check
2022-02-03 16:51:41 +01:00
Robbert van der Helm
82dfee9313
Document the FTZ flags in the process function
2022-02-03 16:22:32 +01:00
Robbert van der Helm
e642fb5ff8
Make sure FTZ is always enabled
2022-02-03 16:18:24 +01:00
Robbert van der Helm
dfedd7b2c4
Enable assert_no_alloc in debug builds
2022-02-03 15:58:00 +01:00
Robbert van der Helm
2ca54d220d
Add logarithmic smoothing
2022-02-02 23:00:17 +01:00
Robbert van der Helm
1ad477ee4f
Add smoothing tests
2022-02-02 22:34:29 +01:00
Robbert van der Helm
1c80744989
nih_debug_assert_neq -> nih_debug_assert_ne
2022-02-02 22:29:14 +01:00
Robbert van der Helm
da291175d1
Rename SmoothLinear to Linear
...
We'll rethink this when we get to sample accurate automation.
2022-02-02 22:00:00 +01:00
Robbert van der Helm
0ecec104fb
Completely reset smoothing on init or restore
2022-02-02 21:41:20 +01:00
Robbert van der Helm
1336139a65
Update smoothers on init and state restore
...
Otherwise this would be filled with default values.
2022-02-02 21:33:20 +01:00
Robbert van der Helm
e30a72888a
Add an update_smoother() parameter method
2022-02-02 21:26:34 +01:00
Robbert van der Helm
ea7dc2ffa3
Implement smoothing for integers
2022-02-02 21:26:20 +01:00
Robbert van der Helm
8f89754ba5
Add simple linear parameter smoothing
2022-02-02 21:26:13 +01:00
Robbert van der Helm
fced4001c0
Access plain values using the method
...
Since we're also setting them using the method.
2022-02-02 20:39:04 +01:00
Robbert van der Helm
a42649b2de
Derive a Default instance for the Buffer
...
To make Clippy happy.
2022-02-02 20:37:06 +01:00
Robbert van der Helm
13369e4085
Reinitialize the plugin after restoring state
...
This lets you use the parameters to set fields on the plugin struct
during `initialize()`.
2022-02-02 15:39:55 +01:00
Robbert van der Helm
c982ad9599
Avoid duplicate state restores
2022-02-02 15:32:21 +01:00
Robbert van der Helm
c8cc6bd26b
Re-export all user facing includes
2022-02-02 15:16:10 +01:00
Robbert van der Helm
f44597df7c
Move the buffer adapter to its own module
2022-02-02 15:01:41 +01:00
Robbert van der Helm
048d69213e
Make the buffer own the output slices
...
This gets rid of a lot of lifetime casting and other unsoundness.
2022-02-02 14:41:35 +01:00
Robbert van der Helm
fbadfe3e12
Fix clippy lints
2022-02-02 13:02:28 +01:00
Robbert van der Helm
6cde9cea0e
Simplify spawn_unchecked lifetime transmute
2022-02-02 13:02:28 +01:00
Robbert van der Helm
58736f5cc8
Add a super unsafe channel buffer adapter
...
To avoid having to perform lifetime magic here, this buffer needs to own
the slices and be stored as part of the RwLock.
2022-02-02 13:02:28 +01:00
Robbert van der Helm
63e4a54d7c
Center skewed parameters around the skew center
...
It's a bit awkward and you can completely lose some parts of the range
if you don't do this.
2022-02-02 00:06:07 +01:00
Robbert van der Helm
1202b2b9d6
Update unimplemented features list
...
These things are now all implemented.
2022-02-01 23:39:13 +01:00
Robbert van der Helm
7752ce6771
Add symmetrically and asymmetrically skewed ranges
...
This is super useful. I'm sure the symmetrical implementation can be
optimized a lot, but my math-fu was not strong enough today.
2022-02-01 23:37:28 +01:00
Robbert van der Helm
740868a10c
Move parameter ranges to their own module
...
This module was too difficult to navigate with parameter types + ranges
+ implementation details.
2022-02-01 21:06:13 +01:00
Robbert van der Helm
27bef6fbbc
Move the param trait up in the module
2022-02-01 21:02:58 +01:00
Robbert van der Helm
4aa85b43b4
Move parameter implementation details to a module
2022-02-01 21:01:28 +01:00
Robbert van der Helm
bc60dc35b6
Fix rustdoc references
2022-02-01 20:53:20 +01:00
Robbert van der Helm
6bb83061dd
Rename the params module to param
...
It's a heterogeneous module, and splitting the ranges to their own
module will be a bit weird otherwise.
2022-02-01 20:51:22 +01:00
Robbert van der Helm
15e0f6f21a
Remove unnecessary import
...
I was going to add that set_parameter function in the next commit, but
that will need to wait a bit.
2022-02-01 19:54:35 +01:00
Robbert van der Helm
473447179f
Handle idempotent latency changes
2022-02-01 17:17:10 +01:00
Robbert van der Helm
e2e2c59d34
Pass the process context to the plugin
2022-02-01 17:09:23 +01:00
Robbert van der Helm
3a1fbed4c3
Mark MainThreadExecutor::execute as unsafe
...
This should only be called from the main thread. Otherwise the API's
threading guarantees will not be upheld.
2022-02-01 17:01:05 +01:00
Robbert van der Helm
459175b470
Call the component handler for restarts
2022-02-01 16:59:11 +01:00
Robbert van der Helm
223d0c3a90
Take a reference to the component handler
2022-02-01 16:52:55 +01:00
Robbert van der Helm
d47aac25a1
Rearrange WrapperInner parameters
2022-02-01 16:40:51 +01:00
Robbert van der Helm
565d9259c3
Use weak references to the executor
...
So this cyclic reference can't keep it alive.
2022-02-01 15:31:16 +01:00
Robbert van der Helm
98076ff792
Use a custom .spawn_unchecked without nightly req
...
Courtesy of Yandros on the Rust Discord.
2022-02-01 15:04:36 +01:00
Robbert van der Helm
8a0e083168
Add a TODO and stub for parameter smoothing
2022-02-01 00:14:33 +01:00