Skip to content
/ PLUG-QA Public

Quality Assurance (QA) script for audio plugins (.vst3, .component, .dll, .vst, .soulpatch, and .soul).

License

Notifications You must be signed in to change notification settings

thezhe/PLUG-QA

Repository files navigation

Description

PLUG-QA is a Quality Assurance (QA) script for audio effect plugin development (.vst3, .component, .dll, .vst, .soulpatch, and .soul). It displays step, frequency, gain, waveshaper, vectorscope, and spectrogram responses and renders audio files.

Dependencies:

*Install and add to system PATH

Usage

octave qa.m <plugin path>

Outputs (44.1/48 kHz):

  • Logs go to stdout
  • Figures and rendered audio placed in results/
  • Non-zero exit code on common errors

Passing Conditions

  1. No runtime errors.
  2. Spectrogram shows no aliasing partials above -60dB running on a plugin with the most aliasing-prone parameters*.
  3. Common sense (e.g., a low-pass filter should have a low-pass frequency response).
*Only applies to nonlinear plugins. To find the 'most aliasing-prone parameters' set nonlinear parameters (e.g., drive) to max values. For nonlinear parameters (e.g., threshold) that do not linearly correlate with aliasing, set their values to approximately the most aliasing-prone values. Consequently, aliasing is practically inaudible, even though it may surpass -60dB for some untested signal/parameter combinations.

Limitations:

  • Only tested on Windows x64 Octave, but should work on Matlab, Windows/Linux, and ARM with minimal tinkering.
  • Does not replace unit testing, although PLUG-QA may not run on plugins that fail common unit tests.

Examples

Below are some demonstations of the output figures* after running on some SOUL-VA plugins (hereinafter referred to as 'effects'). Please refer to qaFunc.m for a more in-depth explaination of test cases.

*Only 44.1 kHz shown, but the same applies to the tests run at 48 kHz.

Example 1: TheDummy

The effect passes signals through unmodified; therefore, the output figures plot the test signals. Notice how the step response input is a pulse signal with values 0.5 and 0.25 to measure overshoot/undershoot. The DC IO plot (a.k.a. compressor transfer function) and SinRamp IO plot (a.k.a. waveshaper plot) map, respectively, monotonically increasing DC and the product of a sin wave and ramp signal to their outputs. Dummy2
Dummy1

Example 2: TheBass (nonlinearity = 200)

The effect is nonlinear. Even though Magnitude Response is specific to LTI systems, it accuractly predicts that TheBass tends to boost bass frequencies. The DC IO Plot is constant due to the effect's internal DC blocker. 200_0 200_1

Example Effect 3: TheBass (nonlinearity = 500)

The effect is nonlinear, but does not pass PLUG-QA. Aliasing paritials greater than -60dB in peak amplitude appear as lines nonparallel to harmonics/inharmonics or random dots (circled in red) in SinSweep Spectrogram (BW). Unrelated to aliasing, DC noise also appears from 0 to 6 seconds. 500_0 500_1