1
0
Fork 0
Commit graph

858 commits

Author SHA1 Message Date
Simon Leiner 0bb5662770 Remove dead code 2022-09-29 15:13:43 +02:00
Simon Leiner 2402eada05 Fix typos in productive cod 2022-09-29 15:13:43 +02:00
Simon Leiner 67808fd9ae Fix typos in test names 2022-09-29 15:13:43 +02:00
Simon Leiner 0caef90b1a Fix typos in comments 2022-09-29 15:13:43 +02:00
Simon Leiner f4995abf88 Fix typos in documentation 2022-09-29 15:13:43 +02:00
Simon Leiner 958767acf2 Fix off-by-1 error in VST3 parameter range
Running the VST3 SDK Validator [1] for the midi_inverter plugin shows
one failing test:

    [Scan Parameters]
    Info:  ===Scan Parameters ====================================
    Info:  This component exports 2080 parameter(s)
    Info:     Parameter 000 (id=2147481569): [title="MIDI Ch. 1 CC 0"] [unit=""] [type = F, default = 0.000000, unit = 0]
    Info:     Parameter 001 (id=2147481570): [title="MIDI Ch. 1 CC 1"] [unit=""] [type = F, default = 0.000000, unit = 0]
    Info:     Parameter 002 (id=2147481571): [title="MIDI Ch. 1 CC 2"] [unit=""] [type = F, default = 0.000000, unit = 0]

[...]

    Info:     Parameter 2077 (id=2147483646): [title="MIDI Ch. 16 CC 127"] [unit=""] [type = F, default = 0.000000, unit = 0]
    Info:     Parameter 2078 (id=2147483647): [title="MIDI Ch. 16 Channel Pressure"] [unit=""] [type = F, default = 0.000000, unit = 0]
    ERROR: =>Parameter 2079 (id=-2147483648): Invalid Id!!!
    [XXXXXXX Failed]

The relevant part of the test code [2] looks like this:

    int32 paramId = paramInfo.id;
    if (paramId < 0)
    {
        // Error
    }

This shows that the parameter ID must be INT32_MAX = (1 << 31) - 1 at
most. As far as I see, even Steinberg's own documentation [3] gets
this wrong.

[1]: 55d7ed3c6a/samples/vst-hosting/validator
[2]: 55d7ed3c6a/source/vst/testsuite/general/scanparameters.cpp (L100)
[3]: https://steinbergmedia.github.io/vst3_dev_portal/pages/Technical+Documentation/Parameters+Automation/Index.html
2022-09-29 00:24:41 +02:00
Robbert van der Helm fae7050113 Add helper to compensate smoother for oversampling 2022-09-25 17:37:25 +02:00
Robbert van der Helm fff713d066 Fix resizing with HiDPI standalones 2022-09-22 19:36:43 +02:00
Robbert van der Helm 963d1bd14f Fix bar start position calculation 2022-09-12 14:17:06 +02:00
Robbert van der Helm b883a611ab Fix resizing aux input storage on buffer size
This nested `resize_with()` of course wouldn't resize the inner vectors
of the outer ones were already the correct size.
2022-09-11 16:41:31 +02:00
Robbert van der Helm 4c9a2726f3 Fix s2v_bool_bypass() 2022-09-07 20:43:47 +02:00
Robbert van der Helm cf72a796f4 Fix GUI context state loading in standalones 2022-09-07 18:38:07 +02:00
Robbert van der Helm 910a90d47a Respect assert_process_allocs in standalones
This fixes #29.
2022-09-07 18:29:58 +02:00
Robbert van der Helm 591f3710bd Add missing reset call to standalone init
The plugin versions also do this, and the docs mention that this always
happens.
2022-09-07 18:23:36 +02:00
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