1
0
Fork 0
Commit graph

697 commits

Author SHA1 Message Date
Robbert van der Helm 330d6d1359 Fix phase response in the Crossover plugin
Didn't have time to do this, now I do. This nudges the phases from the
lower bands to match the higher bands, making the frequency response
magnitudes sum to unity again.
2022-06-02 14:30:48 +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 6996fdaed1 Update features names for CLAP 0.26 2022-06-02 00:52:13 +02:00
Robbert van der Helm c9332d332b Somewhat mitigate phasing in crossovers 2022-05-29 16:57:39 +02:00
Robbert van der Helm ebe2b24146 Add the actual crossovers to the Crossover plugin
That feeling when you write a whole bunch of garbage in one without
testing it go and it actually works.
2022-05-29 16:21:36 +02:00
Robbert van der Helm 33120ecfe7 Add biquad low- and high pass filters
We'll use these for LR24 crossovers.
2022-05-29 14:54:40 +02:00
Robbert van der Helm 99ba25d1bd Enable simd for the Crossover plugin 2022-05-29 14:54:28 +02:00
Robbert van der Helm c83fb2863e Clear the main output in Crossover 2022-05-29 14:43:15 +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 c1d72f0e80 Add parameters for the Crossover plugin 2022-05-29 14:25:48 +02:00
Robbert van der Helm 87813fb9dc Add an empty crossover plugin 2022-05-29 13:42:45 +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 c555aff768 Fix plugin names in readmes
Closes #7.
2022-05-26 13:32:30 +02:00
Robbert van der Helm 7fce56d863 Actually add the SOS morse code to Safety Limiter 2022-05-26 01:07:19 +02:00
Robbert van der Helm df30662071 Add an equal power fade to Safety Limiter 2022-05-26 00:47:41 +02:00
Robbert van der Helm 9ab5af0027 Add a fadeout start to Safety Limiter 2022-05-25 00:59:46 +02:00
Robbert van der Helm 3e5393b236 Make the Safety Limiter threshold automatable
Bitwig doesn't like it if it isn't automatable.
2022-05-25 00:44:01 +02:00
Robbert van der Helm c07942cfc3 Reset Safety Limiter properly 2022-05-25 00:43:19 +02:00
Robbert van der Helm 3ba2a0807b Make Safety Limiter danker 2022-05-25 00:38:02 +02:00
Robbert van der Helm 96dc409a0f Add a sine wave to Safety Limiter
This needs to be upgraded to full Morse status
2022-05-25 00:35:30 +02:00
Robbert van der Helm ccb8422a9c Add a morse-less version of Safety Limiter 2022-05-25 00:18:43 +02:00
Robbert van der Helm c95af5f83e Don't engage Safety Limiter while bouncing 2022-05-25 00:06:32 +02:00
Robbert van der Helm a3fc65e91c Add boilerplate for Safety Limiter 2022-05-24 23:57:18 +02:00
Robbert van der Helm 1f0094c920 Link plugin downloads in readme 2022-05-24 23:56:21 +02:00
Robbert van der Helm 535ae1260e Remove now unnecessary explicit dyn casts
Rust-analyzer used to not infer this, seems like now it does.
2022-05-24 23:55:48 +02:00
Robbert van der Helm 487ff3d566 Don't let the sine test tone plugin sleep 2022-05-24 13:17:40 +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 0459405ced Remove STFT example readme
This hasn't been using fftw for a while now so it's no longer relevant.
2022-05-20 03:23:57 +02:00
Robbert van der Helm 3233174292 Add missing parts of the disclaimer
Courtesy of The Simpsons.
2022-05-14 00:53:09 +02:00
Robbert van der Helm 743998e388 Add a second just as bad mode to Puberty Simulator 2022-05-09 16:49:43 +02:00
Robbert van der Helm c6acdfa020 Add a pitch shifting mode parameter
I experimented with some other equally broken but broken in slightly
different ways pitch shifting algorithms that also sound kind of fun.
2022-05-09 16:29:46 +02:00
Robbert van der Helm 081487fdcb Adjust windowing behavior in Puberty Simulator
We should indeed be windowing twice like we did before. A squared Hann
window doesn't work at 2x overlap, so that option has been removed. The
gain compensation is now also correct.
2022-05-09 16:22:26 +02:00
Robbert van der Helm d589f81228 Change last to latest 2022-05-09 02:47:29 +02:00
Robbert van der Helm c5841cbe33 Add missing latency compensation in STFT example
The latency introduced by the linear phase filter wasn't compensated
for.
2022-05-08 03:14:56 +02:00
Robbert van der Helm 6400e2d71d Fix gain compensation in new STFT example 2022-05-08 02:25:44 +02:00
Robbert van der Helm 3fe24e7dc6 Use more typical convolution FFT in STFT example 2022-05-08 02:22:36 +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 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 58d7dc034c Fix gain compensation in STFT examples 2022-04-28 17:24:35 +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 dd770b6bde Alter Loudness War Winner disclaimer
This is from a copy pasta, but I don't want it to get political.
2022-04-27 20:08:38 +02:00
Robbert van der Helm c4b4cf95d4 Add a copy of the GPL to Loudness War Winner 2022-04-27 20:06:41 +02:00
Robbert van der Helm 81bd380569 Fix typo in Loudness War Winner's readme 2022-04-27 19:43:18 +02:00
Robbert van der Helm b3d2b79284 Win the loudness war harder with band-pass filters 2022-04-27 17:59:54 +02:00
Robbert van der Helm f49189b424 Add a fadeout after winning the loudness war 2022-04-27 16:07:19 +02:00
Robbert van der Helm b2ac93f255 Win the loudness war 2022-04-27 15:37:17 +02:00
Robbert van der Helm d413d11694 Use the predefined gain formatters for Crisp 2022-04-27 15:12:31 +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 96ec1da037 Export the standalone target for gain_gui_vizia 2022-04-24 15:48:05 +02:00
Robbert van der Helm 00fff75c5e Rename MIDI inverter example plugin directory
To match the package name.
2022-04-18 02:33:29 +02:00
Robbert van der Helm cab0af5153 Add explicit dyn trait casts
So Rust Analyzer stops complaining.
2022-04-15 19:31:38 +02:00
Robbert van der Helm c917114020 Rename the gain GUI examples to match package name 2022-04-14 23:53:14 +02:00
Robbert van der Helm bcc8453861 Update MIDI inverter comment 2022-04-11 20:55:43 +02:00
Robbert van der Helm 49f1a45b76 Add a MIDI effect that inverts all signals
To demonstrates the API. The CLAP version does not seem to be able to
output anything other than basic notes in Bitwig Studio 4.2.3.
2022-04-11 20:47:00 +02:00
Robbert van der Helm 97b2c9a2b1 Replace sine loop 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 eb5b81fcac Remove MidiInput::None from nontrivial examples
Since it's the default, makes the examples a bit shorter.
2022-04-11 18:02:55 +02:00
Robbert van der Helm e74172b67b Split build and package workflows 2022-04-11 16:11:42 +02:00
Robbert van der Helm 25dd0d9bef Control sine level through velocity and aftertouch 2022-04-08 17:44:05 +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 56e9cd54c1 Pass the GuiContext to vizia editors
There's no clean way to expose the state save/restore functionality
through events.
2022-04-07 16:14:34 +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 d9b018b125 Fix a very important typo 2022-03-29 03:16:55 +02:00
Robbert van der Helm 8ecc30e399 Mark SIMD conversion functions as always inline 2022-03-29 03:14:40 +02:00
Robbert van der Helm 6dd11561c5 Add resize handles to all vizia GUIs 2022-03-29 00:49:31 +02:00
Robbert van der Helm 4195105e43 Replace FFTW in Diopser with realfft 2022-03-28 18:02:26 +02:00
Robbert van der Helm 2211232ed1 Use realfft for Puberty Simulator 2022-03-28 17:51:36 +02:00
Robbert van der Helm b4ff09ca33 Get rid of unnecessary RustFFT scratch buffer 2022-03-28 17:45:46 +02:00
Robbert van der Helm 80c3fb8d51 Swap fftw in the stft example out for realfft
The FFTW bindings can't statically link on Windows.
2022-03-28 17:13:23 +02:00
Robbert van der Helm f37974448d Change naming convention for formatters
This still isn't idea, but at least it's less ambiguous than it was
before this.
2022-03-27 03:43:39 +02:00
Robbert van der Helm f1f2a8a06e Rename the modes in Crisp to be more fitting 2022-03-25 15:51:40 +01:00
Robbert van der Helm d35276437d Patch vizia to not require pub for lenses 2022-03-23 23:29:49 +01:00
Robbert van der Helm 0655ce35d8 Hide Diopser's very important parameter 2022-03-23 13:20:16 +01:00
Robbert van der Helm 31a84d51dd Make the Crisp editor slightly taller 2022-03-22 19:50:40 +01:00
Robbert van der Helm b6bbf06170 Fix Crisp label positioning 2022-03-22 19:49:05 +01:00
Robbert van der Helm 57fb259104 Use a vizia generic UI for Crisp 2022-03-22 18:53:32 +01:00
Robbert van der Helm 4086ff724f Fix casing on GenericUi 2022-03-22 18:50:50 +01:00
Robbert van der Helm d9003ca2d1 Don't use a ScrollView for Dipser's generic editor 2022-03-22 18:49:46 +01:00
Robbert van der Helm 101075795d Use a vizia generic UI for Diopser 2022-03-22 18:32:02 +01:00
Robbert van der Helm f85c9c8d82 Remove unused param from vizia gain GUI example 2022-03-21 23:57:12 +01:00
Robbert van der Helm fe3ed360a3 Revert Gain GUI slider to the Centered style 2022-03-21 23:47:00 +01:00
Robbert van der Helm d84b456edb Draw ticks for the vizia PeakMeter
They are just slightly blurry.
2022-03-21 23:45:55 +01:00
Robbert van der Helm b8ff936b21 Add part of a simple peak meter widget for vizia 2022-03-21 22:28:54 +01:00
Robbert van der Helm c2b530af36 Also use f32_hz_then_khz in Crisp 2022-03-21 14:51:51 +01:00
Robbert van der Helm 5b2f8a417b Use the f32_hz_then_khz formatter 2022-03-21 14:44:26 +01:00
Robbert van der Helm 30b913e159 Don't use direct Param initialization in exmaples
Since you now also need to specify the default field you probably
shouldn't use this anymore.
2022-03-21 13:29:03 +01:00
Robbert van der Helm f084f14095 Refactor GUIs to use param's own default value
This removes the need to pass a lot of these `ParamSetter`s and
`GuiContext`s around. We also don't need explicit events to reset a
parameter anymore since you can get this information from the parameter
itself.
2022-03-21 13:11:36 +01:00
Robbert van der Helm a844051054 Store defaults on Param objects
And add methods for querying them.
2022-03-21 12:49:59 +01:00
Robbert van der Helm 1a9db3ab8e Temporarily add more widgets to vizia Gain GUI 2022-03-20 01:23:44 +01:00
Robbert van der Helm 629619256e Add some text entry handling for vizia ParamSlider
This will need to wait for https://github.com/vizia/vizia/issues/85 as
right now it's not yet possible to get this to behave correctly (other
than perhaps sending manual WindowEvents on the next frame).
2022-03-19 15:29:10 +01:00
Robbert van der Helm de80c53c14 Mention the -1 pixel offset 2022-03-19 01:22:38 +01:00
Robbert van der Helm aed3c14229 Add the ParamSlider to the VIZIA Gain GUI 2022-03-19 01:17:36 +01:00
Robbert van der Helm e2c691ba55 Add default styling for nih_plug_vizia GUIs 2022-03-18 19:12:38 +01:00
Robbert van der Helm ed3a17bf33 Update vizia
Now setting a font size on the `*` selector works.
2022-03-18 12:28:26 +01:00
Robbert van der Helm 87d9136b6f Use thinner fonts for vizia
Because they look like they're one weight too heavy.
2022-03-18 01:37:24 +01:00
Robbert van der Helm 2c62b13ba5 Add the start of a Gain GUI port to vizia 2022-03-18 01:28:18 +01:00
Robbert van der Helm fb5ce3c670 Add back the egui Gain GUI version 2022-03-17 23:25:42 +01:00
Robbert van der Helm dc9f1bff45 Rename Gain GUI to Gain GUI (iced) 2022-03-17 23:22:47 +01:00
Robbert van der Helm 581e5911fc Add parameter groups with #[nested = "Group Name"] 2022-03-16 17:04:38 +01:00
Robbert van der Helm aa3e6282b7 Use the new iced generic UI for Crisp 2022-03-16 01:30:29 +01:00
Robbert van der Helm 1ddc305be5 Use the new iced generic UI for Diopser
This handles a bit nicer than the egui UI.
2022-03-16 01:20:13 +01:00
Robbert van der Helm c82e1afddb Add a note about NaNs 2022-03-16 01:15:15 +01:00
Robbert van der Helm 4d58df1e08 Add an iced peak meter widget 2022-03-15 17:06:47 +01:00
Robbert van der Helm 01e7998c03 Revert Diopser back to egui
I should probably first redo the Gain GUI example with vizia before
deciding on a final GUI framework for Diopser.
2022-03-15 13:54:12 +01:00
Robbert van der Helm 9bfc44d787 Use Noto Sans Light for the GUI title 2022-03-14 16:05:39 +01:00
Robbert van der Helm ee9e3701f3 Implement dragging for the parameter slider 2022-03-14 14:17:06 +01:00
Robbert van der Helm 4e9ee27c19 Finish the drawing for the iced param slider 2022-03-14 13:17:19 +01:00
Robbert van der Helm 291abb8bcf Add a placeholder for a parameter slider widget 2022-03-14 00:53:22 +01:00
Robbert van der Helm 664267745a Replace gain_gui's editor with an iced stub 2022-03-13 21:59:13 +01:00
Robbert van der Helm 130ef8ac0e Add a button that sets the filter count
Just to test the reactivity.
2022-03-13 18:44:36 +01:00
Robbert van der Helm 9f8bdfcfc4 Add a dedicated message and handler for parameters
Parameter widgets can send these messages to update parameters.
2022-03-13 15:09:04 +01:00
Robbert van der Helm 1213d59ae7 Use new IcedEditor trait that forwards GuiContext 2022-03-13 01:07:41 +01:00
Robbert van der Helm ab1e170f74 Replace Diopser egui GUI with empty iced GUI 2022-03-12 23:28:18 +01:00
Robbert van der Helm 1559afe080 Enable sample accurate automation in Diopser 2022-03-10 20:32:36 +01:00
Robbert van der Helm 48ff012cea Document sample accurate automation in the example 2022-03-10 20:19:03 +01:00
Robbert van der Helm 36d54edae7 Add a constant for sample accurate automation 2022-03-10 18:57:17 +01:00
Robbert van der Helm 3c5aff1ec6 Rename Buffer::iter_mut() to iter_samples()
Since there's also an iter_blocks(). This is consistent with the new
Block method.
2022-03-09 20:11:37 +01:00
Robbert van der Helm 76394731a6 Optimize branching in Crisp 2022-03-09 19:42:13 +01:00
Robbert van der Helm 48ed39269d Add a wet-only control to Crisp 2022-03-09 19:38:57 +01:00
Robbert van der Helm 9fc5b048ad Iterate in blocks in Crisp
I want to add a wet-only version, and this can help reduce per-sample
branching a bit.
2022-03-09 19:35:26 +01:00
Robbert van der Helm 2a30df057c Move filter frequency limits to constants 2022-03-09 18:26:55 +01:00
Robbert van der Helm 9bb46fc377 Add a noise low-pass filter for Crisp 2022-03-09 18:25:27 +01:00
Robbert van der Helm cdad01063e Fix default Crisp HPF frequency value 2022-03-09 16:29:29 +01:00
Robbert van der Helm 4d64e300e4 Increase Crisp editor width so all labels fit 2022-03-09 15:21:41 +01:00
Robbert van der Helm f9446644aa Remove unit from Crisp filter frequency params 2022-03-09 15:17:49 +01:00
Robbert van der Helm 4105a887a8 Add a generic UI for Crisp 2022-03-09 15:15:09 +01:00
Robbert van der Helm 57ca8a5ccb Add a pre-RM LPF to Crisp
This makes the effect more usable with high frequency inputs.
2022-03-09 15:11:41 +01:00
Robbert van der Helm 92aac6e471 Add a high pass filter to the Crisp noise 2022-03-09 13:48:23 +01:00
Robbert van der Helm bda8ecfb23 Add a biquad for low- and high-pass filters 2022-03-09 13:24:57 +01:00
Robbert van der Helm a08624209c Fix GPL copyright headers 2022-03-09 13:17:26 +01:00
Robbert van der Helm 305a3f922b Fix comments in the Crisp plugin 2022-03-09 00:51:52 +01:00
Robbert van der Helm 8f45ef84ee Change Crisp keyword order
Since Bitwig uses the first relevant one as the category.
2022-03-09 00:29:46 +01:00
Robbert van der Helm 919eb7e5e6 Remove now unused include 2022-03-09 00:27:39 +01:00
Robbert van der Helm 3a4f8abb4b Increase the default Crisp amount 2022-03-09 00:05:37 +01:00
Robbert van der Helm 6072eb103d Add a stereo control parameter for Crisp 2022-03-09 00:03:35 +01:00
Robbert van der Helm e8301f6c9d Add back symmetrical AM 2022-03-08 23:46:05 +01:00
Robbert van der Helm 55315fb7f3 Add an output gain parameter 2022-03-08 23:30:12 +01:00
Robbert van der Helm 792e9469b5 AM only the positive ranges
This is what the original Fake Distortion preset did.
2022-03-08 23:20:30 +01:00
Robbert van der Helm 46901bf5c9 Add a basic version of Crisp 2022-03-08 21:10:36 +01:00
Robbert van der Helm 4cca7af930 Make the PCG implementation const compatible 2022-03-08 20:51:01 +01:00
Robbert van der Helm 817ff72265 Add a PCG implementation for pcg32i and floats 2022-03-08 20:42:59 +01:00
Robbert van der Helm 6bfc4ab76f Add a basic sketch for Crisp 2022-03-08 19:02:21 +01:00
Robbert van der Helm 2c6f65a342 Add formatters for percentages 2022-03-08 18:45:18 +01:00
Robbert van der Helm 24f3593de0 Move order conversion to formatters module 2022-03-08 18:31:20 +01:00
Robbert van der Helm bb341fdf50 Add an empty plugin for Crisp 2022-03-08 18:03:38 +01:00
Robbert van der Helm ae9730ece4 Remove mono tag from Diopser 2022-03-08 17:38:46 +01:00
Robbert van der Helm be39e19365 Allow FFTW to destroy input arrays
Since they're scratch buffers anyways.
2022-03-08 13:50:45 +01:00
Robbert van der Helm da1e850722 Avoid allocations when switching between plans 2022-03-08 13:27:16 +01:00
Robbert van der Helm 6e1b4cf37f Increase skewed pitch range
Sicne +/- 1 is more or less the usable range.
2022-03-08 12:51:08 +01:00
Robbert van der Helm fd8bd025c8 Implement the reset function everywhere 2022-03-08 00:44:10 +01:00
Robbert van der Helm fedfa47b43 Fix building instructions in readmes 2022-03-07 22:07:57 +01:00
Robbert van der Helm ef1abe0508 Tweak the gain compensation 2022-03-07 21:33:00 +01:00
Robbert van der Helm 715ba467a9 Make the window overlap configurable
It gets super whacky now.
2022-03-07 21:26:50 +01:00
Robbert van der Helm 115d03a34a Make the window size for configurable 2022-03-07 21:19:38 +01:00
Robbert van der Helm 81308d0c8d Change gain multiplier coefficients 2022-03-07 20:47:34 +01:00
Robbert van der Helm 9ae8b4620f Smooth pitch value changes 2022-03-07 20:27:43 +01:00
Robbert van der Helm 344427f254 Skew the pitch parameter range 2022-03-07 20:22:16 +01:00
Robbert van der Helm 951cac51d7 Add a pitch parameter to Puberty Simulator
Because might as well.
2022-03-07 20:21:20 +01:00
Robbert van der Helm e575514543 Change Puberty Simulator description 2022-03-07 20:08:47 +01:00
Robbert van der Helm 55e258bd27 Add the one and only Puberty Simulator plugin 2022-03-07 19:51:38 +01:00
Robbert van der Helm e1e6b2137e Compute a spectrum in Diopser
This will be used in the GUI.
2022-03-07 15:03:49 +01:00
Robbert van der Helm 376c1d7b0a Fix gain compensation in STFT example 2022-03-07 02:04:47 +01:00
Robbert van der Helm b06e67bde7 Supper non-buffer and non-sidechain inputs in STFT 2022-03-06 22:26:37 +01:00
Robbert van der Helm e61a42e96f Revert windowing change from 93ab08e
This is actually needed to prevent spectral leakage from IDTFs with
small window sizes.
2022-03-06 19:17:42 +01:00
Robbert van der Helm 93ab08e5d5 Remove post-IDFT windowing in STFT helper
There's no reason to.
2022-03-06 19:08:04 +01:00
Robbert van der Helm 175030b77c Fix STFT example filter normalization 2022-03-06 18:56:07 +01:00
Robbert van der Helm 0f78b02685 Add a simple filter example with FFTW 2022-03-06 17:54:23 +01:00
Robbert van der Helm 601ced9363 Add a license note on the STFT example 2022-03-06 16:14:04 +01:00
Robbert van der Helm d7ea21f597 Fix clippy lints 2022-03-06 15:41:35 +01:00
Robbert van der Helm 2343485c1c Don't do gain compensation in STFT helper
You'll likely want to add some scaling yourself anyways, so this would
just be a wasted operation since the scaling also depends on your window
function.
2022-03-06 15:36:24 +01:00
Robbert van der Helm e72203f919 Use the new overlap-add helper in the STFT example
Still without any proper FFT stuff.
2022-03-06 15:28:53 +01:00
Robbert van der Helm 592a908132 Fix samples until next window calculation 2022-03-06 15:11:42 +01:00
Robbert van der Helm 3c62670164 Add proper overlap-add to the StftHelper
Doesn't make much sense without it.
2022-03-06 14:33:30 +01:00
Robbert van der Helm b416d1630b Add the basis for a simple STFT example
Right now it doesn't do any FFT operations yet, but all the pieces are
in place using the new STFT helper.
2022-03-06 02:07:53 +01:00
Robbert van der Helm 03eef2c832 Require PartialEq on plain parameter types
So you can compare them in parameter widgets.
2022-03-05 19:50:12 +01:00
Robbert van der Helm b70af50fcd Add a simple generic UI to Diopser 2022-03-05 19:39:57 +01:00
Robbert van der Helm 7fd3c31a0f Remove support for the non-SIMD Diopser version 2022-03-04 12:49:36 +01:00
Robbert van der Helm 1083ee95b6 Still include the #[macro_use] for Diopser
Since it's also used in the filter module.
2022-03-04 12:21:29 +01:00
Robbert van der Helm d758dd652f Re-export all macros in the prelude
Now you don't need the `#[macro_use] extern crate nih_plug;` anymore
2022-03-04 12:01:47 +01:00
Robbert van der Helm 4c0b07c578 💥 Move re-exports to a prelude module
So you can import everything at once, because you're likely going to
need at least 90% of it anyways.
2022-03-03 23:23:51 +01:00
Robbert van der Helm f581294d7b Update rustdoc formatting for links
Apparently it showed this text verbatim, and not in monospace.
2022-03-03 23:05:12 +01:00
Robbert van der Helm 6c9db8fee8 Change sample iterator variable names in examples 2022-03-03 21:38:50 +01:00
Robbert van der Helm 0666743cc7 Fix Gain GUI CLAP identifier 2022-03-03 21:31:43 +01:00
Robbert van der Helm be4bbd4400 Allow nested parameter structs
See the Parameters docstring for the caveats.
2022-03-03 20:38:28 +01:00
Robbert van der Helm 76369ad1e1 💥 Rework FloatParam and IntParam
They are now two separate types with slightly different options. I had
these merged initially because they're 95% the same, and I thought it
would be fun to have weird distributions for integer parameters, but
that doesn't really work because hosts and the plugin APIs expect the
steps to be linear. And if you're going to have an unstepped integer
parameter, might as well use FloatParam with rounding.

Because non-linear ranges are no longer possible with IntParam, the
types have been split up to make everything much more readable instead
of adding a parameterizing the range type with another type family.
2022-03-03 19:24:40 +01:00
Robbert van der Helm c7d7a790c2 Add a todo for SIMD Diopser coefficent generation 2022-03-02 17:04:01 +01:00
Robbert van der Helm 75b1b13599 Fix the linear spread in Diopser
The old one wasn't what it said on the tin. Thing is, it actually
sounded much cooler, so I may bring it back as an option.
2022-03-02 16:49:16 +01:00
Robbert van der Helm 161d86ab49 Use the new SIMD helpers in Diopser 2022-03-01 21:40:21 +01:00
Robbert van der Helm 3f6f472a34 Use portable_simd from std instead of packed_simd
Since this seems to be the way forward and they encourage using the
feature flag instead of the using it as a separate crate.
2022-03-01 20:59:31 +01:00
Robbert van der Helm a26ddbb45e Change CLAP_KEYWORDS to CLAP_FEATURES
This name was changed in CLAP 0.19, but in 0.18 it's still called
features.
2022-02-28 17:29:53 +01:00
Robbert van der Helm 1151a80769 Add the other CLAP metadata fields 2022-02-28 17:18:11 +01:00
Robbert van der Helm c7f1c46f18 Add a reverse DNS ID field to ClapPlugin 2022-02-28 17:04:47 +01:00
Robbert van der Helm 56c1545196 Add a basic nih_export_clap!() macro
This does not do anything useful yet.
2022-02-28 14:45:31 +01:00
Robbert van der Helm d5d90e3e61 Add a ClapPlugin trait
Just like the Vst3Plugin trait
2022-02-28 14:45:07 +01:00
Robbert van der Helm 70378be6e9 Replace --bundle-vst3 with export detection
We'll need this for when we support other plugin formats.
2022-02-26 20:12:08 +01:00
Robbert van der Helm 6cc1e4f73f Add nightly links that don't require a login 2022-02-16 16:02:41 +01:00
Robbert van der Helm d37b866115 Explicitly mention the nightly toolchain 2022-02-15 20:13:28 +01:00
Robbert van der Helm 1d7a6a870b Reset Diopser filters when changing certain params
Parameters that cannot be interpolated might cause fun artifacts if we
don't do this. Decreasing the number of stages would be fine without a
reset though.
2022-02-15 19:48:54 +01:00
Robbert van der Helm 2f803915eb Allow compiling Diopser without SIMD 2022-02-15 18:30:45 +01:00
Robbert van der Helm d0f1a79279 Use SIMD for Diopser
It's pretty damn fast now, especially compared to the JUCE version.
2022-02-15 18:05:26 +01:00
Robbert van der Helm 935d952d81 Make the biquads SIMD capable 2022-02-15 18:00:01 +01:00
Robbert van der Helm 8c30eccb27 Add an identity function for biquad coefficients 2022-02-15 17:13:49 +01:00
Robbert van der Helm 7632b21a95 Remove debug code from sine example
Not sure how this ended up here.
2022-02-15 03:45:39 +01:00
Robbert van der Helm fc8aec5afa Explain not using the inner iterator in Diopser 2022-02-15 00:39:30 +01:00
Robbert van der Helm 24f81e2542 Fix Diopser DSP load 2022-02-15 00:33:34 +01:00
Robbert van der Helm fa8b87ec71 Remove mentions of Diopser port being unfinished 2022-02-15 00:00:41 +01:00
Robbert van der Helm b84022caed Add the filter spread parameters to Diopser
This includes a much better octave-based version instead of the old
'exponential' version.
2022-02-14 23:59:53 +01:00
Robbert van der Helm c1d91498e1 Update the todo list for Diopser 2022-02-13 20:21:59 +01:00
Robbert van der Helm f399b30dba Implement the smoothing interval on Diopser 2022-02-13 19:54:49 +01:00
Robbert van der Helm 0bd0ea6af2 Add an automation precision parameter to Diopser 2022-02-13 19:41:31 +01:00
Robbert van der Helm c9a9f76dce Update note on Diopser's status
The port is unfinished, but the origin version's feature are all there
and it works well.
2022-02-13 18:42:35 +01:00
Robbert van der Helm 19d2dc0a67 Implement step snapping for parameters 2022-02-13 17:52:54 +01:00
Robbert van der Helm 3d8cfd7477 Use the step sizes 2022-02-13 16:43:11 +01:00
Robbert van der Helm adf59c192b Add a step size for float parameters 2022-02-13 16:41:31 +01:00
Robbert van der Helm eea05cc748 Rename reset_iter to iter_mut
So it's more consistent.
2022-02-12 23:28:15 +01:00
Robbert van der Helm 2c394aabd5 Add nicer adapter for repeating channel iteration 2022-02-12 23:16:07 +01:00
Robbert van der Helm fb382520af Fix typo in comment 2022-02-12 21:53:19 +01:00
Robbert van der Helm 2f371874d0 Add a super basic port of Diopser 2022-02-12 21:51:58 +01:00
Robbert van der Helm 2241000c20 Fix the biquad
Oops.
2022-02-12 21:11:44 +01:00
Robbert van der Helm 710fbf0c7d Remove now unused parameter 2022-02-12 20:02:32 +01:00
Robbert van der Helm cd0b870682 Directly pass a style to .with_smoother() 2022-02-12 19:56:37 +01:00
Robbert van der Helm d6b358f8ca Don't require importing Param for derive macro 2022-02-12 19:55:39 +01:00
Robbert van der Helm e3d445cea6 Add a simple biquad filter 2022-02-12 18:07:40 +01:00
Robbert van der Helm fe881cbdc9 Add the GPL header for Diopser 2022-02-12 17:28:40 +01:00
Robbert van der Helm bc11c97fcf Use the new builder interface 2022-02-12 17:19:52 +01:00
Robbert van der Helm 342aebee89 Add a plugin skeleton for a Diopser port 2022-02-12 16:29:23 +01:00
Robbert van der Helm f645b6a92f Relicense under the ISC license 2022-02-12 16:04:46 +01:00
Robbert van der Helm da8f4c20cf Add more labels to the gain_gui example
Before adding a VU meter widget and removing all of this cruft.
2022-02-09 19:49:23 +01:00
Robbert van der Helm 7eb8622736 Drag very granularly with Shift+Drag 2022-02-09 12:24:01 +01:00
Robbert van der Helm 5dd3cab305 Temporarily show this slider for a skewed int 2022-02-09 11:51:53 +01:00
Robbert van der Helm 07f9a18d3d Rename EguiState::open to is_open
This makes it more clear that it doesn't actually open the editor.
2022-02-08 20:33:08 +01:00
Robbert van der Helm d9ac60ae85 Only calculate peak meter while GUI is open
To show off this feature.
2022-02-08 20:28:40 +01:00
Robbert van der Helm 4260c5441c Add a way to know whether the egui editor is open 2022-02-08 20:16:39 +01:00
Robbert van der Helm 02614e4a5a Use absolute values for the peak meter gain
I guess I wasn't thinking too clearly when I wrote this.
2022-02-06 19:20:03 +01:00
Robbert van der Helm 556bec7c0b Move editor handling to its own struct
This makes the API much, much nicer (especially consuming the egui
wrapper), and it also avoids having to lock the plugin instance which is
obviously very bad if the plugin is also supposed to be processing audio
on another thread.
2022-02-06 17:12:57 +01:00
Robbert van der Helm eefb5e604c Actually, adjust the peak meter range to -60 dBFS
This is the same range Bitwig shows in their tiny VU meters in between
devices.
2022-02-06 14:59:13 +01:00
Robbert van der Helm 0943d54404 Adjust the peak meter normalization to -40 dBFS 2022-02-06 14:58:14 +01:00
Robbert van der Helm a95b25cd06 Tweak the peak meter display 2022-02-06 14:18:47 +01:00
Robbert van der Helm 40d7799df9 Don't handle context in create_egui_editor
There's no need for special handling here, just let the plugin do its
own thing.
2022-02-06 14:02:55 +01:00
Robbert van der Helm a10e1e1152 Rename the VU meter to generic digital peak meter
Before I get a visit from the VU police.
2022-02-06 13:36:55 +01:00
Robbert van der Helm 5017dad7d3 Add a semi-broken GUI example
This needs a lot of work. We need widgets that know how to deal with our
parameters, and also basic widgets for things like meters. Egui-baseview
also has a couple quirks left. Most notably it only updates when
actively moving over the GUI (which means VU meters look pretty janky)
and it randomly panics.
2022-02-06 13:16:28 +01:00
Robbert van der Helm 0514d2de96 Increase the gain smoothing time 2022-02-06 02:36:31 +01:00
Robbert van der Helm 53f802b295 Fix accidental gain smoothing style change 2022-02-06 02:08:58 +01:00
Robbert van der Helm b075d1b1bb Modify the editor API to use trait objects
The alternative isn't really feasible without specialization, and
NIH-plug should work on the stable compiler.
2022-02-05 17:12:03 +01:00
Robbert van der Helm 7ac1df0d8d Add stubs for editor handling 2022-02-05 12:46:26 +01:00
Robbert van der Helm bbc190c67f Hold the RwLock guard in the process context
This avoids having to constantly acquire a new lock.
2022-02-04 23:03:11 +01:00
Robbert van der Helm cbd51b0c3a Monomorphize the context variables
For the parameter setting context functions we don't be able to use
trait objects.
2022-02-04 22:34:53 +01:00
Robbert van der Helm 2c0b797c40 Avoid clicks in the MIDI sine example 2022-02-04 15:26:37 +01:00
Robbert van der Helm 15d0e69d46 Remove TODO about adding MIDI support
Since we did just that.
2022-02-04 15:17:42 +01:00
Robbert van der Helm 366deda83c Add MIDI support to the sine example 2022-02-04 15:17:42 +01:00
Robbert van der Helm f69fdcef5f Add another plugin constant for MIDI support 2022-02-04 15:17:42 +01:00
Robbert van der Helm 295ecc94ee Shorten frequency parameter name
Since it would overflow otherwise.
2022-02-03 17:01:20 +01:00
Robbert van der Helm 10c306e035 Move example plugins into a subdirectory 2022-02-03 16:57:10 +01:00
Robbert van der Helm e642fb5ff8 Make sure FTZ is always enabled 2022-02-03 16:18:24 +01:00
Robbert van der Helm dfedd7b2c4 Enable assert_no_alloc in debug builds 2022-02-03 15:58:00 +01:00
Robbert van der Helm 2ca54d220d Add logarithmic smoothing 2022-02-02 23:00:17 +01:00
Robbert van der Helm da291175d1 Rename SmoothLinear to Linear
We'll rethink this when we get to sample accurate automation.
2022-02-02 22:00:00 +01:00
Robbert van der Helm f8eb0e4ea6 Make gain smoothing slower in examples 2022-02-02 21:35:18 +01:00
Robbert van der Helm 8f89754ba5 Add simple linear parameter smoothing 2022-02-02 21:26:13 +01:00
Robbert van der Helm c8cc6bd26b Re-export all user facing includes 2022-02-02 15:16:10 +01:00
Robbert van der Helm f44597df7c Move the buffer adapter to its own module 2022-02-02 15:01:41 +01:00
Robbert van der Helm 048d69213e Make the buffer own the output slices
This gets rid of a lot of lifetime casting and other unsoundness.
2022-02-02 14:41:35 +01:00
Robbert van der Helm 58736f5cc8 Add a super unsafe channel buffer adapter
To avoid having to perform lifetime magic here, this buffer needs to own
the slices and be stored as part of the RwLock.
2022-02-02 13:02:28 +01:00
Robbert van der Helm d5fde24854 Use skewed range for frequency parmater 2022-02-01 23:38:27 +01:00
Robbert van der Helm 6bb83061dd Rename the params module to param
It's a heterogeneous module, and splitting the ranges to their own
module will be a bit weird otherwise.
2022-02-01 20:51:22 +01:00
Robbert van der Helm 31481c406b Use Default::default() in the parameter examples
Makes it a bit easier to change between types if needed.
2022-02-01 20:15:33 +01:00
Robbert van der Helm 59b70eecae Add a sine test tone generator 2022-02-01 19:56:28 +01:00
Robbert van der Helm 85bb37e037 Add a license to the gain example 2022-02-01 19:41:03 +01:00
Robbert van der Helm e2e2c59d34 Pass the process context to the plugin 2022-02-01 17:09:23 +01:00
Robbert van der Helm 6f67235c15 Show off the Default shorthand 2022-01-31 21:24:26 +01:00
Robbert van der Helm 6fc733e029 Add callbacks for parameter changes 2022-01-31 21:02:47 +01:00
Robbert van der Helm 4495064558 Redesign the wrapper's interiors for thread safety
There are a lot of locks needed now here, but none of them should be
contended. This is much better than potentially having RefCell's blow up
due to simultaneous mutable borrows, and the Arc is needed for the event
loop.
2022-01-31 19:44:02 +01:00
Robbert van der Helm b65158283a Support parking_lot mutexes and rwlocks 2022-01-31 19:42:35 +01:00
Robbert van der Helm 221e424f78 Use thread safe interior mutability for persist
Sadly there's not really a safe way to do this otherwise, but if you
really want to have persistence this way and absolutely need it to be
lock-free (because you're going to use it from the GUI thread), then you
can implement your own PersistentField.
2022-01-30 17:07:50 +01:00
Robbert van der Helm c1ea1e429f Use the persist attribute in the gain example 2022-01-30 16:16:15 +01:00
Robbert van der Helm 6fc4d80483 Change the id attribute to be a key value pair 2022-01-29 20:40:14 +01:00
Robbert van der Helm ef021915e5 Move the PlainParam functions to a trait
We can use this for setting parameter values, as a &Param can be turned
into a pointer which can then later be mapped to a parameter ID to
handle outputting parameter values.
2022-01-29 13:39:01 +01:00
Robbert van der Helm 71dc144c73 Add a simple formatters library
We can add common formats here so you don't need to repeat them all the
time.
2022-01-28 14:33:29 +01:00
Robbert van der Helm 217b28fdca Move VST3 categories and class ID to a new trait
Makes more sense than having this in either the general plugin trait or
as part of the macro.
2022-01-27 22:13:13 +01:00
Robbert van der Helm c11abdc77d Add a processing status for handling reverb tails 2022-01-27 21:03:49 +01:00
Robbert van der Helm 9046cfbe3a Add a version string constant 2022-01-26 22:20:15 +01:00
Robbert van der Helm a13263051a Add a VST3 categories constant for plugins 2022-01-26 19:49:22 +01:00
Robbert van der Helm dc6db232ed Pass a CID to the VST3 export macro
Seems much less prone to breakage than generating them, since this way
the programmer has full control.
2022-01-26 19:20:39 +01:00
Robbert van der Helm 031407754b Add name, vendor, and other constants to plugins 2022-01-26 18:14:13 +01:00
Robbert van der Helm 04ad429e57 Fix gain plugin parameter ranges 2022-01-26 15:11:23 +01:00
Robbert van der Helm 070e68c084 Move nih_plug to the repo's root
Makes more sense to have this be on the same level as the workspace
since technically this crate can be used separately.
2022-01-26 12:52:57 +01:00
Robbert van der Helm c3f8b8fb8c Re-export the nih_plug_derive macro
No need to have to use this crate separately.
2022-01-26 12:50:30 +01:00
Robbert van der Helm 6edba6555e Generate VST3 entry point functions 2022-01-26 12:37:45 +01:00
Robbert van der Helm 5cd14492ea Use the new decibel to gain function 2022-01-26 11:49:32 +01:00
Robbert van der Helm 98e326d390 Implement Plugin::params()
I somehow forgot to add this.
2022-01-26 11:41:07 +01:00
Robbert van der Helm d8db0e64cf Use the debug assert macros 2022-01-26 11:38:26 +01:00
Robbert van der Helm a40bf1f4f5 Add missing copyright header in gain plugin 2022-01-26 10:56:02 +01:00
Robbert van der Helm 05ae8fd428 Add a very basic gain plugin with some todos 2022-01-25 23:02:15 +01:00
Robbert van der Helm 52f80de5dc Add a dummy library for testing the macro 2022-01-25 22:18:55 +01:00