Geraint's JSFX repository

This is a collection of audio effects I have written in REAPER's JSFX language.

Download them from GitHub, or as a ZIP file, or on ReaPack by adding the repository:

There's also a growing set of video demos/tutorials, although not all effects are covered (yet).

Smooth Limiter

This is a brick-wall limiter that aims to keep the correction curve smooth while remaining responsive.

It will recover completely from any peak in a fixed amount of time. Both the attack and release follow a curve that is similar to a sinusoidal segment (1 + cos(x)), with the goal of reducing cross-modulation.


The "distortion" parameter changes the correction mode - at 0%, the correction is applied by scaling the output signal. At 100%, the correction is applied using a non-linear distortion (smooth, not a hard-clip), which can sound good for some applications such as drums. The display in the bottom-left shows the current correction response.

Learning Sampler

This sampler records samples from the incoming audio when in learning mode (selected by a controller switch), and plays them back when in playback mode.

To record the samples, set the appropriate controller to a value of 64 or above. While this controller is down, when you play a MIDI note the sampler will remember the start/end positions in the buffer. When you have recorded all the samples, reset the controller to 0, and it will enter playback mode.


Samples are scaled according to velocity - if you record at velocity 100 and then play back at velocity 110, the output will be louder than the original input.

It currently does handle sample-rate changes.

MIDI Harmony

This effect shifts MIDI notes up or down by octaves, to fit within a target range. This can be used to fold whatever chord is being played by some other instrument into a particular region (e.g. one octave around Middle C).

It has a single-note and a chord mode. It also has a built-in sequencer, which can be used as an arpeggiator (so it will play a pattern, but only using octave-shifted notes that you are already holding down).


It also has a MIDI-input mode - this way, instead of the target region or note being fixed (e.g. "one octave around Middle C") it is defined by a second input on a different MIDI channel (channel 16 by default).

This lets you very quickly take one MIDI input, and re-cast it into a different scale or a different chord.


This effect draws the incoming audio on a 2D plot, so you can visualise the stereo field. You can also alter the width/pan using the controls.


It's possible to rotate the field such that hard-left or hard-right inputs will output "inside out" (opposite phase in both output channels). In this case, the Width dial will turn red - double-click the dial to reset it to the maximum "safe" width:


Piano Display

This displays MIDI notes as a scrolling piano roll.

It was created as a nice way to display keyboard input when making demo videos.


Stereo Alignment Delay

A tool to make small delays to individual channels, including a delay analyser.

Delay amount can be displayed in ms or samples. (It is stored in ms, so if you change sample rate then it will preserve delay length regardless of the display format).


The delay analyser detects when one channel is ahead/behind or out of phase with the other - this can be useful when trying to get phases to agree in a multi-mic setup.