Skip to content

Repository files navigation

SA_WAVER

SA Waver is a waveshaper distortion/saturation audio plugin built with Rust, nih-plug, and egui.
It reshapes the input waveform through an editable transfer curve, making it useful for distortion, saturation, wave shaping, dynamic coloration, and automation-driven sound design.

Screenshot

Features

  • Fully editable waveshaper curve
  • Segment generator: insert sine / triangle / square / stairs shapes between two knots
  • Math formula curve generator: type in sin(a*x) to produce exact shapes (sine folds, etc.)
  • Real-time preview of the input/output mapping and output waveform
  • Three core parameters: Pre Gain, Post Gain, and Mix
  • Preset loading and saving
  • Symmetric / asymmetric shaping modes
  • Optional Linear Ext. mode
  • Adjustable grid size with grid snapping for knots and spline handles
  • Up to 8x oversampling to reduce aliasing
  • 8 host automation slots that can be bound to curve node coordinates
  • Supports VST3 and CLAP, plus a standalone build

macOS builds currently provide VST3 and CLAP plugins. The Windows installer is not built on macOS; install the bundles to ~/Library/Audio/Plug-Ins/VST3 and ~/Library/Audio/Plug-Ins/CLAP, or copy them manually.

Basic Usage

  1. Insert SA Waver on a track, bus, or sound source.
  2. Use Pre Gain to push the signal into the shaping range.
  3. Drag nodes in the curve editor to define the transfer function between input and output.
  4. Use Post Gain to compensate output level, and Mix to blend dry and wet signal.
  5. Increase Oversample if you want to reduce high-frequency aliasing artifacts.
  6. Switch Symmetry when you want either mirrored shaping or independent negative-half processing.
  7. Select two knots and use the segment generator (or a math formula) to insert shapes between them.

Formula Generator

Select exactly two knots, then pick Formula from the generator dropdown:

  • Type a formula using the curve coordinate x, constants (pi, e, tau), and your own variables
  • Use explicit * for multiplication, e.g. sin(a*x) (not sin(ax))
  • Vars opens a window to create / edit / delete variables; click ? for the full reference
  • The curve between the two knots is replaced by y = f(x) sampled at 64 points

Examples: sin(a*x) (sine fold, sweep a), 0.5 + 0.5*sin(x*pi*4), clamp(x*2, 0, 1), lerp(0, 1, x^2).

Interface Overview

  • Pre Gain: input gain before the waveshaper
  • Post Gain: output gain after shaping
  • Mix: dry/wet balance
  • Curve editor: defines how input values are mapped to output values
  • Oscilloscope area on the right: shows recent output waveform history
  • Preset: loads built-in or local presets
  • Linear Ext.: extends the curve linearly beyond the last point instead of clamping
  • Oversample: raises the internal sample rate to reduce aliasing
  • Settings: opens additional display, grid, automation binding, and curve-generation options
    • Grid: adjust the horizontal / vertical grid step (only active in Linear display mode)

Shortcuts and Controls

Parameter Knobs

  • Drag with the mouse: adjust the parameter
  • Shift + drag: fine adjustment
  • Double-click a knob: reset to default
  • Ctrl + click a knob: reset to default
  • Click the value text: enter a value manually
  • Press Enter while editing a value: confirm
  • Press Esc while editing a value: cancel

Curve Editing

  • Left-drag a node: move the node (snaps to special positions; Shift quantizes to 0.1 steps)
  • Left-click empty space: clear the current selection
  • Left-drag empty space: marquee-select multiple nodes
  • Ctrl + left-click a node: add/remove it from the selection
  • Middle-drag: pan the view
  • Delete or Backspace: delete the selected node(s)
  • Left-drag a spline handle (cubic curves): adjust slope / weight; handles snap to the grid (Shift quantizes, Alt disables snapping)
  • Right-click a spline handle: set position (x/y), slope, weight, or edit mode via the context menu

Building

cargo xtask bundle sa_waver --release

On macOS, run the command above on an Apple Silicon or Intel Mac. The resulting VST3 and CLAP bundles can be tested locally, but releases are not currently code-signed or notarized.

About

Next waveshaper plugin (VST3/CLAP), written in Rust

Resources

Stars

16 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages