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