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 ID | Display name | Range / choices | Default | What it does |
|---|---|---|---|---|
gain | Output Shifts | -20 to +20, integer | 0 | Master output shift. Link reception writes the inverse of the transmitter value here; this shift affects the wet branch. |
dryGain | Dry Shifts | -20 to 0, integer | 0 | Exponent shift for the dry branch. Attenuation only. |
wetGain | Wet Shifts | -20 to 0, integer | 0 | Additional exponent shift for the wet branch. Attenuation only. |
dryMute | Dry Mute | Boolean | true | Mutes the dry branch. |
wetMute | Wet Mute | Boolean | false | Mutes the wet branch. |
link | Link Enabled | Boolean | true | Enables polling of the selected VShiftLink.xml slot. |
linkID | Link Channel | choices 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
- Insert V-ShiftIn before the send or hardware stage and V-ShiftOut after the return or receive stage.
- Enable
linkon both instances and select the samelinkIDfrom 1 to 16. - Set the In gain. Out receives the negated value: In
+nmakes the linked Out-n. - Leave
dryMutetrue andwetMutefalse when the intended path is the linked wet receive path. AdjustwetGainfor an additional receive-side attenuation if needed. - For a dry/wet comparison, unmute the dry branch and use
dryGainandwetGainto establish the desired ratio. Mute either branch while calibrating the other. - If link state is not wanted, disable
linkand setgainlocally. Remember that linked updates write the output gain parameter and can release theMIC LEVELgesture.
The signal routing is explicit:
- Dry branch:
dryGainonly, unlessdryMuteis true. - Wet branch:
gain + wetGain, unlesswetMuteis 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
wetGainfor a further attenuation. UsedryGainto 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 asdryGainorwetGain. - Fixed line-to-mic output pad. Engage
MIC LEVELfor 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.
ScopedNoDenormalsand 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
gainand the linked inverse are wet-branch controls only. With dry unmuted, the dry signal does not receive that linked compensation. The defaultdryMute=truemakes the normal linked receive path wet-only. - Link transport is a message-thread
PropertiesFileplusInterProcessLock, 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=trueand channel 1 as defaults, an unpaired instance can adopt a staleSharedGain_1value from an earlier sender. Select a deliberate channel or disable link before trusting the output. - The
MIC LEVELpad 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.