Robbert van der Helm
2a464c478c
Default SC global threshold to 0 dBFS
2022-07-24 18:30:20 +02:00
Robbert van der Helm
ce0aa0079c
Slightly lower the threshold parameter
2022-07-24 18:26:57 +02:00
Robbert van der Helm
ce72dc5f03
Fix disabled DC filter behavior
...
This fixes a NaN from taking the logarithm of zero, and the lower bins
are not actually compressed when this option is disabled. This is useful
when using tiny window sizes as the first bin will span quite a chunk of
the spectrum.
2022-07-24 18:25:46 +02:00
Robbert van der Helm
74b33af7d7
Fix DC bin skipping being off by one
2022-07-24 18:00:15 +02:00
Robbert van der Helm
dffc169c99
Skew slope and curve more towards 0
...
Especially positive curve values can get out of hand quick
2022-07-24 17:48:02 +02:00
Robbert van der Helm
d53d03c5cf
Default downwards hi-freq rolloff to 0.25
...
Sort of makes sense to have these two be symmetrical
2022-07-24 17:43:31 +02:00
Robbert van der Helm
22dcbdf4a9
Make the default parameters a bit more gentle
2022-07-24 17:25:58 +02:00
Robbert van der Helm
c06b134e93
Show the upwards parameter on the left
...
It makes more sense this way.
2022-07-24 17:17:28 +02:00
Robbert van der Helm
126cf3b141
Add a disclaimer to the GUI
...
Because there's a good chance things will change later and patches may
not sound exactly the same anymore.
2022-07-24 17:13:09 +02:00
Robbert van der Helm
0b1d9b60db
Also skew the slope parameter
2022-07-24 17:07:35 +02:00
Robbert van der Helm
3fe1769a43
Change the global threshold range
...
This should go lower and it doesn't need to exceed much past 0
dBFS (since full 0 dBFS in the frequency domain will peak pretty hard in
the time domain).
2022-07-24 17:06:20 +02:00
Robbert van der Helm
4a2373b664
Implement upwards compression
2022-07-24 16:56:01 +02:00
Robbert van der Helm
8ca66cf9bb
Move the main threshold up in the list
2022-07-24 16:29:50 +02:00
Robbert van der Helm
455ab0364a
Skew the threshold curve parameter
...
Since the center values will be most interesting useful range.
2022-07-24 16:24:31 +02:00
Robbert van der Helm
068549607d
Add soft-knee downwards compression
2022-07-24 15:58:30 +02:00
Robbert van der Helm
08201d2a87
Compute knee starts and ends
2022-07-24 15:54:58 +02:00
Robbert van der Helm
92f03e768f
Default the rolloff parameters to 0
2022-07-24 15:15:47 +02:00
Robbert van der Helm
b3166e3977
Rearrange Spectral Compressor GUI into 4x4 grid
2022-07-24 15:15:47 +02:00
Robbert van der Helm
4f62ebd2ea
Wrap nested Params structs in Arcs
...
So we can use the generic UIs. Vizia needs these to be 'static.
2022-07-24 15:15:47 +02:00
Robbert van der Helm
4327828e6b
Move the Params implementation to CompressorParams
...
So now CompressorBankParams can just derive Params.
2022-07-24 15:15:47 +02:00
Robbert van der Helm
278ae227a7
Make the Spectral Compressor editor a bit wider
...
Next up is splitting this up in four generic UI panes to make it a bit
easier to use. That was why all of the previous commits moved parameters
around.
2022-07-24 15:15:47 +02:00
Robbert van der Helm
6ae1c55f76
Deduplicate compressors with custom Params impl
...
This now also finally serves as an example on how to do this.
2022-07-24 15:15:47 +02:00
Robbert van der Helm
fa392e61f1
Move attack and release to global parameters
2022-07-24 15:15:47 +02:00
Robbert van der Helm
3c1a1c8f14
Move global parameters to their own struct
...
We'll temporarily split the generic UI into four panes to make it a bit
easier to use.
2022-07-24 15:15:47 +02:00
Robbert van der Helm
c53726bf9e
Move the global threshold down in the list
2022-07-24 15:15:47 +02:00
Robbert van der Helm
06694683d3
Move the frequency center parameter down
...
Somehow this is always where I'm looking for it.
2022-07-24 15:15:47 +02:00
Robbert van der Helm
7db5da7930
Make the slope parameter range wider
2022-07-24 15:15:47 +02:00
Robbert van der Helm
f58e278c85
Fix offsets in threshold calculations
2022-07-24 15:15:47 +02:00
Robbert van der Helm
f0efdad059
Rearrange Spectral Compressor parameters
2022-07-24 15:15:47 +02:00
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