Audio plugins for Linux.
VST3 version is available at https://github.com/ryukau/VSTPlugins .
For Arch user, package is available on AUR. Thanks to mxmilkb for packaging.
For openSUSE user, package is available on openSUSE Build Service. Thanks to Konstantin Voinov for packaging.
- Show home:kill_it / Uhhyou-Plugins - openSUSE Build Service
- Show home:kill_it / vst3-Uhhyou-Plugins - openSUSE Build Service
On Ubuntu 18.04, open terminal and run following command.
sudo apt install \
git \
pkg-config \
libjack-jackd2-dev \
libgl-dev \
liblo-dev
git clone --recursive <this repository url>
cd LV2Plugins
# Temporary patch to DPF. See: https://github.com/DISTRHO/DPF/issues/216
cp patch/NanoVG.cpp lib/DPF/dgl/src/NanoVG.cpp
make -j8 # If build process goes out of memory, try removing the -j option.
make installHome # Copy *.lv2 to ~/.lv2
make installHomeVST2 # Copy *-vst.so to ~/.lxvstBinaries are built into LV2Plugins/bin.
To rebuild, use make clean or make cleanall.
cd LV2Plugins
make clean # Remove LV2Plugins/bin directory.
make cleanall # Remove LV2Plugins/bin and files built for DPF.To disable particular plugin type, set the variables LV2, JACK, VST2 to false.
cd LV2Plugins
make -j LV2=false # Disable LV2 build.
make -j JACK=false VST2=false # Disable jack and vst2 build.Run make install to install plugins on system wide.
Following variables can be set to specify install path:
| Variable | Default | Usage |
|---|---|---|
PREFIX |
/usr/local |
Prefix of install path. |
lv2dir |
$(DESTDIR)$(PREFIX)/lib/lv2 |
LV2 plugin directory path. |
vst2dir |
$(DESTDIR)$(PREFIX)/lib/lxvst |
VST 2 plugin directory path. |
bindir |
$(DESTDIR)$(PREFIX)/bin |
Binary directory path. Used to install JACK binaries. |
sysconfdir |
$(DESTDIR)$(PREFIX)/etc |
Plugin config directory path. |
datarootdir |
$(DESTDIR)$(PREFIX)/share |
Root directory for data and documentation. |
datadir |
$(datarootdir) |
Plugin resource directory path. Used for style/theme. |
docdir |
$(datarootdir)/doc |
Plugin documentation directory path. |
DESTDIR |
Optional. Used for staging installations to temporary directories. |
Currently, plugins only reads config in following directories. The number shows precedence:
$XDG_CONFIG_HOME/usr/local/etc/etc
If you are planning to use other directory for sysconfdir, feel free to open issue.
Examples:
make install PREFIX="/usr" # install everything but config to `/usr`
# Test directory structure.
mkdir test
make install DESTDIR="test"Note that some parameter configuration leads to massive DC offset. To stay safe, it's better to insert high-pass filter after these plugins. Monitoring output with oscilloscope is recommended.
Color configuration is placed at $XDG_CONFIG_HOME/UhhyouPlugins/style/style.json. If $XDG_CONFIG_HOME is empty, it defaults to $HOME/.config.
If you are building from source, make install also installs color configuration files.
For more details, please refer to style/ColorConfig.md. When you made a nice color theme, feel free to send a patch.
Knobs, sliders etc. has common functionalities listed on below.
- Shift + Mouse Left Drag: Fine adjustment.
- Ctrl + Left Click: Reset to default.
Some controls turn red when pointing. They can be the cause of potential blow up or stopping all sounds for a while. It is recommended to always change those controls slowly with Shift + Mouse Left Drag.
TextKnob which is shown in the image below has an additional control Mouse Right Click to cycle min/mid/max.
BarBox controls which is shown in the image below have keyboard shortcuts. Shortcuts are only enabled when cursor is on overtone control. Cheat sheet may be available on plugin information pop-up or information tab.
| Input | Control |
|---|---|
| Ctrl + Left Click | Reset to Default |
| Right Drag | Draw Line |
| a | Alternate Sign |
| d | Reset Everything to Default |
| D | Toggle Min/Mid/Max |
| e | Emphasize Low |
| E | Emphasize High |
| f | Low-pass Filter |
| F | High-pass Filter |
| i | Invert Value (Preserve minimum) |
| I | Invert Value (Minimum to 0) |
| n | Normalize (Preserve minimum) |
| N | Normalize (Minimum to 0) |
| p | Permute |
| r | Randomize |
| R | Sparse Randomize |
| s | Sort Descending Order |
| S | Sort Ascending Order |
| t | Subtle Randomize (Random walk) |
| T | Subtle Randomize (Converge to 0) |
| z | Undo |
| Z | Redo |
| , (Comma) | Rotate Back |
| . (Period) | Rotate Forward |
| 1 | Decrease |
| 2-9 | Decrease 2n-9n |
Some dense BarBoxes has scroll bar to zoom in. Scroll bar has handles on left and right end. To control zoom, use Left Drag on one of the handle, or roll Mouse Wheel on scroll bar region. Right Click can be used to reset the zoom. When plugin window is closed, zoom will be reset. Following image shows a scroll bar under a BarBox.
L4Reverb is an extended version of LatticeReverb. This time, lattice structure has 4 * 4 * 4 * 4 = 256 sections per channel.
Note that L4Reverb is heavy weight. DSP load is around 4 times higher than Dragonfly Room Reverb on my environment.
If the DSP load is a problem, L3Reverb can be used. L3Reverb is a lightweight version of L4Reverb. Lattice structure has 3 * 3 * 3 * 5 = 135 sections, so the DSP load is roughly half of L4Reverb.
Caution:
- Output may change with different sample rate or buffer size.
- Output may blow up when both
CrossandSpreadare not 0. - Output may become loud when offset of
*Feedis not 0 and modulation is enabled. - Output may become loud when following steps are performed.
- Set some of the OuterFeed or InnerFeed to close to minimum or maximum.
- Input signals.
- Change the value of OuterFeed or InnerFeed which was set at step 1.
LatticeReverb is a stereo reverb using lattice structure. Equipped with 16 delays per channel. All internal parameters are exposed.
Caution:
- Output may change with different sample rate or buffer size.
- Output may become loud when following steps are performed.
- Set some of the OuterFeed or InnerFeed to close to minimum or maximum.
- Input signals.
- Change the value of OuterFeed or InnerFeed which was set at step 1.
Lattice structure reference.
LightPadSynth is a lighter version of CubicPadSynth. For efficiency, following changes are made:
- Removed pitch modulation. Feedback delay is added instead.
- Changed LFO to modulate delay time.
- Changed interpolation from cubic to linear.
- Changed filter from wavetable low-pass to naive IIR low-pass.
Caution: Filter is a bit peaky. Be careful when changing resonance.
Wavetable and LFO will not refresh automatically. To refresh, press Refresh Wavetable or Refresh LFO button.
Cheat sheet of shortcuts is available on Information tab.
WaveShaper Pack contains 4 stereo waveshapers. Waveshaping algorithms are naive, but all provides option for 16x oversampling.
Caution: Do not use More* parameters without inserting a limiter after waveshaper. Output amplitude may become very loud.
Oversampling may not be necessary for SoftClipper, unless input signal contains high frequency (4000 Hz or higher).
Hardclip option guarantees safe output which amplitude is in between -1.0 to 1.0. However, Hardclip kills the characteristic of waveshaper.
CubicPadSynth is a wavetable synthesizer which uses PADsynth algorithm to generate oscillator tables. Cubic interpolation is used to get smooth sound even at inaudible low frequency range. LFO waveform can be directly drawn.
Wavetable and LFO will not refresh automatically. To refresh, press Refresh Wavetable or Refresh LFO button.
Some parameters have wide range of value. Shift + Left Drag can be used to fine adjustment.
Cheat sheet of shortcuts is available on Information tab.
EsPhaser is a phaser with up to 4096 stages of order 2 Thiran all-pass filters. This is the same phaser used in EnvelopedSine.
Caution:
- When
stageis set to 4096, it will be CPU intensive. - Output varies in different sample rate.
- Output may be loud when changing
Cas. Offset. Use Shift + Mouse Left Drag to slowly change the value, or insert limiter to prevent hard clipping.
EnvelopedSine is another additive synthesizer which computes 64 sine waves per note. There are individual controls of attack, decay and saturation for each sine oscillator.
EnvelopedSine uses stable quadrature oscillator (QuadOsc) algorithm described by Martin Vicanek. QuadOsc is used because I couldn't figure out how to set initial phase for faster algorithm.
Order 2 Thiran all-pass filters are used for phaser.
IterativeSinCluster is an additive synthesizer. This synth computes 512 sine waves for each note to make tone cluster. I somehow thought "iterative sin" was a thing, but the correct term is "recursive sine".
Overview of calculation of pitch for each sine wave. Parameter ET stands for equal temperament. Milli means 1 milli semitone = 1 / 10 cent.
function toneToPitch(semi, milli):
return 2 ^ (1000 * semi + milli) / (ET * 1000)
for each Chord:
chordPitch = toneToPitch(Chord.semi, Chord.milli)
for each Note:
notePitch = toneToPitch(Note.semi, Note.milli)
for each Overtone:
frequency = midiNoteFrequency
* (1 + mod(Multiply * Overtone * notePitch * chordPitch, Modulo))
Various recursive sin algorithm described by Martin Vicanek. IterativeSinCluster uses biquad oscillator.
TrapezoidSynth is a monophonic synthesizer equipped with trapezoid oscillator which is made from 5th order PTR ramp function. In other words, it's just a fancy version of tri-pulse oscillator. 2 pitch shifters are added to make some chord.
PTR trapezoid oscillator algorithm.
AM pitch shifter algorithm described by Scott Wardle.
IIR Hilbert filter by Olli Niemitalo. This filter is used in AM pitch shifter to approximate Hilbert transform.
FDNCymbal is another attempt to make cymbal sounds. This one at least sounds like hitting a metal plate. Unlike the name, most of metalic texture comes from stage 1 of Schroeder allpass section rather than FDN (feedback delay network). FDN section makes nice impact sound when FDN->Time is short. Tremolo is added to simulate wobbling of cymbal.
FDNCymbal can be used as both synth/effect. To turn off oscillator, click Stick button.
Caution:
- When HP Cutoff is moving fast, it may output massive DC. To avoid this, use Shift + Mouse Left Drag or turn up
Smooth. - When FDN->Feedback is non zero, it may possibly blow up. If that happens, turn
FDN->Feedbackto leftmost.
JavaScript version is available. Requires browser that supports Web Worker and Web Audio. This is not exactly the same as plugin version, but using similar structure.
WaveCymbal is a banded wave-guide synthesizer. This is an attempt to make cymbal sounds, but result is more like dragging bunch of empty cans on asphalt. Be cautious tweaking controls that turns red when pointing. They can drastically change output gain.
WaveCymbal can be used as a effect. To turn off oscillator, change Oscillator->Sustain to Off.
Block diagram of WaveCymbal. BP is short for Band-pass.
JavaScript version is available. Requires browser that supports Web Worker and Web Audio.
The idea of banded wave-guide is based on Figure 4 in this paper.
- Essl, Georg, et al. "Theory of banded waveguides." Computer Music Journal 28.1 (2004): 37-50.
SyncSawSynth is a synthesizer with up to 10th order PTR sawtooth oscillator. PTR (Polynomial Transition Regions) is an aliasing suppressing technique.
PTR paper by Kleimola and Valimaki.
- Jari Kleimola, and Vesa Valimaki. “Reducing aliasing from synthetic audio signals using polynomial transition regions.” IEEE Signal Processing Letters 19.2 (2011): 67-70.
Derivation of higher order PTR equations (Japanese).
SevenDelay is using 7th order lagrange fractional delay. Also 7 times oversampled. Suitable for making sound with actively changing parameters by hand or DAW automation. Parameters are tuned towards short delay.
Lagrange FD explained by Julius O. Smith III. PDFs at the bottom of the page is better formatted.
Implementation of delay (Japanese).
Plugins using filter from:
- RBJ Audio-EQ-Cookbook — Musicdsp.org documentation
- Book: The Art of VA Filter Design 2.1.0 - KVR Audio
GPLv3. See License directory for the complete license.


















