1
0
Fork 0
Commit graph

1107 commits

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