Status¶
Alpha (0.0.x). The public API can change between releases. Know these facts before you depend on the library.
Freeverb diverges from the C++ backend¶
The generated Freeverb diverges from Faust’s C++ backend at sample 1116 and after. Sample 1116 is the length of its shortest comb delay, and the divergence occurs in the comb feedback path. The divergence is not a float32 chaos effect: a 1-ULP perturbation of the input changes the output by 0. Every other effect matches the C++ backend to less than 2e-5 maximum absolute error. Do not use Faustax if you need bit-comparable Freeverb output.
The vectorizer is opt-in and self-checking¶
compile_dsp(vectorize=True) and compile_file(vectorize=True) reroll scalar-unrolled par() banks into vector ops.
This pass produced a miscompile in the past.
Therefore it now renders a block through the scalar module and through the rerolled module at compile time.
It keeps the rerolled module only when the two outputs are bitwise-identical.
When the outputs differ, it falls back to the scalar module and emits a warning.
The output is correct in both cases, so do not assume that you got the fast path.
Not every Faust program is differentiable¶
A hard threshold, such as a gate, has zero gradient by construction.
Integer DSP, such as an int() cast or a table lookup, breaks the gradient chain.
These effects still compile and still render.
Use them with derivative-free optimization or with RL-based optimization.
Regeneration of the modules needs an unreleased Faust¶
The NNX backend is in Faust’s master-dev branch, and no tagged release contains it yet.
This constraint applies to contributors only.
The repository contains the generated modules, so use of Faustax needs no Faust at all.
See Development for the regeneration procedure.