Robbert van der Helm
89b2d0a66c
Add a stub for poly_mod_synth
...
This will serve as an example implementation for polyphonic modulation.
2022-07-06 13:55:59 +02:00
Robbert van der Helm
2ac5eaadf8
Handle choke events in MidiInverter
2022-07-06 13:41:20 +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
7cd7294b22
Make CLAP descriptions and special URLs optional
...
This closes #14 .
2022-07-04 12:46:34 +02:00
Robbert van der Helm
883b43b6a7
Support string->value conversions for Diopser's most important parameter
2022-07-02 00:45:01 +02:00
Robbert van der Helm
29e9d620ca
Fix the sine test tone CLAP category
2022-06-29 01:32:39 +02:00
sonata-chen
a284ba020f
fix typo
2022-06-28 19:42:46 +08:00
Robbert van der Helm
b7bfa5f18e
Update Vizia
...
With two months of breaking changes, hooray! But everything should still
work after some bug squashing in Vizia.
2022-06-18 01:59:57 +02:00
Robbert van der Helm
abe7fec0db
Fix channel layout check in sine example
2022-06-15 00:10:27 +02:00
Robbert van der Helm
aa60d616fe
Handle infinite and NaN values in Safety Limiter
2022-06-13 18:47:48 +02:00
Robbert van der Helm
6e37353c67
Link to the correct CI pipeline for builds
2022-06-10 15:59:18 +02:00
Robbert van der Helm
e0fde8b891
Fix very important typo
2022-06-10 01:26:14 +02:00
Robbert van der Helm
014c183eab
Allocate FirCrossover data on the heap
...
Windows has tiny stack sizes and it doesn't seem to like this.
2022-06-08 02:09:11 +02:00
Robbert van der Helm
5a6ec5595b
Remove duplicate biquad module
...
This was moved elsewhere, but I guess another copy got saved and I
didn't notice.
2022-06-08 00:11:46 +02:00
Robbert van der Helm
92a3acdd0a
Mention the linear-phase mode for Crossover
2022-06-07 21:39:32 +02:00
Robbert van der Helm
b389268168
Fix FFT FIR crossover latency calculation
2022-06-07 20:46:23 +02:00
Robbert van der Helm
c23cf8e7ee
Announce zero latency when switching back to IIR
2022-06-07 20:36:02 +02:00
Robbert van der Helm
469e47e8bf
Drop experimental label on FIR crossover
2022-06-07 20:32:55 +02:00
Robbert van der Helm
5a51dce00d
Rework FIR crossover to use FFT convolution
2022-06-07 20:32:27 +02:00
Robbert van der Helm
2c48ceb392
Refactor IIR crossover process loop, disable FIR
...
The FIR crossover will need to use FFT convolution, so it can't use the
same loop. Because of that we'll need to rework the FIR crossover to not
use channel SIMD and to work on channel slices instead.
2022-06-07 16:13:39 +02:00
Robbert van der Helm
7e3dfe904d
Parameterize FirCoefficients over the kernel size
2022-06-07 15:32:29 +02:00
Robbert van der Helm
b32cd27e8c
Move FIR filters to their own module
2022-06-07 15:19:18 +02:00
Robbert van der Helm
ac5796ee59
Move the Crossover biquad definition
2022-06-07 15:10:55 +02:00
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