Robbert van der Helm
997249a293
Notify about unsupported aux IO in standalones
...
None of the backends support this at the moment.
2022-09-07 15:58:09 +02:00
Robbert van der Helm
9536842a15
Only show CPAL MIDI support warning if applicable
2022-09-07 15:55:36 +02:00
Robbert van der Helm
c566888fa3
💥 Use interior mutability for parameters
...
Instead of the previous technically-unsound approach. While it wouldn't
cause any issues in practice, it did break Rust's guarantees. That was a
design choice after adding support for editors in NIH-plug, but this is
probably the better long term solution.
The downside is that all uses of `param.value` now need to be changed to
`param.value()`.
2022-09-06 21:57:24 +02:00
Robbert van der Helm
5966e353da
Use only interior mutability for smoothers
...
This is needed in preparation for removing the need to have `*mut`
pointers to parameters.
2022-09-06 21:21:46 +02:00
Robbert van der Helm
7f33f172cb
Clean up optimized block smoothing
...
This is easier to follow and avoids computing and subsequently
overwriting the last smoothed value.
2022-09-05 14:00:56 +02:00
Robbert van der Helm
a21daef96b
Redesign mapped block smoothing
...
The non-mapped version is now split off and the mapped version is much
better suited for array based modulation. Check the breaking changes
document and the new docstring for more information.
2022-09-04 20:17:06 +02:00
Robbert van der Helm
99437c6011
Optimize block smoothing
2022-09-04 19:52:17 +02:00
Robbert van der Helm
3a9d56e956
Rename step_size() current parameter to start
2022-09-04 18:40:18 +02:00
Robbert van der Helm
8e17972da5
Also move num steps computation to SmoothingStyle
2022-09-04 18:26:36 +02:00
Robbert van der Helm
bb6e9c237f
Add equivalence tests for next() and next_step()
2022-09-04 18:20:51 +02:00
Robbert van der Helm
9f990cc3b9
Rename step_size() parameter for SmoothingStyle
2022-09-04 18:20:28 +02:00
Robbert van der Helm
17a928647e
Optimize single step Smoother::next()
...
By not having to take multiple steps into account.
2022-09-04 18:08:31 +02:00
Robbert van der Helm
dd320c4c1f
Add dedicated single step next() to SmoothingStyle
...
This avoids some computations for single stepping. And we can use this
for block smoothing later.
2022-09-04 18:08:19 +02:00
Robbert van der Helm
e47899d421
Move calculation in next_step() to SmoothingStyle
2022-09-04 18:04:31 +02:00
Robbert van der Helm
a6d9972924
Move the smoothing step size to a function
2022-09-04 17:57:21 +02:00
Robbert van der Helm
2f87a79d3e
Wait for the Windows event loop to shut down
...
This fixes crashes when removing the instance and immediately unloading
the module. `DestroyWindow()` is synchronous while `CloseWindow()`
merely posts a message to close the window.
2022-08-29 13:59:28 +02:00
Robbert van der Helm
3761f9f5ee
Remove unnecessary use of MaybeUninit
2022-08-22 12:41:12 +02:00
Robbert van der Helm
26e0d17833
Fix VST3 event loop leaking
...
This should have never used MaybeUninit in the first place.
2022-08-22 12:31:09 +02:00
Robbert van der Helm
5110e5b059
Log trace messages when loading and saving state
2022-08-22 12:09:25 +02:00
Robbert van der Helm
72d3b61a42
Mention standalone inputs not auto connecting
2022-08-21 17:59:44 +02:00
Robbert van der Helm
9cd440231e
Print message about MIDI IO not being implemented
2022-08-21 17:59:44 +02:00
Robbert van der Helm
1bee7f5333
Add audio input to the CPAL standalone backend
2022-08-21 17:55:09 +02:00
Robbert van der Helm
c46a044cb4
Add audio output for the CPAL backend
2022-08-21 17:07:02 +02:00
Robbert van der Helm
c47f2139a3
Use a Parker instead of a channel in JACK backend
2022-08-21 15:26:49 +02:00
Robbert van der Helm
559d835878
Print system backend init errors in auto mode
...
Since this may fail due to incompatible default sample rates or period
sizes.
2022-08-21 15:26:48 +02:00
Robbert van der Helm
1fc437068a
Compute device configs for cpal
2022-08-21 15:26:48 +02:00
Robbert van der Helm
a011eaa07c
Add most of a CPAL standalone backend
...
For ALSA, CoreAudio, and WASAPI.
2022-08-21 15:26:48 +02:00
Robbert van der Helm
ca2e318551
Clean up JACK MIDI handling #23
2022-08-20 23:56:18 +02:00
Sean Bolton
7a10d58a58
Fix program change and channel pressure receipt in standalone jack backend
2022-08-20 23:48:55 +02:00
Robbert van der Helm
5010ce5e1a
Allow parsing compression ratios without a colon
2022-08-20 15:54:09 +02:00
Robbert van der Helm
8a9c98943e
Store plugin version in the state
...
This may later be used to allow migrations between breaking plugin
versions.
2022-08-20 15:10:34 +02:00
Robbert van der Helm
ee62a45d0d
Remove now unused argument
2022-08-19 14:54:48 +02:00
Robbert van der Helm
a5c05b22fb
Use the plugin's default channels for standalones
2022-08-19 14:52:57 +02:00
Robbert van der Helm
1a706ea1c7
Rename DEFAULT_NUM_INPUTS and DEFAULT_NUM_OUTPUTS
2022-08-19 14:34:21 +02:00
Robbert van der Helm
b19e6afa6c
Remove unused import
2022-08-18 16:41:51 +02:00
Robbert van der Helm
56a12db1e6
Reuse MIDI conversion function for CLAP events
2022-08-18 16:39:07 +02:00
Robbert van der Helm
b7633730e6
Mention that VST3 plugins won't receive MIDI PC
...
There's no way to map this.
2022-08-18 16:38:44 +02:00
Robbert van der Helm
17a90cca9b
Rearrange note events
2022-08-18 16:38:44 +02:00
Sean Bolton
2447344dab
Add program change events
2022-08-18 16:26:32 +02:00
Robbert van der Helm
1bb1cde913
Add optional Zstandard compression for state
...
This can be particularly useful when using the persistent fields feature
to store JSON or other large textual documents.
2022-08-18 13:55:48 +02:00
Robbert van der Helm
7f12c9f362
Fix group->unit conversion with missing parents
...
This caused Spectral Compressor's VST3 version to not work because the
compressor group didn't contain any parameters.
2022-07-24 23:37:45 +02:00
Robbert van der Helm
6a1395e99a
Avoid printing -0.0 dB
2022-07-24 21:20:53 +02:00
Robbert van der Helm
6ee7e8f4e3
Assert correct values for gain_skew_factor
2022-07-24 21:06:26 +02:00
Robbert van der Helm
2d3b601555
Allow comparisons in nih_assert!()
2022-07-24 21:06:13 +02:00
Robbert van der Helm
44b9a4cad0
Add a way to compute skew factors for linear gain
...
Needed for #18 .
2022-07-24 20:46:18 +02:00
Robbert van der Helm
dc97fb1019
Implement Params for Arc<P: Params>
...
This is useful for partial generic UIs.
2022-07-24 15:15:47 +02:00
Robbert van der Helm
83d8c7a9f4
Add a formatter for compression ratios
2022-07-24 15:15:47 +02:00
Robbert van der Helm
12aa8544cd
Add a non-functional STFT to Spectral Compressor
2022-07-24 15:15:47 +02:00
Robbert van der Helm
9844d9c490
Change match &self to match self
...
This is equivalent when taking a reference to self, and you can't do the
same thing with &mut self.
2022-07-19 20:21:52 +02:00
Robbert van der Helm
f007945335
Add reversed ranges
2022-07-19 20:21:52 +02:00
Robbert van der Helm
ef1d56646a
Make Arc<ViziaState> persistable
...
This allows the plugin instance's size and scale to be remembered.
2022-07-13 23:16:54 +02:00
Robbert van der Helm
0395fd91b1
Only connect JACK ports after activating client
...
Otherwise JACK2 will hate us. Forever!
The AtomicRefCell now needs to be a mutex because the process call may
be called while this connection function is still running.
2022-07-13 19:19:17 +02:00
Robbert van der Helm
1f3d2f9a66
Fix typo in standalone documentation example
2022-07-13 17:06:22 +02:00
Robbert van der Helm
d828e697a3
Actually expose the CLAP render extension
...
Oops.
2022-07-11 15:00:10 +02:00
Robbert van der Helm
2bb698a8f1
Mark the smoother's style field pub
...
This is useful when using the smoother as a simple amplitude envelope.
2022-07-06 20:14:29 +02:00
Robbert van der Helm
35e584b3c8
Add a poly mod gain parameter to PolyModSynth
2022-07-06 19:18:49 +02:00
Robbert van der Helm
fb43047cbe
Document Bitwig not providing voice ID for NoteOff
2022-07-06 17:16:19 +02:00
Robbert van der Helm
16077101b2
Gate NoteEvent::VoiceTerminated behind MIDI_INPUT
2022-07-06 17:16:19 +02:00
Robbert van der Helm
4ad4f8f76d
Add more basic fields for PolyModSynth
2022-07-06 17:16:19 +02:00
Robbert van der Helm
e77eca88a5
Rename the midi_note_to_freq() argument name
...
To match the 'note' term used everywhere else.
2022-07-06 17:16:19 +02:00
Robbert van der Helm
958bea45e6
Re-export PolyModulationConfig from the prelude
2022-07-06 14:38:08 +02:00
Robbert van der Helm
4b905e28d4
Add Clone and Debug instances for Smoother
2022-07-06 14:32:18 +02:00
Robbert van der Helm
68cf0455ee
Rework and optimize block smoothing API
...
You now need to bring your own buffer instead of the smoother having a
built in vector you would need to pre-allocate. This makes the API
simpler, and also much more flexible when doing polyphonic modulation.
In addition, the new API is much more efficient when there is no
smoothing going on anymore.
2022-07-06 14:29:29 +02:00
Robbert van der Helm
ec77d3b450
Fix typo in comment
2022-07-06 13:55:26 +02:00
Robbert van der Helm
1424b98e38
Break PolyModulation into that and MonoAutomation
...
This is needed to properly support polyphonic modulation, since the
modulated value may still be automated in the meantime and the
polyphonic modulation must act as an offset for that value. This does
mean that the plugin must add the normalized value and normaliezd offset
by itself. The `PolyModulation` event now also contains a description of
how this can be used. It would have been nicer to be able to send
polyphonic automation-style events instead (like the PolyModulation was
doing before), but that's sadly not feasible without NIH-plug being
involved in the voice management.
2022-07-06 13:40:12 +02:00
Robbert van der Helm
9520234b57
Pass poly modulation events through to the plugin
2022-07-06 00:09:53 +02:00
Robbert van der Helm
0187325b60
Add (currently unused) PolyModulation events
2022-07-05 23:51:37 +02:00
Robbert van der Helm
af4314b581
Mark poly mod parameters as such
2022-07-05 23:41:35 +02:00
Robbert van der Helm
54b47ecf71
Keep track of poly mod parameter IDs
2022-07-05 23:41:08 +02:00
Robbert van der Helm
cdee721e9c
Allow the plugin to change current voice capacity
2022-07-05 23:26:23 +02:00
Robbert van der Helm
f828761677
Implement the CLAP voice info extension
2022-07-05 23:26:23 +02:00
Robbert van der Helm
1de561e4a0
Add poly mod config constant to ClapPlugin
...
Setting this will enable the 'voice-info' extension.
2022-07-05 23:26:23 +02:00
Robbert van der Helm
1466358e14
Support Plugin::HARD_REALTIME_ONLY for VST3
2022-07-05 22:24:52 +02:00
Robbert van der Helm
905925e032
Move the hard realtime constant to Plugin
...
Since we could indeed just add the `|OnlyRT` category to the VST3
plugin.
2022-07-05 22:20:07 +02:00
Robbert van der Helm
992fcfe969
Add polyphonic modulation IDs to parameters
...
In a bit we should be able to use this with a new `PolyModulation` note
event to allow polyphonic modulation.
2022-07-05 19:39:50 +02:00
Robbert van der Helm
7ea2851775
Clarify the input event timing handling in VST3
2022-07-04 22:45:52 +02:00
Robbert van der Helm
1bbb56151d
Remove duplication in CLAP note timing handling
2022-07-04 22:43:48 +02:00
Robbert van der Helm
5b264179d4
Add note choke events
2022-07-04 22:42:04 +02:00
Robbert van der Helm
d027a6319f
Add VoiceTerminated events
...
These need to be output by a plugin when using polyphonic
modulation (which is currently not yet supported by NIH-plug).
2022-07-04 19:31:40 +02:00
Robbert van der Helm
a2f8a9bebf
Add voice ID fields for all non-MIDI note events
...
This will be useful when adding polyphonic modulation.
2022-07-04 18:31:59 +02:00
Robbert van der Helm
f11b3c1a03
Fix typos in parameter value docstrings
2022-07-04 18:01:55 +02:00
Robbert van der Helm
7cd7294b22
Make CLAP descriptions and special URLs optional
...
This closes #14 .
2022-07-04 12:46:34 +02:00
Robbert van der Helm
5cbd8827e9
Update clap-sys with optional function pointers
...
None of these function pointers are allowed to be null, yet even the
official `clap-helpers` do this. This new `clap_call!()` macro asserts
that a pointer is non-null before calling it.
2022-07-04 00:07:06 +02:00
Robbert van der Helm
97baa9d55c
Remove duplicate comment
2022-07-03 17:04:33 +02:00
Robbert van der Helm
c91b74355f
Let rustfmt handle string wrapping
2022-07-03 16:52:38 +02:00
Robbert van der Helm
ed880f5297
Handle buffered CLAP stream reads and writes
...
`clap-validator` now tests this.
2022-07-03 16:51:15 +02:00
Robbert van der Helm
5e6e920418
Use BTreeMaps in the state
...
This ensures that the order is consistent when saving the same state
file multiple times.
2022-07-02 19:13:18 +02:00
Robbert van der Helm
71efe779a5
Recompute normalized values when setting params
...
This makes it so that the value is consistent after reloading the
preset.
2022-07-02 19:04:43 +02:00
Robbert van der Helm
32ad1212f1
Silence clippy::type_complexity
...
Clippy now wants us to move any usage of the Fn* traits to a typedef.
Doing so will almost certainly not help readability.
2022-07-01 15:50:23 +02:00
Robbert van der Helm
0599780030
Remove unnecessary reborrows
2022-07-01 15:50:16 +02:00
Robbert van der Helm
1d7cbe4c4d
Suppress unused_unit more locally
2022-07-01 14:58:31 +02:00
Robbert van der Helm
f309f39982
More defensively check for >0 inputs and outputs
...
Noticed this through a bug in clapval.
2022-06-29 01:32:39 +02:00
Robbert van der Helm
4247c229ec
Fix in-place pairs for output-only plugins
...
https://github.com/robbert-vdh/clapval reminded me of this.
2022-06-29 01:32:39 +02:00
Robbert van der Helm
05fd7fa075
Revert "Fix audio port in-place pair indices"
...
This reverts commit 791dc44650
.
This was actually correct, this should use stable indices instead of
list indices.
2022-06-27 18:33:13 +02:00
Robbert van der Helm
791dc44650
Fix audio port in-place pair indices
2022-06-27 18:22:40 +02:00
Robbert van der Helm
9fa305206c
Fix compilation on Windows
2022-06-26 23:25:21 +02:00
Robbert van der Helm
4b2435a791
Allow allocations during most panics
...
The panic logger is allowed to allocate now. If a panic message uses
string formatting then that may still trigger `assert_no_alloc`.
2022-06-26 23:13:35 +02:00
Robbert van der Helm
fb0c1acbed
Update documentation on PersistentField
2022-06-24 21:09:25 +02:00
Robbert van der Helm
8018af419f
Add back lost note->frequency conversion
...
This somehow got lost in db135ba34f
.
2022-06-22 19:40:25 +02:00
Robbert van der Helm
db135ba34f
Fix note note string -> MIDI ID conversion
...
This was added in a PR, but I never actually tested the conversion.
2022-06-22 19:35:10 +02:00
Robbert van der Helm
c6c37e665b
Accept note names for frequency params
2022-06-22 18:41:50 +02:00
Robbert van der Helm
2d2ff23cc4
Remove old TODO about only logging in debug builds
2022-06-19 15:28:18 +02:00
Robbert van der Helm
bf725fb935
List more not yet implemented features
2022-06-18 18:50:53 +02:00
Robbert van der Helm
a291e0dfb6
Always request flush when setting params from GUI
2022-06-17 18:28:15 +02:00
Brian Anderson
23947ec0b5
Dummmy -> Dummy
2022-06-15 23:28:07 -06:00
Robbert van der Helm
e891e1fdb7
Use JACK transport data for JACK standalone
2022-06-15 00:48:34 +02:00
Robbert van der Helm
4219acaf83
Sort of allow GUI-less standalones
...
There's no way to interact with them, but they'll just keep running and
be at least somewhat useful.
2022-06-15 00:25:37 +02:00
Robbert van der Helm
a4fa7e8e78
Initialize smoothers in the standalone
2022-06-15 00:18:44 +02:00
Robbert van der Helm
0b6be4de1c
Fully implement MIDI support in standalone wrapper
2022-06-15 00:10:27 +02:00
Robbert van der Helm
54f4b8a026
Read and write MIDI events in JACK standalone
...
The standalone itself does not yet pass these to the plugin.
2022-06-14 23:43:13 +02:00
Robbert van der Helm
0d2330d773
Add conversions from note events to MIDI
2022-06-14 23:28:12 +02:00
Robbert van der Helm
66f5a0e7de
Move MIDI parsing from CLAP wrapper to NoteEvent
2022-06-14 22:59:40 +02:00
Robbert van der Helm
4e021dd0bb
Add input and output events to Backend trait
2022-06-14 22:56:25 +02:00
Robbert van der Helm
e967e04856
Add auto connecting for JACK MIDI ports
2022-06-14 21:43:26 +02:00
Robbert van der Helm
5cd4bb8de0
Register JACK MIDI input and output ports
2022-06-14 21:32:29 +02:00
Robbert van der Helm
c7f6aa15f8
Add a standalone cli arg to connect JACK inputs
2022-06-14 20:08:36 +02:00
Robbert van der Helm
f30fe0dbc2
Fix macro name
2022-06-14 19:12:28 +02:00
Robbert van der Helm
73d3281816
Log which backend is used in auto mode
2022-06-14 19:03:36 +02:00
Robbert van der Helm
7e0caa4c8d
Add audio support to the JACK backend
2022-06-14 18:59:54 +02:00
Robbert van der Helm
7216627a01
Create and connect JACK ports
2022-06-14 17:59:34 +02:00
Robbert van der Helm
10a55e1f00
Move standalone backends to their own modules
2022-06-14 17:31:45 +02:00
Robbert van der Helm
191d5383bd
Add boilerplate for an actual JACK implementation
2022-06-14 17:27:59 +02:00
Robbert van der Helm
e2099ec16c
Introduce an nih_error!() macro for fatal errors
2022-06-14 16:31:46 +02:00
Robbert van der Helm
3d5f44764e
Add boilerplate for a JACK backend
2022-06-14 16:27:35 +02:00
Robbert van der Helm
99fdc8975f
Add a backend type option to the standalone cli
2022-06-14 16:04:39 +02:00
Robbert van der Helm
d97831649e
Move standalone WrapperConfig to its own module
2022-06-14 15:52:31 +02:00
Robbert van der Helm
49e683e396
Add a cli for controlling the standalone settings
2022-06-14 15:44:42 +02:00
Robbert van der Helm
34fa78a313
Update for CLAP 1.0
2022-06-10 00:36:16 +02:00
Robbert van der Helm
12a4440af0
Remove unnecessary use statement
2022-06-08 02:08:51 +02:00
Robbert van der Helm
b32cd27e8c
Move FIR filters to their own module
2022-06-07 15:19:18 +02:00
Robbert van der Helm
89afa8bf00
Use nih_trace!() for lesser important messages
...
Like the missing CLAP extensions.
2022-06-07 14:18:56 +02:00
Robbert van der Helm
449adb8bfc
Add stable IDs for enum parameters
2022-06-03 22:22:36 +02:00
Robbert van der Helm
bfc472e49b
Introduce a new enum for CLAP features
...
Based on the new CLAP 0.26 clap-features.h.
2022-06-02 01:16:30 +02:00
Robbert van der Helm
ce9142186e
Remove the win32-dpi-aware CLAP feature on Windows
...
I don't think this is correct, since none of the GUI adapters are able
to communicate the detected DPI back to NIH-plug.
2022-06-02 00:54:15 +02:00
Robbert van der Helm
19f4fdadc5
Update for CLAP 0.26
2022-06-02 00:50:36 +02:00
Robbert van der Helm
37a2d86714
Add TODO on also supporting hard realtime for VST3
2022-05-30 15:30:41 +02:00
Robbert van der Helm
c7f5cd1cec
Fix NaNs in negative out of bounds skewed params
...
This would result in a NaN, and the clamping wouldn't catch that.
2022-05-29 14:33:16 +02:00
Robbert van der Helm
782b46308a
Make ranges Clone and Copy
2022-05-29 14:22:14 +02:00
Robbert van der Helm
45c141c394
Make smoothing styles Debug, Clone and Copy
2022-05-29 14:21:41 +02:00
Robbert van der Helm
7a4e7b187a
Clear auxiliary output buffers at start of process
...
This prevents uninitialized data from lingering if the plugin doesn't
write to these buffers. Seen this happen in Bitwig.
2022-05-29 14:07:13 +02:00
Robbert van der Helm
c56e1eab14
Implement custom port names for CLAP
2022-05-28 00:39:16 +02:00
Robbert van der Helm
90ee514fe4
Implement custom port names for VST3
2022-05-28 00:34:44 +02:00
Robbert van der Helm
625ad06584
Add a port names field on Plugin
2022-05-28 00:20:32 +02:00
Robbert van der Helm
4b760d1c19
Move auxiliary IO handling down in process()
2022-05-28 00:11:14 +02:00
Robbert van der Helm
0242cc5235
Also implement auxiliary IO for VST3
2022-05-28 00:10:16 +02:00
Robbert van der Helm
ee900f74c2
Support auxiliary inputs and outputs for CLAP
...
This does not yet work for VST3. You'll always get empty slices there.
2022-05-27 02:30:57 +02:00
Robbert van der Helm
b2e6bd5515
Create a separate InitContext
...
Only a couple of these functions would be needed during initialization.
In the next couple commits ProcessContext will get a way to access
auxiliary IO, so this really had to be separated.
2022-05-27 01:17:15 +02:00
Robbert van der Helm
7eee0b032e
Report at least a channel output bus for VST3
...
Bitwig just doesn't call the process function if plugins have no audio
IO.
2022-05-26 12:37:31 +02:00
Robbert van der Helm
4c54716cc2
Remove unnecessary pub specifier
2022-05-24 14:26:13 +02:00
Robbert van der Helm
f4f54029eb
Add a deactivation callback
...
This is the equivalent of initialize()
2022-05-24 13:05:06 +02:00
Robbert van der Helm
596b04af0a
Add preliminary support for auxiliary IO
...
The missing parts are allocating buffers for these busses, copying data
to those buffers, and adding methods to the ProcessContext to interact
with these inputs and outputs.
2022-05-23 17:13:49 +02:00
Robbert van der Helm
ad661c857c
Expose CLAP note ports extension for output-only
2022-05-22 23:16:49 +02:00
Robbert van der Helm
2a58b771f3
Remove old todo
2022-05-22 23:05:18 +02:00
Robbert van der Helm
d42fd41007
Buffers for zero channel plugins are always valid
2022-05-22 22:48:55 +02:00
Robbert van der Helm
937842d2c5
Suggest copying {Bus,Buffer}Config as needed
2022-05-22 13:39:19 +02:00
Robbert van der Helm
783dc2245e
Store the processing mode in BufferConfig
...
Instead of having a function on ProcessContext.
2022-05-22 13:33:38 +02:00
Robbert van der Helm
ee3b0bf8e6
Store the minimum buffer size in BufferConfig
2022-05-22 13:21:39 +02:00
Robbert van der Helm
e1d4be2a03
Change NON_AUTOMATABLE semantics and add HIDDEN
...
This now lets you have parameters that cannot be automated but that are
still changeable through the generic UI.
2022-05-22 12:37:30 +02:00
Robbert van der Helm
985db44503
Allow marking CLAP plugins as hard realtime
2022-05-22 01:01:59 +02:00
Robbert van der Helm
2ac013df64
Fix warnings
2022-05-22 00:59:04 +02:00
Robbert van der Helm
665108721a
Add a way to fetch the current processing mode
2022-05-22 00:58:53 +02:00
Robbert van der Helm
9601c9c0c1
Fix modulating non-smoothed parameters
...
And also get rid of duplicate code here.
2022-05-20 16:12:48 +02:00
Robbert van der Helm
4587c1405f
Move VST3 buffer initialization
...
This was left over from the last commit.
2022-05-18 19:41:43 +02:00
Robbert van der Helm
024307872a
Move VST3 initialization to set_active()
...
Because the host may still change the channel layouts at this point.
2022-05-18 19:29:48 +02:00
Robbert van der Helm
8239169aaf
Add some pointers for getting started to the docs
2022-05-13 15:08:05 +02:00
Robbert van der Helm
6fc0b2e148
Call Plugin::initialize() for runtime preset load
...
It's the plugin's responsibility to not do any realtime unsafe work here
if they support runtime preset loading.
2022-05-13 14:46:25 +02:00
Robbert van der Helm
e8764e7327
Use double precision for exponential step sizes
...
Otherwise you will get issues with rounding errors if someone ever tries
to have smoothing times over a second or so.
2022-05-12 13:50:45 +02:00
Robbert van der Helm
6a40cc9916
Remove debug print
2022-05-12 13:44:22 +02:00
Robbert van der Helm
f3d02f6210
Fix updated exponential smoothing
2022-05-12 13:44:01 +02:00
Robbert van der Helm
1fea9f94df
Deduplicate the smoother implementation
...
By introducing a new trait for conversion to and from floating point
numbers.
2022-05-12 13:34:02 +02:00
Robbert van der Helm
dc5dfb06c6
Reach 99.99% of target for exponential smoothing
...
Instead of 99.97%. Both numbers are not based on anything, but this
calculation makes more sense.
2022-05-12 13:21:32 +02:00
Robbert van der Helm
28c7ea4843
Rename ExponentialIIR -> Exponential
...
The suffix was added to denote that this could do some funny things
because of the snapping to the target value, but in practice that
snapping distance will likely be so tiny that it is likely not
noticeable.
2022-05-12 02:22:12 +02:00
Robbert van der Helm
222036b335
Get rid of unnecessary loop in ExponentialIIR
2022-05-12 01:56:16 +02:00
Robbert van der Helm
116d245149
Add an exponential smoothing style
...
Based on a one-pole IIR low pass filter that reaches 99.97% of the
target value in the designated time before snapping to that value. This
will be less efficient than the linear FIR smoothing style.
2022-05-12 01:35:01 +02:00
Robbert van der Helm
0355ed3168
Add flush-to-zero support for AArch64
2022-05-10 23:12:52 +02:00
Robbert van der Helm
c141314e30
Update for CLAP 0.25
2022-05-09 16:50:24 +02:00
Robbert van der Helm
55eeb689dd
Add a padding option to StftHelper
2022-05-08 02:12:37 +02:00
Robbert van der Helm
d0fcc9878e
Add a Blackman window function
2022-05-08 00:47:20 +02:00
Robbert van der Helm
77b9dd3404
Reuse hann_in_place() for hann() window function
2022-05-08 00:31:55 +02:00
Robbert van der Helm
ffe4642aa5
Implement IProcessContextRequirements
...
This is needed for VST 3.7. We claim to be a VST 3.6.14 plugin, but
implementing this anyways seems like the safe bet. I doubt many hosts
would, but under VST 3.7 hosts are allowed to not send any transport
information unless this interface is implemented.
2022-05-07 13:24:17 +02:00
Robbert van der Helm
f05e31d9e3
Sort additional VST3 interace implementations
...
The sensible order would be IComponent, IEditController,
IAudioProcessor, and then everything else.
2022-05-07 13:18:20 +02:00
Robbert van der Helm
a74d8264fb
Support CLAP transport information events
...
This will cause the buffer to be split when the transport information
changes.
2022-05-05 17:23:46 +02:00
Robbert van der Helm
7cb671319e
Properly define all predefined note expressions
...
This is apparently how you're supposed to do it in VST3. How would you
know? You'd ask Steinberg.
2022-05-05 15:35:14 +02:00
Robbert van der Helm
06c5e4b04a
Make parameter modulation stick after automation
...
This is how it's supposed to be implemented in CLAP.
2022-05-02 15:46:57 +02:00
Robbert van der Helm
10ae8e1d05
Enable modulation for CLAP parameters
...
Everything else has already been implemented, but this is kind of
important.
2022-05-02 11:51:56 +02:00
Robbert van der Helm
a4b251e5ef
Support monophonic modulation for CLAP plugins
...
This avoids the potential for state corruption caused by modulation and
modulation can be displayed differently on the GUI.
2022-05-01 19:05:51 +02:00
Robbert van der Helm
ddbaffc0bb
Add ParamMut method for setting modulation offset
...
This will be used in the CLAP wrapper to handle `CLAP_EVENT_PARAM_MOD`.
2022-05-01 19:03:04 +02:00
Robbert van der Helm
1d3ac1b2af
Move param setting functions to new ParamMut trait
...
This makes things slightly less confusing because these functions should
never be called from user code.
2022-05-01 18:45:35 +02:00
Robbert van der Helm
a17c63bf71
Add parameter getters for unmodulated values
...
This is needed to be able to support modulation events in CLAP. There an
offset gets applied to the parameter's actual current value. That way
GUIs don't have to move around when parameters are being modulated and
save states cannot get influenced by modulation.
2022-05-01 18:30:30 +02:00
Robbert van der Helm
6451555f85
Add missing #[inline] attribute
2022-05-01 17:56:20 +02:00
Robbert van der Helm
2026257561
Get rid of Default implementations on ranges
...
These also don't make any sense anymore and will likely lead to more
problems than they solve.
2022-05-01 17:40:53 +02:00
Robbert van der Helm
d6bdfd7391
Get rid of Default implementations for params
...
These don't make any sense anymore with the builder API.
2022-05-01 17:40:26 +02:00
Robbert van der Helm
cd628e80ee
Store normalized values on the param structs
...
This will be necessary to implement CLAP modulation later.
2022-05-01 17:34:59 +02:00
Robbert van der Helm
54d2a4cd2c
Hide param fields other than value and smoothed
...
Direct initialization was no longer recommended anyways since now you
need to keep the default value in sync. The next couple of commits will
add a normalized value field and two more fields to help with
modulation.
2022-05-01 17:08:08 +02:00
Robbert van der Helm
40b555bfbd
Document how values work in the Param trait
2022-05-01 16:40:18 +02:00
Robbert van der Helm
48d0f87e4c
Mark param value getters as inline
2022-05-01 16:40:16 +02:00
Robbert van der Helm
98876670f8
Re-export debug macros from the debug module
...
This makes it easy to import just the macros without having to use the
oldschool `#[macro_use] extern crate ...;` syntax.
2022-04-30 02:10:54 +02:00
Robbert van der Helm
3d454bfc9c
Don't process audio at all with invalid buffers
...
If the host does some kind of flush this way with num_samples > 0 but
without any outputs or with zero output channels then we should not try
to read from the now invalid pointers from the previous cycle.
2022-04-30 02:00:09 +02:00
Robbert van der Helm
ddc28eef5e
Clarify the VST3 output .take(num_outputs)
2022-04-30 01:52:53 +02:00
Robbert van der Helm
e35886c216
Move window function handling out of StftHelper
...
And apply the window function only once at the end of the process
function for the plugins that used it.
2022-04-28 17:20:39 +02:00
Robbert van der Helm
4fb67a720b
Add a todo for fallback DPI scale detection
2022-04-27 19:26:39 +02:00
Robbert van der Helm
b89b4dfbb2
Add a .previous_value() method to the smoothers
2022-04-27 17:43:40 +02:00
Robbert van der Helm
6185909ddf
Also safeguard against zero channel counts in CLAP
2022-04-27 17:06:19 +02:00
Robbert van der Helm
21e28fdca2
Handle hosts providing zero output channels
2022-04-27 16:52:30 +02:00
Robbert van der Helm
afde489bbf
Add a fixme for REAPER's broken bypass handling
2022-04-27 16:45:34 +02:00
Robbert van der Helm
76e7f67f3a
Add missing backtick
2022-04-27 15:16:52 +02:00
Robbert van der Helm
bb3175f68e
Return -> Returns at the start of a docstring
...
The imperative tense doesn't make any sense when the function is a mere
getter and doesn't actually perform a nontrivial task.
2022-04-26 19:39:51 +02:00
Robbert van der Helm
abe5a12461
Add a nih_dbg!() macro analog for dbg!()
2022-04-26 15:43:24 +02:00
Robbert van der Helm
dedbfebb71
Add todos about potential duplicate reset calls
2022-04-26 14:15:57 +02:00
Robbert van der Helm
4779991edf
Also move reset() call to process start for CLAP
...
So the behavior is consistent for CLAP and VST3.
2022-04-26 14:14:12 +02:00
Robbert van der Helm
4ac0c40812
Reset last processing status for CLAP on start
...
Just like we're doing in the VST3 wrapper.
2022-04-26 14:10:00 +02:00
Robbert van der Helm
582ab50e58
Move VST3 Plugin::reset() call to set_processing()
...
This lets the host reset buffers the intended way.
2022-04-26 13:42:32 +02:00
Robbert van der Helm
f855a60c57
Fix rustdoc link in Plugin::reset()
2022-04-26 13:37:53 +02:00
Robbert van der Helm
7c5aa9069b
Simplify lifetime bounds
2022-04-24 20:03:30 +02:00
Robbert van der Helm
04c5780e4a
Implement state saving/loading for standalone
2022-04-24 19:46:51 +02:00
Robbert van der Helm
566095802c
Decouple state functions from CLAP/VST3 wrapper
...
This should also be usable with a plain `params` object, since we don't
need hashes in the standalone wrapper.
2022-04-24 19:46:07 +02:00
Robbert van der Helm
9acd312768
Parmaeters are not real, they can't hurt you
2022-04-24 19:46:07 +02:00
Robbert van der Helm
8714310468
Silence dead code warnings in standalone wrapper
...
These were kept in as a reminder, but since standalone has been merged
into master these should be silenced as there are relevant TODOs for the
missing features in place already.
2022-04-24 18:18:11 +02:00
Robbert van der Helm
084d34fe5c
Set up the logger for the standalone target
2022-04-24 15:50:17 +02:00
Robbert van der Helm
60593e7cc3
Close standalone when process returns an error
...
For this to work the resize mutex has been replaced with a channel for
sending tasks.
2022-04-24 15:48:42 +02:00
Robbert van der Helm
5d481e59f1
Call the process function in the standalone target
...
Although there's no functional backend yet.
2022-04-24 15:48:42 +02:00
Robbert van der Helm
ae24ed4c4d
Move standalone audio thread to a function
2022-04-24 15:48:42 +02:00
Robbert van der Helm
19d4b73039
Implement parameter changes for standalone target
...
Changing parameters from an editor now works just like in the other
targets.
2022-04-24 15:48:42 +02:00
Robbert van der Helm
9e40ec11fe
Print a message about IO being unimplemented
2022-04-24 15:48:42 +02:00
Robbert van der Helm
8cb763246b
Add an audio thread for the standalone target
2022-04-24 15:48:42 +02:00
Robbert van der Helm
81e56dd018
Abstract the IO backend for the standalone wrapper
2022-04-24 15:48:42 +02:00
Robbert van der Helm
8ba60eeab9
Implement resizing for standalone editor window
2022-04-24 15:48:42 +02:00
Robbert van der Helm
da86d1c6b1
Open a basic baseview window for standalone target
2022-04-24 15:48:41 +02:00
Robbert van der Helm
6c84fec09e
Add a (not yet functional) standalone run function
2022-04-24 15:48:05 +02:00
Robbert van der Helm
f838062d72
Don't use an Arc for the CLAP editor
2022-04-24 15:48:05 +02:00
Robbert van der Helm
e90bacffb5
Print initialization errors in standalone
2022-04-24 15:48:05 +02:00
Robbert van der Helm
261594a478
Initialize the standalone target
2022-04-24 15:48:05 +02:00
Robbert van der Helm
cf3745a4e1
Somewhat clarify initialize_block_smoothers()
...
This function is meant to be called by the plugin itself, it only lives
in the plugin trait to make using it more convenient.
2022-04-24 15:48:05 +02:00
Robbert van der Helm
42548ef5d1
Update standalone target todos
2022-04-24 15:48:05 +02:00
Robbert van der Helm
96ec1da037
Export the standalone target for gain_gui_vizia
2022-04-24 15:48:05 +02:00
Robbert van der Helm
f3db4a9ed0
Add a (not yet functional) standalone exporter
2022-04-24 15:48:05 +02:00
Robbert van der Helm
532ffca768
Permit allocations in debug and tracing messages
...
Otherwise debugging becomes a lot more difficult when using the
assert_no_alloc feature.
2022-04-24 15:43:23 +02:00
Robbert van der Helm
f895a27136
Simplify known VST3 note expression match
2022-04-24 15:31:02 +02:00
Robbert van der Helm
54bab5ff6d
Add an nih_trace!() macro
2022-04-24 15:30:38 +02:00
Robbert van der Helm
3264bee810
Include locations in assertion failure messages
2022-04-24 15:27:59 +02:00
Robbert van der Helm
015c554d79
Register the loggers for VST3 and CLAP plugins
2022-04-24 15:24:35 +02:00
Robbert van der Helm
5ae0bee3ee
Use the new logger for the debug macros
2022-04-24 15:20:25 +02:00
Robbert van der Helm
88260c55c7
Log on lower verbosity in release builds
...
This will also strip away information.
2022-04-24 15:08:55 +02:00
Robbert van der Helm
3b0291b4f5
Add function for setting up file and windbg logs
...
And also writing panics to those logs.
2022-04-24 15:08:48 +02:00
Robbert van der Helm
a79099f573
Work around Bitwig VST3 note expressions bug
...
Bitwig will only send these note expression events if the plugin claims
to support at least one custom note expression type, and if it returns
`kResultOk` on `INoteExpressionController::get_note_expression_info()`
when the expression ID is equal to the note expression type (even though
these are out of range, since this index argument is supposed to be a
linear index from `0..count`).
2022-04-23 15:00:30 +02:00
Robbert van der Helm
3361c4454b
Define constants for VST3 note expression types
2022-04-23 14:49:19 +02:00
Robbert van der Helm
83f9ce3608
Add a todo for a standalone target
2022-04-21 21:30:04 +02:00
Robbert van der Helm
b88707769a
Add a way to find out the current plugin API
2022-04-21 21:27:36 +02:00
Robbert van der Helm
2bc77ed691
Work around vst3-sys not allowing #[cfg()] fields
2022-04-20 20:44:07 +02:00
Robbert van der Helm
6ae05eb01b
Log assertion failure if a VST3 resize is denied
2022-04-20 20:35:44 +02:00
Robbert van der Helm
8966ca5280
Fix C++ interface pointer transmutes
...
These are supposed to be pointers to vtable pointers.
2022-04-20 20:25:59 +02:00
Robbert van der Helm
5d343f7873
Also perform resize requests using the run loop
2022-04-20 19:52:02 +02:00
Robbert van der Helm
98924a5728
Use the host's run loop to handle VST3 tasks
2022-04-20 19:51:26 +02:00
Robbert van der Helm
37b62e4278
Add an IRunLoop event runner on Linux
2022-04-20 19:44:03 +02:00
Robbert van der Helm
4fa54ceabe
Add an object for implementing IEventLoop
...
We can't do this directly on WrapperView because of vst3-sys
limitations.
2022-04-20 17:18:41 +02:00
Robbert van der Helm
f3bb552cfe
Get a reference to the host's IRunLoop
2022-04-20 17:03:15 +02:00
Robbert van der Helm
55aabcea31
Add a note for PolyPressure + MPE
2022-04-20 16:48:37 +02:00
Robbert van der Helm
8eaecb6e5c
Add a way to completely exclude the vst3-sys dep
...
Because technically you might still include GPL'd symbols even if you
wouldn't use the `nih_export_vst3!()` macro.
2022-04-15 16:14:42 +02:00
Robbert van der Helm
0fd9a68146
Move u16strlcpy to the VST3 wrapper utils module
2022-04-15 16:13:14 +02:00
Robbert van der Helm
7b24dea719
Clarify param_map()
docstring
2022-04-13 20:20:27 +02:00
Robbert van der Helm
877eeadc7f
Add a todo for implementing FTZ for AArch64
2022-04-12 02:08:41 +02:00
Robbert van der Helm
54db43f48d
Fix c_char usage on AArch64
...
Apparently char is unsigned on AArch64.
2022-04-12 02:06:29 +02:00
Robbert van der Helm
3c69fb72cf
Make parameter names owned
...
That way you can generate parameters with custom `Params`
implementations.
2022-04-11 23:27:36 +02:00
Robbert van der Helm
ad50852aeb
Fix CLAP event output struct sizes
2022-04-11 20:53:25 +02:00
Robbert van der Helm
5e486ab3d9
Explicitly handle 0 channel IO
...
Instead of treating it as a flush. This is needed for note effect
plugins.
2022-04-11 20:46:51 +02:00
Robbert van der Helm
e0c5a3f5e4
Fix default accepts_bus_config implementation
...
This should use the constants.
2022-04-11 20:46:51 +02:00
Robbert van der Helm
65d87f87ed
Add a way to output note events
...
This supports all note events supported by NIH-plug, and both CLAP and
VST3.
2022-04-11 20:46:51 +02:00
Robbert van der Helm
1f8db9d9c2
Mention NoteEvents being zero indexed
2022-04-11 19:48:07 +02:00
Robbert van der Helm
8219d5f2b8
Add an example for next_event()
2022-04-11 18:25:01 +02:00
Robbert van der Helm
e4606918e7
Rename next_midi_event() to next_event()
2022-04-11 18:15:14 +02:00
Robbert van der Helm
329d1a63ab
Use $crate in the macros to refer to other macros
...
So you don't need to import all of them for them to work.
2022-04-11 17:44:54 +02:00
Robbert van der Helm
4e5afc152a
Add a basic docstring to the Params module
2022-04-11 17:38:20 +02:00
Robbert van der Helm
1e12fbe3f5
Add a feature flag to enable doc_auto_cfg
2022-04-11 16:41:09 +02:00
Robbert van der Helm
c3b1ded35b
Fix links in docs
2022-04-11 16:23:34 +02:00
Robbert van der Helm
84d91d8826
Update dependencies for CLAP
...
The signature for this function was incorrect.
2022-04-11 16:18:39 +02:00
Robbert van der Helm
5b5bbf19f7
Prefix all polyphonic expressions with Poly
...
Makes it much more obvious that they're polyphonic at a glance.
2022-04-11 15:57:27 +02:00
Robbert van der Helm
63ad2b2cb8
Parse redundant CLAP MIDI events just in case
2022-04-11 15:56:33 +02:00
Robbert van der Helm
476dfb9f81
Fix compilation failure from f0303fe
2022-04-09 12:12:34 +02:00
Robbert van der Helm
33c2d8288b
Don't warn on parameter hash overflow
...
But do mention overflows in the duplicate parameter warning.
2022-04-09 11:47:23 +02:00
Robbert van der Helm
f0303fed4b
Remove now unnecessary input events sort
...
This was added in anticipation of having to merge the parameter change
MIDI CC events into the events stream, but VST3 threw a curveball and
now we need to do the sorting one step earlier.
2022-04-09 11:32:20 +02:00
Robbert van der Helm
52d7b47a24
Improve block splitting transport information
...
Don't do any recomputations at the start of the buffer, and also
recompute the bar positions and numbers.
2022-04-08 23:10:38 +02:00
Robbert van der Helm
8db35aaf9d
Remove notes about VST3 support for events
2022-04-08 20:59:46 +02:00
Robbert van der Helm
c082085711
Remove todo about adding more event types
2022-04-08 20:57:52 +02:00
Robbert van der Helm
1a8f81e4c0
Support MIDI CCs, aftertouch, pitch bend for VST3
...
This required rewriting the way events and parameter changes are handled
for VST3 by putting them all in a single sorted array, because we can
now no longer read directly from the host's events list because we also
need to mix these new generated MIDI CC events in with it.
2022-04-08 20:53:32 +02:00
Robbert van der Helm
059c733b78
Handle predefined VST3 note expressions
2022-04-08 17:49:13 +02:00
Robbert van der Helm
2a4a61947f
Update reasoning for clearing last param ID bit
2022-04-08 00:02:28 +02:00
Robbert van der Helm
9740246d0a
Always sort VST3 note events in prep for CCs
...
So we won't forget to add this then. CC messages come from the parameter
change queues while regular note event messages come from another queue,
so they need to be merged into one sorted queue.
2022-04-07 23:57:56 +02:00
Robbert van der Helm
4abefe23cf
Mention lack of VST3 support for new note events
2022-04-07 23:37:49 +02:00
Robbert van der Helm
24837d1552
Implement full MIDI support for CLAP
2022-04-07 23:28:31 +02:00
Robbert van der Helm
0b3a5cd297
Support all of the CLAP expression types
...
These aren't supported for VST3 yet, we'll need to register note
expression controllers for that.
2022-04-07 21:17:31 +02:00
Robbert van der Helm
b9a10455bb
Add polyphonic aftertouch support
2022-04-07 20:55:31 +02:00
Robbert van der Helm
1141616466
Replace ACCEPTS_MIDI bool with new enum
...
So we can gate future MIDI CC support behind an additional option since
this involves more work on the VST3 side.
2022-04-07 20:27:37 +02:00
Robbert van der Helm
8f359feadb
Store velocity as a float
...
Instead of converting this to a 0-127 value. We may be throwing away
precision otherwise.
2022-04-07 20:12:30 +02:00
Robbert van der Helm
2af3f84416
Rename State to PluginState
...
Now that it is part of the public API.
2022-04-07 17:39:34 +02:00
Robbert van der Helm
84bac0a47c
Spool param rescan call to the GUI thread
...
Otherwise the CLAP example host std::terminates, and we can also reuse
the existing restart task for the VST3 wrapper.
2022-04-07 17:25:12 +02:00
Robbert van der Helm
d0064f87d6
Add state saving and restoring through GuiContext
...
While preventing any possible data races.
2022-04-07 17:19:24 +02:00
Robbert van der Helm
7ca855b3fc
Make State cloneable
...
This is needed for user preset support.
2022-04-07 16:50:02 +02:00
Robbert van der Helm
083885a40c
Rework Params trait API with Arc instead of Pin
...
This is a breaking change requiring a small change to plugin
implementations.
The reason why `Pin<&dyn Params>` was used was more as a hint to
indicate that the object must last for the plugin's lifetime, but `Pin`
doesn't enforce that. It also makes the APIs a lot more awkward.
Requiring the use of `Arc` fixes the following problems:
- When storing the params object in the wrapper, the `ParamPtr`s are
guaranteed to be stable.
- This makes it possible to access the `Params` object without acquiring
a lock on the plugin, this is very important for implementing
plugin-side preset management.
- It enforces immutability on the `Params` object.
- And of course the API is much nicer without a bunch of unsafe code to
work around Pin's limitations.
2022-04-07 15:31:46 +02:00
Robbert van der Helm
7cc05fce9a
Use crate instead of super for prelude reexports
2022-04-07 14:13:03 +02:00
Robbert van der Helm
54371fb488
Expose the State object
...
So we can later allow plugins to save and restore state from their GUI
this way.
2022-04-07 14:12:53 +02:00