Robbert van der Helm
4fad759d06
Mark the linear-phase LR24 crossover experimental
...
The low frequency performance is too poor at this filter size and the
DSP load impact is too high. This needs to be implemented using FFT
convolution instead.
2022-06-07 14:19:29 +02:00
Robbert van der Helm
50317baba2
Fix normalization in biquad->LP FIR conversion
2022-06-07 14:19:29 +02:00
Robbert van der Helm
dd18c7a08a
Fix classic off by one error
2022-06-07 14:19:29 +02:00
Robbert van der Helm
8d70f172c3
Add a linear-phase FIR LR24 crossover option
2022-06-07 14:19:29 +02:00
Robbert van der Helm
73919b6805
Add a process function for the FIR crossover
2022-06-07 14:19:29 +02:00
Robbert van der Helm
43980ec459
Add the function to design the FIR band filters
...
Using the previously added biquad->linear phase FIR conversion function.
2022-06-07 14:19:29 +02:00
Robbert van der Helm
f4b3999916
Rename linear-phase low-pass FIR design function
2022-06-07 14:19:29 +02:00
Robbert van der Helm
a1fe3b157b
Simplify biquad -> linear-phase FIR conversion
2022-06-07 14:19:29 +02:00
Robbert van der Helm
de13f8c42a
Add part of an FIR crossover
...
This includes an algorithm that efficiently converts biquad coefficients
to a linear-phase FIR filter kernel.
2022-06-07 14:19:29 +02:00
Robbert van der Helm
78caa0f78d
Move Q constant to the biquad module
2022-06-07 14:19:29 +02:00
Robbert van der Helm
06f5048b0b
Add a crossover type parameter
2022-06-07 14:19:29 +02:00
Robbert van der Helm
694996dcf4
Move Crossover biquads to their own module
2022-06-07 14:19:29 +02:00
Robbert van der Helm
f7bfbb8d95
Add stable IDs to the plugin's enum parameters
...
Existing instances will automatically be upgraded to these IDs when the
instance gets saved. This makes it possible to rearrange things later
when needed.
2022-06-04 13:36:17 +02:00
Robbert van der Helm
d72bd56fe7
Change the limiter recommendation on Diopser
...
And explain what can happen and why when you start sweeping parameters
around.
2022-06-03 18:22:23 +02:00
Robbert van der Helm
82565592fa
Mention Safety Limiter in Diopser readme
2022-06-02 16:34:25 +02:00
Robbert van der Helm
24140494a2
Add a screenshot to the Crossover readme
2022-06-02 15:59:09 +02:00
Robbert van der Helm
96fe176d53
Remove Crossover filter monotonicity check
2022-06-02 14:40:12 +02:00
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