/SOUL-VA

The SOUL Virtual Analog Library

GNU General Public License v3.0GPL-3.0

SOUL-VA_logo

The SOUL Virtual Analog Library

SOUL-VA is a collection of analog-inspired audio effects. Unlike other libraries, this project achieves analytical solutions and a strict -60dB peak amplitude limit for aliasing artifacts.

A 1.0.0 Github release will be uploaded once two VA::Highlevel Processors are finished, thoroughly tested, and documented (Approx. December 2021).

Background Knowledge

This library considers background knowledge trivial; SOUL-VA will not re-explain any of the following concepts:

To use the high-level features (VA::HighLevel namespace), read:

  1. SOUL language guide
  2. soul::filters

To use the entire library (all namespaces), also read:

  1. The Art of VA Filter Design (through Chapter 6)
  2. Antiderivative Antialiasing for Memoryless Nonlinearities

Contents

  • include/VA.soul - single-file library
  • examples/main.soul - example [[main]] instance for instantiating Processors from VA.soul
  • examples/main.soulpatch - 'includes' and 'links' VA.soul with main.soul
  • tests/testMain.m - script that runs test cases on main.soulpatch
  • tools/soul.json - VSCode snippets

Official Ways to Use SOUL-VA

  1. SOUL Playground
    Copy VA.soul, main.soul, and main.soulpatch into the editor. Delete '../include/' on line 13 in main.soulpatch. Click 'Compile' to run in mono mode. To enable stereo processing, modify main.soul according to the instructions.
  2. SOUL CLI 1.0.82
    Read the CLI instructions by executing soul.exe in a terminal and use main.soulpatch as the <soul file>. Stereo processing and higher oversampling rates will not compile using this method.
  3. Octave 6.3.0
    Include soul.exe in the 'Path' environment variable. Set SOUL-VA/tests/ as the current working directory in Octave and run testMain(44100). See testMain.m for more info on test cases and usage.

Contributing

Please post bugs in issues and feature requests in discussions. Bug fixes take priority. Pull requests are not accepted at the moment.

Octave Examples

The following sections explain the output after running testMain (44100) on different VA::HighLevel effects (instantiated in Processor [[main]]). The script is useful for catching common errors in development without needing to listen to processed samples.

Example 1: Dummy

The system is trivial (and linear) and simply passes signals through unmodified. Notice how the step response is actually a pulse signal with values 0.5 and 0.25 so that the test can measure overshoot and undershoot. Dummy2
Dummy1

Example 2: OnepoleC_Lan (nonlinearity = 200)

The system is significantly nonlinear and all outputs show some sort of distortion. While the magnitude response applies only to linear systems, its plot in the output accurately predicts that OnepoleC_Lan tends to boost bass frequencies. OnepoleC_Lan(200)2
OnepoleC_Lan(200)1

Example 3: OnepoleC_Lan (nonlinearity = 500)

The system is significantly nonlinear, but does not meet the standards of this library. Not all aliasing components are less than -60dB as shown by the non-DC inharmonic partials in the bottom right-hand corner in 'SinSweep (BW)'.
OnepoleC_Lan(500)2
OnepoleC_Lan(500)1