SoX Plugins for DAWs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dear all,

in my opinion SoX is a very powerful package for command-line audio
processing. Hence to be able to exactly mimic its behaviour in a digital
audio workstation (DAW) I have reimplemented its algorithms as
open-source audio plugins for DAWs.

The package "SoX-Plugins" provides VST plugins for the - in my opinion -
more prominent audio processing effects from SoX like filters, gain,
overdrive, compander and reverb.

It is completely free, open-source, platform-neutral, programmed in C++
and based on the JUCE audio framework. Currently only a version for VST3
plugins under Windows 10 is provided, but porting it to other targets
should be straightforward, since building is supported by a
platform-neutral CMAKE build file.

During the reimplementation in C++ I have restructured and simplified
the original C code of SoX for easier maintenance, because there were
some redundancies and unnecessary complexity due to their several
contributors. Nevertheless the implementation aims at producing
bit-exact identical renderings in the DAW, i.e. one can be sure that the
DAW will produce exactly the same results as the external rendering by
SoX. A test subtracting DAW audio and external rendering reveals that
this goal is achieved: apart from roundoff errors (SoX often uses 32bit
integer processing, while the VSTs always uses double floating point
processing) the results cancel out with typically a residual noise of
-140dBFS (with 24 bit FLAC files) or even less for higher external bit
depths.

How can this precise emulation be helpful?

In my use-case I am using a command-line based toolchain for generating
band notation videos from a text file score in the lilypond notation
language plus some configuration file telling about instruments and
audio postprocessing etc. In that tool-chain generation of those
notation videos with audio tracks can be done by command-line
open-source tools from text files _without any human intervention_.
Important part of this tool-chain is SoX, because raw audio generation
from MIDI often needs some beefing up by an audio processor (if you're
interested, you can find details on this approach at GitHub
https://github.com/prof-spock/LilypondToBandVideoConverter).

Of course, since a configuration-driven generation is not very
interactive by nature, you sometimes just have to tweak effect settings
or instruments directly. Hence I am using a DAW on intermediate audio
files of the tool-chain and fiddle with the audio postprocessing there
to get the necessary parameters for the command line tool-chain.

Understandably a spiffy user interface is _not at all_ a priority in
this project, but only the correct reproduction of the SoX algorithms
with adequate (slider or combobox) parametrisation.  Also the parameter
ranges in the UI are somewhat debatable, but they simply reflect the
wide parameter ranges of the associated SoX command-line effect.

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

All in all, the following SoX effects are available in this package:

   allpass, band, bandpass, bandreject, bass, biquad, compand,
   equalizer, gain, highpass, lowpass, mcompand, overdrive, phaser,
   reverb, treble and tremolo

The time-variant effects phaser and tremolo are time-locked (see
documentation for details); hence the rendering can be exactly
synchronized to externally rendered audio snippets.

Documentation is available at
https://github.com/prof-spock/SoX-Plugins/raw/master/SoXPlugins-documentation.pdf,
the package itself is at https://github.com/prof-spock/SoX-Plugins .

Hope this is helpful for you.


Best regards

Thomas

--------------------

P.S.: 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!


_______________________________________________
Sox-users mailing list
Sox-users@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/sox-users




[Index of Archives]     [Linux Sound]     [ALSA Users]     [ALSA Devel]     [Linux Audio Users]     [Linux Media]     [Kernel]     [Photo Sharing]     [Gimp]     [Yosemite News]     [Linux Media]

  Powered by Linux