Robbert van der Helm
2187aa96ab
Fix formatting in formatters.rs
...
Rustfmt changed the way it formats this a while back.
2023-04-07 13:33:39 +02:00
Robbert van der Helm
4502eaec3a
Change wrapped smoothing style to be a static ref
...
Instead of having to wrap this in an `Arc`. This makes the interface a
bit nicer to use.
2023-04-05 18:16:58 +02:00
Robbert van der Helm
8a7100ac3e
Add an OversamplingAware smoothing style
...
This can be used to have an ergonomic way to do multi-rate smoothing
with variable oversampling amounts that only the `Arc<AtomicF32>` to be
updated from a parameter callback.
2023-04-05 18:08:22 +02:00
Robbert van der Helm
3aa3f08f82
Upgrade nih_debug_assert!() to panic in tests
2023-04-05 16:13:16 +02:00
Robbert van der Helm
58174c1af0
Add a miri test for the buffer management's safety
2023-04-01 16:12:37 +02:00
Robbert van der Helm
112c801bc4
Use the new buffer management for the CPAL backend
...
Now everything uses `BufferManager`. That should hopefully reduce the
chances that different backends behave differently or trigger different
debug assertions.
2023-04-01 15:43:58 +02:00
Robbert van der Helm
cc5980e215
Zero out auxiliary output buffers
...
We used to do this, but this got lost in the migration to the new buffer
management system.
2023-04-01 15:21:12 +02:00
Robbert van der Helm
9d45cbf1d9
Use new buffer management for the dummy backend
2023-03-31 19:22:30 +02:00
Robbert van der Helm
ca4569e03a
Use new buffer management in JACK standalones
2023-03-31 18:17:48 +02:00
Robbert van der Helm
8196641d65
Update VST3 wrapper to use new buffer manager
...
This also fixes output events not being sent during a parameter flush.
2023-03-31 17:01:41 +02:00
Robbert van der Helm
30a26e0d9a
Update CLAP wrapper to use the new buffer manager
2023-03-31 16:03:49 +02:00
Robbert van der Helm
83dd585c40
Add a standalone buffer management abstraction
...
The idea is that all backends are refactored to use this. This greatly
reduces the need for backend-specific code when it comes to buffer
management, and thus also bugs. It also overwrites main output channels
that don't have a corresponding input channel with zeroes, which the
current backends don't do.
2023-03-31 16:02:00 +02:00
Robbert van der Helm
2de1fd563b
Tweak cosmic text and module logging settings
...
In release builds the cosmic text messages are now suppressed, and in
debug builds the module is always shown even for error, warning, and
info messages.
2023-03-21 20:31:58 +01:00
Stephane Albanese
77ea503de0
Add a channel getter to the NoteEvent implementation
2023-03-17 13:58:44 +01:00
Robbert van der Helm
15c859a8e6
Add CLAP 1.1.8 features
2023-03-13 15:36:04 +01:00
Robbert van der Helm
7c14010656
Keep track of the current latency in standalones
...
Even though it's not actually used, this avoids spamming the debug
assertion failure when the value doesn't change.
2023-03-12 17:12:59 +01:00
Robbert van der Helm
6ee4dbcf67
Fix doc comment wording
2023-03-12 17:08:36 +01:00
Robbert van der Helm
d380c15f8b
Only expose context_checks module in debug builds
...
This gets rid of some unused warnings.
2023-03-08 15:37:34 +01:00
Robbert van der Helm
17a95e703f
Detect incorrect GuiContext method usage
...
In debug builds.
2023-03-07 18:02:56 +01:00
Robbert van der Helm
d3cb5f2bee
Explicitly mark parameter range conversions inline
...
The compiler already does this, but these should be inlineable.
2023-03-03 22:55:35 +01:00
Robbert van der Helm
ae3356dca8
Request resizes after loading state
...
If the editor is open.
2023-03-03 18:52:57 +01:00
Robbert van der Helm
c294afbf62
Centralize state loading logic
2023-03-03 17:21:09 +01:00
Robbert van der Helm
2ee3b7c2fa
Fix InitContext drop order for standalone presets
2023-03-03 13:21:10 +01:00
Robbert van der Helm
a202c3801a
Account for Params::deserialize_fields allocating
...
When state through `GuiContext`.
2023-03-03 13:12:47 +01:00
Robbert van der Helm
a97c8ea554
Allow querying other interfaces for VST3 plugins
...
Not checking `iid` was an oversight, so if the host would create
anything other than `IComponent` this would do the wrong thing. With
this change the host can create an object for any interface we support.
Fixes #58 .
2023-03-03 00:08:12 +01:00
Robbert van der Helm
6fe5c7c471
Silence missing docs warnings for entry points
2023-03-02 12:58:51 +01:00
Robbert van der Helm
b840113caf
Fix typo in comment
2023-03-01 23:49:35 +01:00
Robbert van der Helm
b1b3ee6e21
Update the clap dependency
...
No not that clap.
2023-03-01 23:15:02 +01:00
Robbert van der Helm
ed4054b0cf
Update CPAL
...
This update mostly made things more complicated.
2023-03-01 23:11:52 +01:00
Robbert van der Helm
164e8bd402
Update the windows dependency version
2023-03-01 22:34:46 +01:00
Robbert van der Helm
199e836f80
Remove unnecessary must_use attribute
2023-03-01 19:11:35 +01:00
Robbert van der Helm
9dad9fe1a4
Remove now unused imports
2023-03-01 19:11:24 +01:00
Robbert van der Helm
c381744b47
Switch to using NIH-log for the logger
...
This greatly simplifies the setup, provides more deterministic and
performant behavior, and allows for better WinDbg integration by
detecting its presence at runtime and by using the regular pretty log
format there as well.
2023-03-01 19:01:15 +01:00
Robbert van der Helm
e621ec9b59
Print zstandard compression ratios
2023-02-28 18:12:58 +01:00
Robbert van der Helm
72f57b358f
Remove leftover debug prints
2023-02-28 17:58:34 +01:00
Robbert van der Helm
6ef0092dca
Allow the windbg logger to be overridden
2023-02-28 14:04:53 +01:00
Robbert van der Helm
5566dd7fbb
Add PersistentField implementation for AtomicCell
...
This API really needs to change.
2023-02-26 17:49:33 +01:00
Robbert van der Helm
86adca2e5a
Reexport nih_export_standalone in crate root
...
To keep the symmetry with the `nih_export_clap!()` and
`nih_export_vst3!()` macros.
2023-02-26 16:18:05 +01:00
Robbert van der Helm
7f8c1d955d
Catch VST3 parameter flushes for aux-only plugins
...
This probably shouldn't happen, but you technically can have a plugin
with no main output but with an auxiliary output. Without this check we
would not detect the parameter flush.
2023-02-26 01:27:03 +01:00
Robbert van der Helm
5ed84e5ea4
Add checks for auxiliary output channel counts
...
Apparently this was missing.
2023-02-26 01:21:31 +01:00
Robbert van der Helm
9eaf375f6b
Relax VST3 aux input debug assertions for flushes
2023-02-26 01:17:44 +01:00
Robbert van der Helm
767cff6294
Prevent incorrect pointer derefs in debug asserts
2023-02-26 01:14:06 +01:00
Robbert van der Helm
878d0e5330
Fix comment
2023-02-26 01:06:42 +01:00
Robbert van der Helm
d2b7970991
Remove the mandatory VST3 output bus
...
This doesn't seem to be necessary anymore. Perhaps this was just an
incorrect check for parameter flushes.
2023-02-26 01:05:50 +01:00
Robbert van der Helm
e41a1b94b5
Silence warning about now unused argument
...
Amends 3a9b3281e8
.
2023-02-26 01:05:46 +01:00
Robbert van der Helm
20ad19fdc5
Fix main IO for plugins with aux but no main IO
...
This would otherwise check and interact with the wrong buffers.
2023-02-26 01:05:46 +01:00
Robbert van der Helm
2580953b87
Clarify buffer_is_valid check
2023-02-26 00:56:39 +01:00
Robbert van der Helm
3a9b3281e8
Don't return kResultFalse when deactivating busses
...
Validator-sama will get very upset with us if we do.
2023-02-25 19:40:20 +01:00
Robbert van der Helm
72d2ed4151
Add MIDI IO support to the CPAL backends
...
Using Midir. This has been on the todo list for way too long.
2023-02-25 19:22:08 +01:00
Robbert van der Helm
2ed95bb52d
Add basic MIDI device selection using midir
2023-02-25 17:19:06 +01:00
Robbert van der Helm
98b8571dc9
Bundle CPAL device data into a struct
2023-02-25 17:11:59 +01:00
Robbert van der Helm
1feeb6e961
Add log messages about enabling MIDI IO with CPAL
2023-02-25 16:15:33 +01:00
Robbert van der Helm
e44d91c016
Add standalone CLI options for MIDI IO with CPAL
2023-02-25 16:11:17 +01:00
Robbert van der Helm
7c92167d85
Reorder standalone options order
...
Backend agnostic audio options should come before backend specific ones.
2023-02-25 14:48:52 +01:00
Robbert van der Helm
045598aa09
Rename CPAL standalone backend to CpalMidir
...
To make it a bit more obvious what it ends up using for IO.
2023-02-25 14:43:59 +01:00
Robbert van der Helm
d777b02d33
Use snake case for JACK client names
...
Like we're doing with the ports now.
2023-02-23 23:00:19 +01:00
Robbert van der Helm
d7e766ca00
Support auxiliary IO for JACK standalones
2023-02-23 22:58:11 +01:00
Robbert van der Helm
3ca24bdc8c
Fix dangling references with CPAL aux buffers
2023-02-23 22:30:32 +01:00
Robbert van der Helm
c6e0be341f
Actually use the standalone backend aux buffers
2023-02-23 22:20:21 +01:00
Robbert van der Helm
5d497f2de4
Add debug assertions for Arc strong counts
...
To make issues like the event loop thing more visible.
2023-02-23 21:49:24 +01:00
Robbert van der Helm
42a7bb37b4
Revert event loop APIs to use Weak instead of Arc
...
Previously the plugin wouldn't get dropped because the event loops kept
them alive. These APIs used Weak instead of Arc in the past precisely to
prevent this issue. Not sure why I changed that.
2023-02-23 21:45:09 +01:00
Robbert van der Helm
4564bf9027
Fix reference counts for background worker threads
...
We would decrement this on drop, but never increment it on clone. Oops.
2023-02-23 21:30:09 +01:00
Robbert van der Helm
5d9affad17
Provide dummy aux IO buffers with CPAL backend
2023-02-23 19:43:29 +01:00
Robbert van der Helm
3a6efe49ec
Move the unsupported aux warning to CPAL backend
...
We'll support this with JACK, and in the dummy backend there is no audio
IO anyways.
2023-02-23 19:39:51 +01:00
Robbert van der Helm
9e2c2b776b
Add auxiliary buffers in dummy standalone backwend
2023-02-23 19:35:49 +01:00
Jussi Viiri
debb2662af
s2v_f32_panning() now strips C and R, not just L
2023-02-23 14:46:39 +01:00
Robbert van der Helm
52b6c26cc4
Use the custom port names for JACK standalones
2023-02-20 17:02:38 +01:00
Robbert van der Helm
e8fd18ab80
Completely reword the audio IO layout system
...
Instead of a VST3-style polling function to test if a plugin supports a
certain layout, the plugin now explicitly enumerates the supported
layouts. This aligns better with non-VST3 plugin formats.
2023-02-20 16:57:32 +01:00
Robbert van der Helm
36c48157db
Add a nih_warn!() macro
2023-02-19 22:56:35 +01:00
Robbert van der Helm
401bb95187
Add a todo for standalone exit codes
2023-02-19 22:09:03 +01:00
Robbert van der Helm
6fd22b3ba9
Move audio setup related structs to a new module
2023-02-19 15:43:40 +01:00
Robbert van der Helm
090b4b529f
Fix unused/dead code warnings with VST3 disabled
2023-02-19 13:19:02 +01:00
Robbert van der Helm
5ddcc3bc7d
Silence unused event loop warning without VST3
2023-02-19 13:15:09 +01:00
Viktor Lazarerv
5a08c27437
Add missing conditions related to the "vst3" feature
2023-02-12 16:30:52 +01:00
Robbert van der Helm
3e4aec4dfe
Document missing missing values in NoteEvent
2023-02-08 03:07:13 +01:00
Robbert van der Helm
d2b25f8682
Add missing debug assertions for VST3 callback
2023-02-06 18:00:33 +01:00
Robbert van der Helm
bea1a6028b
Remove unnecessary cast
2023-02-02 20:03:43 +01:00
Robbert van der Helm
9c48e7f59b
Fix assertion failures when reactivating plugins
...
`.set_slices()` makes sure all slices' lengths are equal to the first
argument, so in these functions we'll need to manually overwrite any
existing element with empty slices.
2023-02-02 16:15:43 +01:00
Robbert van der Helm
62f7f38a9e
Loosen generic bounds on NoteEvent
...
The `S: SysExMessage` isn't strictly needed. I thought it might make the
usage clearer, but it does introduce more boilerplate than strictly
necessary when working with note events.
2023-02-01 18:07:45 +01:00
Robbert van der Helm
15128edde4
Fix assertions in clamping functions
...
This was previously comparing against the buffer's length, so the `<`
made sense. But this approach always allows events at time 0 even if the
buffer is empty.
2023-02-01 17:39:08 +01:00
Robbert van der Helm
d735d23ffa
Document the use of .saturating_sub(1)
2023-02-01 17:36:25 +01:00
Robbert van der Helm
55c3701d2e
Move event timing clamping to functions
...
So this doesn't need to be repeated everywhere.
2023-02-01 17:33:14 +01:00
Robbert van der Helm
d5a8eb42ec
Clamp event timings for VST3 plugins
2023-02-01 17:24:22 +01:00
Robbert van der Helm
eac88c4477
Clamp event times for JACK standalones
2023-02-01 17:18:06 +01:00
Robbert van der Helm
8d2d293b49
Clamp event timings for CLAP plugins
2023-02-01 17:17:50 +01:00
Robbert van der Helm
5cb826725d
Fix typo in docstring
2023-02-01 17:02:34 +01:00
Robbert van der Helm
7874e1796f
Add a debug assert for the subcategory length
...
Since this will be truncated otherwise.
2023-02-01 16:50:48 +01:00
Robbert van der Helm
d6184ea06e
Replace VST3 category string with enum slice
...
I've been putting this off for a while, but now is finally the day. We
already did this for CLAP a while back. This is both simpler and less
error prone.
2023-02-01 16:09:03 +01:00
Robbert van der Helm
7fe339987a
Define an enum for VST3 subcategories
...
Because looking these up and inputting them by hand every time is both
cumbersome and error prone.
2023-02-01 15:46:28 +01:00
Robbert van der Helm
5db07090ca
Replace match with if-let
...
Clippy didn't like this.
2023-02-01 14:52:45 +01:00
Robbert van der Helm
fb29322b81
Document which CLAP features are main categories
2023-02-01 14:36:54 +01:00
Robbert van der Helm
3790a05891
Avoid sending zero velocity note ons with MIDI
2023-02-01 12:48:51 +01:00
Robbert van der Helm
69b87b7a26
Print unhandled SysEx as hexadecimal
2023-01-31 22:25:23 +01:00
Robbert van der Helm
89b81b38c3
Remove debug assertions for SysEx parse failures
2023-01-31 22:22:42 +01:00
Robbert van der Helm
6e6f327dc4
Always accept MIDI events in CLAP
...
Otherwise we may not receive SysEx events.
2023-01-31 22:20:48 +01:00
Robbert van der Helm
5dbc76ef69
Simplify conversion from SysExMessage to buffers
...
There's no need to provide this as an argument anymore.
2023-01-31 22:03:40 +01:00
Robbert van der Helm
0deb8ab1cd
Simplify VST3 ProcessEvent::NoteEvent
2023-01-31 21:55:26 +01:00
Robbert van der Helm
b35914bbbd
Add SysEx support for VST3
2023-01-31 21:52:21 +01:00
Robbert van der Helm
e7be5ef178
Simplify CLAP SysEx output
2023-01-31 21:50:49 +01:00
Robbert van der Helm
701590f1cd
Support SysEx for CLAP plugins
2023-01-31 21:35:52 +01:00