1
0
Fork 0
Commit graph

482 commits

Author SHA1 Message Date
Robbert van der Helm 332ac2b231 Add basic hard-knee downwards compression 2022-07-24 15:15:47 +02:00
Robbert van der Helm faec0e35af Allow more granular ratios 2022-07-24 15:15:47 +02:00
Robbert van der Helm 43f86bcc85 Prevent threshold from reaching zero 2022-07-24 15:15:47 +02:00
Robbert van der Helm 8fbdc43ce3 Fix the high frequency rolloff 2022-07-24 15:15:47 +02:00
Robbert van der Helm eda842c6a9 Fix the envelope coefficients
The minus was missing here.
2022-07-24 15:15:47 +02:00
Robbert van der Helm c2003879cb Store ratio reciprocals instead of ratios
We're doing linear space compression, so we need the reciprocal of the
actual ratio.
2022-07-24 15:15:47 +02:00
Robbert van der Helm ef3a7a76d5 Handle 0 attack and release 2022-07-24 15:15:47 +02:00
Robbert van der Helm dae9dc758c Implement the envelope followers 2022-07-24 15:15:47 +02:00
Robbert van der Helm 147cf3f633 Add a not very functional process function 2022-07-24 15:15:47 +02:00
Robbert van der Helm 9aa4a64e5f Compute the ratios for Spectral Compressor 2022-07-24 15:15:47 +02:00
Robbert van der Helm 482599b351 Compute the thresholds for Spectral Compressor 2022-07-24 15:15:47 +02:00
Robbert van der Helm fad560ab9f Precompute 2-log frequencies for the compressors 2022-07-24 15:15:47 +02:00
Robbert van der Helm b8525cac4d Split compressor params into up/downwards 2022-07-24 15:15:47 +02:00
Robbert van der Helm e68bb8d632 Add a stub for a compressor bank
This is what the compressor data structure will more or less look like.
The thresholds and ratios still need to be split up in their upwards and
downwards counterparts and the callback listeners should be updated
accordingly.
2022-07-24 15:15:47 +02:00
Robbert van der Helm fdcf8f79bc Make the Spectral Compressor editor taller
All the sliders.
2022-07-24 15:15:47 +02:00
Robbert van der Helm 2658404162 Rearrange compressor and threshold parameters 2022-07-24 15:15:47 +02:00
Robbert van der Helm 6f92c81c1b Add parameters for window size and overlap 2022-07-24 15:15:47 +02:00
Robbert van der Helm 5dff08c62b Add a dedicated threshold params struct
The input gain is now replaced by a global threshold.
2022-07-24 15:15:47 +02:00
Robbert van der Helm 49f6df7248 Add a high-frequency ratio rolloff parameter 2022-07-24 15:15:47 +02:00
Robbert van der Helm d00ae369c0 Add knee width parameters 2022-07-24 15:15:47 +02:00
Robbert van der Helm ed3f760965 Move the compressor parameters to their own module 2022-07-24 15:15:47 +02:00
Robbert van der Helm 08c78454da Add scrollbar to Spectral Compressor's generic GUI 2022-07-24 15:15:47 +02:00
Robbert van der Helm a406f451b0 Remove the word Threshold from the parameter names
This makes them too long otherwise.
2022-07-24 15:15:47 +02:00
Robbert van der Helm 07136bcdc9 Add compressor params for Spectral Compressor
These are not yet hooked up to anything.
2022-07-24 15:15:47 +02:00
Robbert van der Helm 7c66f5d856 Add a dry-wet mixer to Spectral Compressor 2022-07-24 15:15:47 +02:00
Robbert van der Helm 46faaaf1ac Add a DC filter 2022-07-24 15:15:47 +02:00
Robbert van der Helm 12aa8544cd Add a non-functional STFT to Spectral Compressor 2022-07-24 15:15:47 +02:00
Robbert van der Helm 85e52b8ab7 Add boilerplate for a Spectral Compressor port 2022-07-24 15:15:47 +02:00
Robbert van der Helm 6e89d3737b Change the scaling on Safety Limiter's threshold
With the addition of negative values the linear scale doesn't work
anymore.
2022-07-22 22:49:59 +02:00
Robbert van der Helm f5459e95a5 Fix typo in Crossover description
Closes #19.
2022-07-22 18:46:53 +02:00
Robbert van der Helm 2c9945db79 Allow negative thresholds for Safety Limiter 2022-07-20 19:45:29 +02:00
Robbert van der Helm 8e2650e43a
Merge pull request #15 from AmaiKinono/typo
Fix typos in the gain example
2022-07-18 23:38:03 +02:00
AmaiKinono 00fa9e9703 Fix typos in the gain example 2022-07-17 00:51:01 +08:00
Robbert van der Helm ba7b5a3b32 Fix examples for out of order events
This would be a host bug, but in theory CLAP hosts could provide out of
order events this way.
2022-07-14 12:50:16 +02:00
Robbert van der Helm 0469bdf806 Persist the editor states for all plugins 2022-07-13 23:16:54 +02:00
Robbert van der Helm 2a1abf10e1 Fix typo in Diopser readme 2022-07-13 23:16:54 +02:00
Robbert van der Helm c24d4062e4 Add an attack-release amp envelope to PolyModSynth 2022-07-06 20:49:21 +02:00
Robbert van der Helm 1510cbb884 Remove assertion failure on polymod voice mismatch 2022-07-06 19:30:48 +02:00
Robbert van der Helm 35e584b3c8 Add a poly mod gain parameter to PolyModSynth 2022-07-06 19:18:49 +02:00
Robbert van der Helm 097d6c9fc4 Terminate all matches voices in PolyModSynth
This is needed for a single NoteOff followed by multiple NoteOns for the
same key/channel with different note IDs.
2022-07-06 18:03:53 +02:00
Robbert van der Helm 95b4d9785e Remove the MIDI output from PolyModSynth 2022-07-06 17:16:19 +02:00
Robbert van der Helm efc32f3944 Add a basic aliasing sawtooth wave to PolyModSynth 2022-07-06 17:16:19 +02:00
Robbert van der Helm 4ad4f8f76d Add more basic fields for PolyModSynth 2022-07-06 17:16:19 +02:00
Robbert van der Helm c36f29e3ca Add basic voice management for PolyModSynth
This of course still misses important things like amplitude envelopes,
so notes will never end on their own. Those will be added as part of
audio processing.
2022-07-06 17:16:19 +02:00
Robbert van der Helm 69aa8433fa Configure the voice capacity for PolyModSynth 2022-07-06 14:40:27 +02:00
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