V-ShiftIn
Fwuzeem Audio V-Series
What it is
V-ShiftIn is the transmitter in the V-ShiftIn -> V-ShiftOut linked pair. It applies the same literal IEEE-754 exponent-shift gain law locally, then publishes its selected shift count to one of 16 link channels in VShiftLink.xml. A matching V-ShiftOut reads that channel and applies the inverse shift. V-ShiftIn is therefore the send-side gain stage and link master, not a shared-memory audio router.
Controls & parameters
| Parameter ID | Display name | Range / choices | Default | What it does |
|---|---|---|---|---|
gain | V-Shift In | -20.0 to +20.0, step 1.0 | 0.0 | Applies the local exponent shift and publishes that shift when linking is enabled. |
link | Link Enabled | Boolean | true | Enables the transmitter’s writes to the selected link slot. |
linkID | Link Channel | choices 1 through 16 (APVTS index 0 through 15) | 1 (index 0) | Selects the SharedGain_1 through SharedGain_16 slot written by this instance. |
masterPolarityL | Polarity Invert L | Boolean | false | Deferred sign-bit polarity inversion for the left channel; not part of the link value. |
masterPolarityR | Polarity Invert R | Boolean | false | Deferred sign-bit polarity inversion for the right channel; not part of the link value. |
The gainSlider is a rotary control with a signed shift readout and the caption SHIFT (STEPS). The context readout uses Unity, Increase, Reduce, Line to mic level at exactly -7, and Deep attenuation at -8 and below, with an x N or 1 / N factor.
The MIC LEVEL button is a UI pad gesture, not a separate APVTS parameter. When engaged it subtracts 8 shifts from the current gain, giving x1/256, then restores the saved gain when released. The result is clamped to the gain range, so a value near -20 remains at the lower bound. A manual gain move disengages the button. The LINK CH combo selects channel 1 through 16.
The GUI detail selector is the persisted guiDetail state property, with values 0 to 2 and default 1:
0Simple: gain control and value readout.1Standard: context readout,MIC LEVEL, andLINK CH.2Full: Standard controls plusFP32orFP64host-precision readout.
The polarity button normally toggles both channels. Alt-clicking its left or right half toggles only L or R.
Workflow / how to use it
- Insert V-ShiftIn at the send-side gain stage.
- Set
gainas an integer number of doublings or halvings. For example,+2is x4 and-3is x1/8. - Enable
Link Enabledand choose a channel from 1 to 16. Use the same channel on V-ShiftOut. - Insert V-ShiftOut at the receive side. Keep its link enabled and match its
LINK CHselection. - Confirm that the receiver follows the transmitter with the inverse shift: In
+ncauses Out-n. - Use
MIC LEVELonly for the local -8-shift pad. It changes the local gain and the transmitted value while it is engaged.
Use cases
- Send-side gain with receive-side auto-compensation. Raise the signal at V-ShiftIn by
+1 shift (x2)and let a matching V-ShiftOut apply-1 shift (x1/2)later. The pair preserves the ratio while making the gain stage explicit. - External hardware send/return. Use a positive In shift before a hardware stage, then let Out reduce by the same number after the return. This keeps the software-side compensation tied to the transmitter rather than to a guessed dB value.
- Sixteen independent pairs. Assign each In/Out pair a different
linkID, from 1 to 16, so multiple gain-stage pairs can coexist in a project. - Line-to-mic staging. Engage
MIC LEVELfor the fixed -8 shift (x1/256) when the receiving input expects a much lower level. Release it to restore the saved shift. - Ratio automation. Automate the transmitter in integer states and let the receiver follow. A
+1then-1pair is a unity round trip; a+2then-2pair is x4 followed by x1/4.
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 gain law is direct exponent-field manipulation. For a nonzero shift, normal finite (non-subnormal) samples get the exact ratio:
+1doubles and-1halves.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 has no smoothing, so stepped changes can have zipper character. - The link transport is a JUCE
PropertiesFilebacked by the XML fileVShiftLink.xml, guarded by anInterProcessLock. On macOS its folder is~/Library/Application Support/VShift/. The sender reloads and writes on a 30 Hz message-thread timer; file I/O is not performed in the audio callback. - The link publishes gain only. L/R polarity inversion remains local and uses deferred sign-bit XOR with a zero-crossing/DC guard.
linkIDis stored as a zero-based APVTS choice index but is presented to users as channels 1 through 16.- The
MIC LEVELpad is an 8-shift gesture, not a separate persisted parameter. Its saved/restored gain is bounded by -20 to +20. - The link file is persistent. It does not represent an audio connection, and it has no automatic project ownership or expiry. A receiver can therefore see a value left by an earlier sender; choose channels deliberately and disable linking when no transmitter should control the stage.