Dr. Thomas Tensi Paganinistraße 60
D-81247 München

JSFX SoX Plugins for Reaper DAW or ReaJS VST Plugin
(Version 0.8)

Overview

The JSFX-SOX software package provides JSFX (Jesusonic) plugins for being used in the Reaper DAW; they implement some of the audio processing effects from SOX. It is also possible to use them in any VST compatible DAW using the freely available ReaJS VST plugin that is able to interpret JSFX files.

SOX is a command line audio processing tool for Unix, Windows and Mac OS that transforms source audio files in several formats into other audio files.

The effects provided in this package are a complete rewrite of the sox algorithms for producing (bit-exact) identical renderings in the DAW. This can easily be checked by rendering some audio externally with SOX and internally with the plugins and subtracting the results. Apart from roundoff errors (SOX often uses 32bit integer processing, while EEL always uses double floating point processing) the results cancel out with typically a residual noise of about -140dBFS as shown in figure 1 below.

The main motivation for this package is to be able to play around with effects in Reaper and be sure that the external rendering by sox will produce exactly the same results. Although sox does not always provide the "best" effects, it still is a reliable and well-defined audio tool.

Because sox has rich command line options for its effects, not every effect configuration from sox can be transported into the slider oriented GUI for JSFX. E.g. the compander of sox allows the definition of a transfer function having multiple segments. Although the internal engine of the JSFX compander implements exactly the same internal segment logic, the user interface only allows the typical definition of a threshold and a compression ratio (with three segments).

Note also that a spiffy user interface is not at all a priority in this project.

The sox effects have been rewritten and restructured for easier maintenance, because in the original source there is some redundancy and unnecessary complexity due to its several contributors. Nevertheless the effects provided here faithfully model the SOX processing.

regression test shows minimal noise floor
Fig. 1: JSFX-SOX Regression Test with a Small Residual Noise

Available Effects

The following effects are supported:

allpass:
a biquad allpass filter two-poled with filter frequency and the filter bandwith (in several units)
band:
a biquad bandpass filter with center filter frequency and the filter bandwith (in several units) and an option for unpitched audio
bandpass/bandreject:
a biquad filter for bandpass or bandreject with center filter frequency and the filter bandwith (in several units)
bass/treble:
a biquad filter for boosting or cutting bass or treble with a shelving characteristics with settings for filter frequency and the filter bandwith (in several units)
biquad:
a generic biquad (iir) filter with 6 coefficients b0, b1, b2, a0, a1 and a2
compand:
a compander with attack, decay, input gain shift, threshold and compression and soft knee; this is a reduced version of SOX compand with only a simple transfer function and a combined attack/decay setting
equalizer:
a biquad filter for equalizing with settings for the pole count, the filter frequency and the filter bandwith (in several units)
gain:
a volume changer by exact decibels...
lowpass/highpass:
a biquad filter for either lowpass or highpass with settings for the pole count, the filter frequency and the filter bandwith (in several units)
mcompand:
a multiband compander with a Linkwitz-Riley crossover filter and for each band a compander with attack, decay, input gain shift, threshold and compression and soft knee; again the companders only allow a simple transfer function and a combined attack/decay setting
overdrive:
a simple tanh distortion with gain and colour specification
phaser:
a phaser effect with sine or triangle modulation
reverb:
a reverb effect (based on Freeverb) with several parameters for the room (like size and HF damping) as well as a possible predelay
tremolo:
a tremolo effect with sine modulation using a double-sideband suppressed carrier modulation

Figure 2 shows an example of a two-band mcompander. Note that the interface just shows the input parameters. There is some option to view debug variables or inspect the JSFX memory, but no effect display of any kind. The focus lies on exact reproduction of the external sox commands within a DAW.

SoX multiband compander panel
Fig. 2: Two-Band MCompander in JSFX-SOX

Installation of the JSFXSOX Effects

The installation in Windows is as follows:

  1. Load the JSFXSOX files from the repository.

  2. Close the Reaper application or your other DAW using ReaJS (if open).

  3. Make a subdirectory Dr_TT in either the Effects directory of the Reaper installation (typically in \Program Files\Reaper\Effects) or - if your DAW uses some different directory for JSFX files - in that directory.

  4. Copy over all *.jsfx and *.jsfx-inc files from the distribution into this directory. If helpful, also add the documentation from the root directory.

  5. If helpful, also copy the test files from test to the effects sub-directory Dr_TT\Test for a regression test.

  6. Restart Reaper (or your other DAW). You should now be able to select the plugins from the JSFX folder (they are all prefixed with "SOX").

Download and Documentation

You can download the distribution from github. The complete PDF documentation can also be found here.

Acknowledgements

This project is a derivative work based on the foundations laid by the SoX community. Although the algorithms used were modified and redesigned, this project would been much more complicated and tedious without this basis.

Hence my thanks go to Chris Bagwell, Nick Bailey, Daniel Pouzzner, Måns Rullgård, Rob Sewell and all the other contributors of the SoX project: without your effort this would not have been possible!