Skip to content

Wasted-Audio/ryukau_LV2Plugins

Repository files navigation

Important: Development is freezed.

In recent years, more hosts started supporting VST 3, or they support VST 3 better than before. So there's less reason to port my plugins to LV2. This decision is mostly to reduce maintainance on my side. See this link for the problems I faced.

Uhhyou Plugins LV2

Audio plugins for Linux.

VST3 version is available at https://github.com/ryukau/VSTPlugins .

Package

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.

Building

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

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 ~/.lxvst

Binaries 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.

System Wide Installation

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:

  1. $XDG_CONFIG_HOME
  2. /usr/local/etc
  3. /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"

Patch

Temporary patches to libraries are placed under patch directory. Patches are automatically applied with make.

See following issues for details.

Plugins

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

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.

Controls

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.

Image of TextKnob.

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.

Image of BarBox.

Input Control
Left Drag Change Value
Shift + Left Drag Change Value (Snapped)
Ctrl + Left Drag Reset to Default
Ctrl + Shift + Left Drag Change Value (Skip Between Frames)
Right Drag Draw Line
Shift + Right Drag Edit One Bar
Ctrl + Right Drag Reset to Default
Ctrl + Shift + Right Drag Toggle Lock
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)
l Toggle Lock under Mouse Cursor
L Toggle Lock for All
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

Snapping is not available for all BarBox. If you'd like to have snapping for certain BarBox, feel free to open issue.

Edit One Bar with Shift + Right Drag holds a bar under the cursor when mouse right button is pressed. Then only changes that one bar while holding down mouse right button.

Toggle Lock with Ctrl + Shift + Right Drag behaves as line edit. When right mouse button (RMB) is pressed, it holds the opposite state of the bar below mouse cursor, then use the state for the rest of bars. For example, if RMB is pressed on a locked bar, dragging unlocks bars while holding down RMB.

Some dense BarBox 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.

Image of scroll bar under BarBox.

CollidingCombSynth

Image of CollidingCombSynth GUI.

CollidingCombSynth (CCS) is an experimental synthesizer which sounds like bowed string. Tuning of pitch is difficult, so mostly suitable for sound effects.

CCS is based on KSCymbal. The idea is to collide Karplus-Strong string model to each other. "Collision" in CCS works like a kind of oscillator sync.

Up to 192kHz sample rate is supported.

Caution:

  • Output may be loud. Recommend to always insert limiter after CCS, even when Compressor is turned on.
  • DSP load spikes at note-on.

L4Reverb/L3Reverb

Image of L4Reverb GUI.

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 Cross and Spread are not 0.
  • Output may become loud when offset of *Feed is not 0 and modulation is enabled.
  • Output may become loud when following steps are performed.
    1. Set some of the OuterFeed or InnerFeed to close to minimum or maximum.
    2. Input signals.
    3. Change the value of OuterFeed or InnerFeed which was set at step 1.

LatticeReverb

Image of LatticeReverb GUI.

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.
    1. Set some of the OuterFeed or InnerFeed to close to minimum or maximum.
    2. Input signals.
    3. Change the value of OuterFeed or InnerFeed which was set at step 1.

Lattice structure reference.

LightPadSynth

Image of LightPadSynth GUI.

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

Image of FoldShaper GUI.

Image of ModuloShaper GUI.

Image of OddPowShaper GUI.

Image of SoftClipper GUI.

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

Image of CubicPadSynth GUI.

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

Image of EsPhaser GUI.

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 stage is 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

Image of EnvelopedSine GUI.

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

Image of IterativeSinCluster GUI.

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

Image of TrapezoidSynth GUI.

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

Image of FDNCymbal GUI.

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->Feedback to 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

Image of WaveCymbal GUI.

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.

Image of block diagram of WaveCymbal.

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.

SyncSawSynth

Image of SyncSawSynth GUI.

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.

Derivation of higher order PTR equations (Japanese).

SevenDelay

Image of SevenDelay GUI.

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).

Other Notice

Plugins using filter from:

License

GPLv3. See License directory for the complete license.

Library

Font

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages