S-ACDC
Fwuzeem Audio S-Series
What it is
S-ACDC is a four-voice MIDI instrument that turns fixed floating-point oscillator values into audio. Its Square oscillator changes a DC value into an exact square wave by flipping the IEEE-754 sign bit; Sine, Triangle, and Sawtooth modes use the same raw oscillator core. Each voice has an exponent-quantized ADSHR envelope, a 12 dB/octave high-pass filter, V-Shift-style input and output stages, and an optional Neural Amp Modeler (NAM) engine. The four voices are summed into an optional master NAM and a master shift stage. The oscillators are intentionally not band-limited, so aliasing is part of the sound.
Controls & parameters
Per-voice controls
The following parameters exist for each voice, with n equal to 1, 2, 3, or 4.
| Parameter ID | Display name | Range | Default | What it does |
|---|---|---|---|---|
v{n}_mode | V{n} Mode | Square, Sine, Triangle, Sawtooth | Square | Selects the oscillator shape. |
v{n}_oct | V{n} Octave | -3 to +3, step 1 | 0 | Multiplies the MIDI-derived frequency by 2^octave. |
v{n}_lvl | V{n} Level | -20 to 0 shifts, step 1 | -2 | Applies an exponent shift to the voice level. |
v{n}_sIn | V{n} Shift In | -20 to +20 shifts, step 1 | 0 | Applies exponent gain before the voice NAM. |
v{n}_sOut | V{n} Shift Out | -20 to +20 shifts, step 1 | 0 | Applies exponent gain after the voice NAM. |
v{n}_nb | V{n} NAM Bypass | Boolean | true | Bypasses the voice NAM stage. |
v{n}_atk | V{n} Attack | 1 to 5000 ms, parameter step 0.1 ms | 10 ms | Attack time. |
v{n}_dec | V{n} Decay | 1 to 5000 ms, parameter step 0.1 ms | 150 ms | Decay time after the hold stage. |
v{n}_hold | V{n} Hold | 0 to 2000 ms, parameter step 0.1 ms | 0 ms | Time held at the peak after attack. |
v{n}_rel | V{n} Release | 1 to 10000 ms, parameter step 0.1 ms | 300 ms | Release time after note-off. |
v{n}_sus | V{n} Sustain | 0 to 100%, step 1% | 100% | Level held by the sustain stage. |
v{n}_hpf | V{n} High-pass | 20 to 18000 Hz, step 1 Hz | 20 Hz | Cutoff of the per-voice TPT state-variable high-pass. |
v{n}_hpq | V{n} High-pass Q | 0.5 to 20, parameter step 0.01 | 0.70710678 | Resonance Q of the high-pass filter. |
The envelope runs in the order Attack -> Hold -> Decay -> Sustain -> Release. Its continuous value is converted to a whole exponent shift before it reaches the audio path; see Notes / caveats.
Master and tuning controls
| Parameter ID | Display name | Range or choices | Default | What it does |
|---|---|---|---|---|
m_lvl | Master Level | -20 to 0 shifts, step 1 | 0 | Applies an exponent shift after the master NAM. |
m_sOut | Master Shift Out | -20 to +20 shifts, step 1 | 0 | Applies the final master exponent shift. |
m_nb | Master NAM Bypass | Boolean | true | Bypasses the master NAM stage. |
tune | Tuning | 12-TET, Just | 12-TET | Selects equal temperament or the implemented just-intonation ratio table. |
bypass | Bypass | Boolean | false | Silences the instrument output before rendering. The editor Power control inverts this parameter. |
NAM controls in the editor are separate from the parameters above:
LOAD VOICE NAMopens a.namfile chooser. The selected file is instantiated in each of the four voice NAM engines.<and>cycle sorted sibling.namfiles in the selected model directory.Clearremoves the voice model.LOAD MASTER NAM,<,>, andClearprovide the equivalent controls for the master NAM.- A successful editor load or navigation action clears the relevant NAM bypass. NAM bypass controls are disabled when no model is loaded.
LFO controls
There are two independent LFOs. Replace n with 1 or 2 in the IDs below.
| Parameter ID | Display name | Range or choices | Default | What it does |
|---|---|---|---|---|
l{n}_rate | LFO{n} Rate | 0.1 to 20 Hz, parameter step 0.01 Hz | 1 Hz | Sets the LFO rate. |
l{n}_dep | LFO{n} Depth | 0 to 1, step 0.01 | 0 | Sets the LFO amplitude. |
l{n}_shp | LFO{n} Shape | Square, Sine, Triangle, Sawtooth | Square | Selects the LFO waveform. |
l{n}_tgt | LFO{n} Target | Off, Pitch, Level | Off | Routes the LFO to pitch or exponent level modulation. |
A Pitch LFO changes frequency with a power-of-two ratio. A Level LFO is converted to rounded shifts, up to approximately +/-10 shifts at full depth. The LFO samples are shared by all four voices, so their modulation phase is coherent.
Workflow / how to use it
- Insert S-ACDC as a MIDI instrument and send it MIDI notes. The four voices are additive layers, not four independent MIDI notes.
- Select a tuning system. Start each voice with its mode at
Square, octave at0, and level at its default-2shift, then choose different octaves and modes to build a layer. - Shape each voice with Attack, Hold, Decay, Sustain, and Release. Remember that Hold comes before Decay in this implementation.
- Use High-pass and High-pass Q to remove low energy or emphasize resonant movement before the NAM stage.
- Load one voice
.namfile if neural amp character is wanted. That file is used by all four voice engines; use Shift In to drive it and Shift Out to restore level. Load a separate master.namfile when the summed bus also needs neural coloration. - Set Master Level and Master Shift Out after the model stages. Think in doublings and halvings:
+1shift isx2, and-1shift isx1/2. - For movement, set an LFO shape and rate, raise Depth, and choose Pitch or Level as its Target. Leave Target at
Offwhen the LFO should not affect the sound. - Use Bypass for a silent output comparison. Save the plugin state if the model paths and parameter settings need to follow the session.
Use cases
- Bit-crushed-style synth tones. Use Square, Triangle, or Sawtooth modes with intentionally stepped exponent levels and the raw oscillator aliasing. This is a character instrument, not a clean anti-aliased subtractive oscillator.
- Neural-amp-driven oscillators. Load a voice NAM capture, raise Shift In to drive it by exact doublings, and use Shift Out for inverse makeup. The same capture colors all four layered voices through their independent NAM engines.
- Four-voice layered drones. Set different modes, octaves, high-pass cutoffs, and long ADSHR times across the four fixed voices. Use the master NAM only when the combined texture should share a final nonlinear stage.
- Rhythmic LFO modulation. Use a Square or Sawtooth LFO targeting Level for stepped rhythmic changes, or target Pitch for power-of-two pitch movement. The two LFOs can address different targets at once.
- Ratio-based gain staging. Use
+1on a voice Shift In and-1on Shift Out to drive the voice NAM byx2while restoring the staging ratio. Stacking shifts counts doublings directly:+2isx4.
Specs & requirements
- Brand: Fwuzeem Audio; manufacturer code
Fwzm. - Formats: AU and VST3. The current CMake target is an instrument and has no Standalone target.
- Audio I/O: MIDI input, no audio input bus; mono or stereo output. The mono synth signal is copied to each output channel.
- MIDI behavior: Last-note-wins monophonic handling. Note-on resets oscillator phase, high-pass state, and envelope state for all four voices. Note-off and all-notes/all-sound-off messages enter release. No sustain-pedal or glide implementation is present.
- Processing precision: FP32 engine processing. FP64 host callbacks are accepted through a float conversion bridge.
- Sample rates: Host-driven; no fixed sample-rate list is declared by the processor.
- Latency and tail: Reported latency is 0 samples with no loaded NAM. With a model loaded, latency comes from the NAM resampling container and varies with the model and host rate. Reported tail length is 10 seconds.
- Programs and state: One host program; parameters are saved as APVTS XML. Voice and master model paths are saved. A missing model path remains in state but leaves that model unloaded.
- External assets: NAM files are loaded by the user. No bundled default
.nammodel is present in the plugin source tree. - Platform: The workspace audio-toolbox build guidance targets macOS 10.15 or later.
Notes / caveats
- Aliasing is by design. The Square sign flip and the other raw oscillator shapes are un-band-limited. The source explicitly embraces the resulting aliasing as lo-fi character.
- The envelope is exponent-quantized. For a positive envelope value, the applied shift is
round(log2(value)), clamped to -20 through 0. Values at or below2^-20are silenced. This produces approximately 6.0206 dB steps rather than a smooth gain contour. - The sine is deliberately rational. The Bhaskara-style sine approximation uses
355/133in place of pi. This is an explicit design choice, not a typo or a claim of a conventional sine implementation. - High-pass cutoff has an internal clamp. The parameter is exposed as 20 to 18000 Hz, but the DSP clamps the effective cutoff to 10 Hz through
0.45 * sampleRate. The usable upper edge therefore depends on the host sample rate. - Just tuning uses a fixed reference. The Just option uses C4 at 261.6256 Hz as its root and applies the source’s integer-ratio table; it is not host tuning.
- NAM loading is per stage but the voice file is shared. One selected voice file creates four voice NAM engines; the master has a separate file and engine. NAM processing uses a 12x resampling container at the model’s expected rate.
- The oscillator starts at amplitude 0.25 per voice. Final MIDI velocity is a linear multiply; the other documented level and shift stages use exponent operations.
- Four voices are fixed additive layers. They are not four-note polyphony. A new MIDI note replaces the current note in the monophonic MIDI state.
- The editor’s model loading actions are not state-neutral for bypass. Loading or navigating a model through the editor un-bypasses the relevant NAM stage; restoring a saved state preserves the saved parameter values.