Product manual

Back to V-ShiftOut

V-ShiftOut

Fwuzeem Audio V-Series

What it is

V-ShiftOut is the receiver in the V-ShiftIn -> V-ShiftOut linked pair. It reads a transmitter shift from the selected VShiftLink.xml channel and applies its inverse to the wet branch. It also provides independent dry and wet attenuation shifts and branch mutes, so the same processor can be used for hardware-loop calibration, parallel comparisons, and controlled compensation. The linked master shift applies to the wet branch; the dry branch remains under its own dryGain control.

Controls & parameters

Parameter IDDisplay nameRange / choicesDefaultWhat it does
gainOutput Shifts-20 to +20, integer0Master output shift. Link reception writes the inverse of the transmitter value here; this shift affects the wet branch.
dryGainDry Shifts-20 to 0, integer0Exponent shift for the dry branch. Attenuation only.
wetGainWet Shifts-20 to 0, integer0Additional exponent shift for the wet branch. Attenuation only.
dryMuteDry MuteBooleantrueMutes the dry branch.
wetMuteWet MuteBooleanfalseMutes the wet branch.
linkLink EnabledBooleantrueEnables polling of the selected VShiftLink.xml slot.
linkIDLink Channelchoices 1 through 16 (APVTS index 0 through 15)1 (index 0)Selects the SharedGain_1 through SharedGain_16 slot read by this instance.

The editor has three rotary controls labelled OUTPUT, DRY, and WET. Their readouts show the shift-equivalent level, and the output readout also shows N SHIFT(S). Standard view adds the MIC LEVEL button, LINK CH combo, dry/wet panels, and MUTE buttons. Full view adds the host precision readout (FP32 or FP64). The three-tier guiDetail state property is 0 Simple, 1 Standard (default), or 2 Full.

MIC LEVEL is a UI pad gesture, not a separate parameter. It subtracts 8 shifts (x1/256) from gain, clamped to the gain range, and restores the saved value when released. A manual output-gain move disengages it.

Workflow / how to use it

  1. Insert V-ShiftIn before the send or hardware stage and V-ShiftOut after the return or receive stage.
  2. Enable link on both instances and select the same linkID from 1 to 16.
  3. Set the In gain. Out receives the negated value: In +n makes the linked Out -n.
  4. Leave dryMute true and wetMute false when the intended path is the linked wet receive path. Adjust wetGain for an additional receive-side attenuation if needed.
  5. For a dry/wet comparison, unmute the dry branch and use dryGain and wetGain to establish the desired ratio. Mute either branch while calibrating the other.
  6. If link state is not wanted, disable link and set gain locally. Remember that linked updates write the output gain parameter and can release the MIC LEVEL gesture.

The signal routing is explicit:

  • Dry branch: dryGain only, unless dryMute is true.
  • Wet branch: gain + wetGain, unless wetMute is true.
  • Output: the unmuted dry and wet branches are summed.

Use cases

  • Hardware loop calibration. Raise a send with V-ShiftIn by +2 shifts (x4), let V-ShiftOut receive -2 shifts (x1/4), and compare the returned hardware path without manually recalculating the inverse ratio.
  • Linked parallel compensation. Keep the linked inverse on the wet branch and use wetGain for a further attenuation. Use dryGain to place an unlinked dry reference against that wet path.
  • Dry/wet mute workflow. Begin with the default dry-muted/wet-active state to hear the receive path. Toggle wet mute and dry mute in turn to audition each branch, then unmute both for the parallel sum.
  • Controlled parallel level. Because two unity branches sum to x2, use a -1 shift (x1/2) trim on one branch when a unity-sum comparison is required. The branch trims are attenuation-only, so this is available directly as dryGain or wetGain.
  • Fixed line-to-mic output pad. Engage MIC LEVEL for the -8-shift (x1/256) output pad, then release it to restore the previous output shift.

Specs & requirements

  • Formats: AU and VST3.
  • Main audio bus: stereo in and stereo out. Matching mono input/output layouts are also accepted by the processor.
  • Processing: FP32 and FP64, selected by the host.
  • Reported latency: 0 samples; tail length is 0 seconds.
  • Platform target: macOS 10.15 or later.
  • MIDI: not a MIDI effect; no MIDI input or output.
  • Programs: one host program; state is stored as APVTS XML.

Notes / caveats

  • The exponent operation is exact for normal finite (non-subnormal) samples when a nonzero shift is applied: each shift changes the exponent field by one step and leaves the mantissa intact. ScopedNoDenormals and the zero-skip handling keep subnormal inputs out of the exponent path, avoiding denormal processing. NaN and overflow cases are sanitized to finite values or clamp to the largest finite value; zero samples are skipped. Gain changes are not smoothed.
  • The master gain and the linked inverse are wet-branch controls only. With dry unmuted, the dry signal does not receive that linked compensation. The default dryMute=true makes the normal linked receive path wet-only.
  • Link transport is a message-thread PropertiesFile plus InterProcessLock, not audio-thread shared memory. V-ShiftOut polls the persistent XML file about five times per second; the audio callback only reads the resulting parameter atomics.
  • The persistent file has no writer identity, timestamp, expiry, or automatic channel clearing. With link=true and channel 1 as defaults, an unpaired instance can adopt a stale SharedGain_1 value from an earlier sender. Select a deliberate channel or disable link before trusting the output.
  • The MIC LEVEL pad is an 8-shift gesture, not a separate persisted parameter. Its saved/restored gain is bounded by -20 to +20.
  • The float and double exponent implementations have different boundary handling; the plugin reports 0 host latency, but numeric overflow/underflow behavior is still bounded by the implementation.
Back to V-ShiftOut plugin page