|SoX Plugins for DAW Audio Processing|
The SoX-Plugins software package provides plugins for being used in digital audio workstations (DAWs); they implement some of the more prominent audio processing effects from SoX as DAW audio plugins.
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. It provides several standard audio effects (like e.g. filters or reverb) in good quality and with a transparent, open-source implementation.
The plugin implementation is completely free, open-source, platform-neutral and based on the JUCE audio framework. Currently only a version for VST3 plugins under Windows 10 is provided, but porting to other targets should be straightforward, since building is supported by a platform-neutral CMAKE build file in the repository.
The effects provided in this package are a complete rewrite in C++ of the original SoX algorithms nevertheless aiming at producing (bit-exact) identical renderings in the DAW. This goal is achieved: when rendering some audio externally with SoX and internally with the plugins, there is almost no difference. After rendering and subtracting the results, they cancel out with typically a residual noise of less than -140dBFS — as shown in figure 1 below — due to rounding or precision errors (SoX often uses 32bit integer processing, while the SoX-Plugins always use double floating point processing).
The main motivation for this package is to be able to play around with effects in a DAW and be sure that any 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.
Only a selection of SoX effects has been reimplemented as plugins, but those are the ones that are — in my opinion — the more prominent effects in that suite.
Because SoX very often uses rich command line options for its effects, not every effect configuration from SoX can be transported into the slider oriented GUI of the SoX-Plugins. For example the compander of SoX allows the definition of a transfer function having multiple segments. Although the internal engine of the SoX-Plugins 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. Also the parameter ranges are somewhat debatable, because they simply reflect the parameters of the SoX command-line effect.
The redesign and restructuring has also been done for easier maintenance, because there is some redundancy and unnecessary complexity in the original source due to its several contributors. Nevertheless — as pointed out — the effects provided here faithfully model the SoX command-line processing.
All the code is available open-source at GitHub; hence you can check and adapt it to your needs.
The following effects are supported:
- a biquad allpass filter two-poled with filter frequency and the filter bandwith (in several units)
- a biquad bandpass filter with center filter frequency and the filter bandwith (in several units) and an option for unpitched audio
- a biquad filter for bandpass or bandreject with center filter frequency and the filter bandwith (in several units)
- 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)
- a generic biquad (iir) filter with 6 coefficients b0, b1, b2, a0, a1 and a2
- 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
- a biquad filter for equalizing with settings for the pole count, the filter frequency and the filter bandwith (in several units)
- a volume changer by exact decibels...
- a biquad filter for either lowpass or highpass with settings for the pole count, the filter frequency and the filter bandwith (in several units)
- 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
- a simple tanh distortion with gain and colour specification
- a phaser effect with sine or triangle modulation
- a reverb effect (based on Freeverb) with several parameters for the room (like size and HF damping) as well as a possible predelay
- a tremolo effect with sine modulation using a double-sideband suppressed carrier modulation
Figure 2 shows an example for one of the plugins: this is the UI for the phaser effect.
In Gain is the amplification factor for
the input in decibels.
Delay gives the delay
Decay a factor for the decay
within the phaser and
Frequency gives the
modulation frequency in Hz. The
the modulation is either sinusoidal or triangular.
Out Gain is the volume of the output.
If you are acquainted with the SoX command-line effects, you can see that this is a direct representation of the parameter list in the "phaser" effect.
Note that the interface just shows the input parameters. There is no effect display of any kind: the focus lies on the exact reproduction of the external SoX commands within a DAW.
Installation of the SoX-Plugins
The installation in Windows is as follows:
Copy the distribution folder from GitHub.
Copy the plugins from the platform subdirectory (Windows-AMD64, Darwin-X64 or Linux-X64) into the directory for VST plugins of your DAW.
If interesting for you, the distribution also contains a documentation pdf file in subdirectory
docand test files in subdirectory
test(for details on the regression test see the documentation).
When installing the plugins on MacOSX, note that those are not signed; so you have to explicitly remove the quarantine flag from them (e.g. by applying the command
sudo xattr -rd com.apple.quarantine «vstPath»).
Restart your DAW. You should now be able to select the SoXPlugins (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.
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!