While we wait for Matt to reappear from his self-imposed exile and implement this feature properly (along with a custom waveshaper, please!), here’s a hack that I’ve never seen mentioned which allows you implement custom phase distortion curves by hand.
If you know Serum, you may know the “Remap” warp mode, which is in a certain sense the grand-daddy of all warp modes. Serum’s (and Vital’s) phase warp modes all essentially just manipulate the output phase of the oscillator relative to the input phase in different ways, and remap allows you to specify a custom curve that relates input phase to output phase using a multi-breakpoint envelope, rather than using a pre-specified curve.
I wished I could do this in Vital, being that Vital is a visually-oriented synth where so many things can be manipulated by drawing curves, but sadly I cannot. However, since Vital supports audio-rate modulation via its keytracked LFOs (which is amazing, by the way), we can hack this together using a couple of fun tricks, provided we are prepared to give up two LFOs to do it.
Imagine an oscillator in Vital as having a “playhead”, which scrubs linearly from the start of the current waveform to the end of it. The rate of this scrubbing is controlled by the frequency of the oscillator (typically, the note you are playing). What we want to achieve is to control the path that playhead takes as the oscillator completes its 0-1 loop of the playhead when it reproduces the note. In order to do that, the first thing we need to do is to cancel the automatic motion of the playhead, and we will use an LFO to do it.
STEP 1
(PIC 1)
Create an LFO with a reverse (1-0) linear ramp. Set it to Keytrack with a 0-semitone shift (it defaults to -12 semitones, or one octave below) and set smoothing to 0. Map this LFO’s output to the phase of the oscillator we wish to warp. (Note: for some reason, Vital treats a phase of 180 as “waveform start” based on the GUI visual of the waveform. I’m not sure why. Leave it as-is; don’t worry about the range, modulating 100% will wrap past 360 phase and keep going correctly, even if the visual doesn’t show it)
EDIT: This is actually wrong, be sure to set the Osc 1 phase to 0% as there are artifacts that will appear if you do not when using more complex waveforms. It’s just not apparent with the basic shapes, presumably due to their rotational symmetry.
If you play a note, and you did it correctly, you will hear nothing. That’s because we’re doing a complete cancellation of the automatic linear INCREASE that playing the oscillator produces; as Vital drives the “phase playhead” from 0 to 1, we’re forcing it to sum with a 1-0 signal, and it gets stuck at the start. That means it never leaves the waveform’s zero-crossing and just produces silence.
STEP 2
(PIC 2)
Now, we create a second LFO. This one is similar to the first; keytracked with a 0-semitone shift, no smoothing, mapped to phase with full intensity. But this one is an inverse of the first; a linear ramp from 0-1. If you did it right, the original waveform will be back again, playing as normal.
It might seem like we’ve accomplished nothing; we’ve modulated the phase one way, and modulated the phase in the opposite way, and now the effect is cancelled out. So what was the point?
Well, now we can think about the LFO 2 “ramp” as a 1:1 mapping between the “phase playhead position” coming in and the “phase playhead position” coming out. As we manipulate the points and curves of this LFO, we can create any arbitrary phase distortion we want* and see the results applied to the output waveform in real time.
(note: for best results, you may want to set phase randomization to 0% on the oscillator itself. Because the LFO phase is not randomized with the same seed as the oscillator, the distortion effect will change with each note
(PIC 3)
If you look closely at the waveform output in the above pictures, you can see how the curve defines where the parts of the basic sine wave will be “spit out” as we scrub through the wave shape with each oscillator cycle
*we are technically limited by the range of the LFO to a single phase cycle of the oscillator. Some warp modes, such as sync, get their effect from wrapping phase around past 360 multiple times. We can achieve this effect by drawing multiple complete ramps in the phase map but it will necessitate changing the curve already generated.
STEP 3
One limitation that this method has is that modulating the amount of this phase distortion is a bit cumbersome, as we can’t automate LFO points directly (another feature request, wink wink), meaning manipulating the way that the phase distortion comes out is limited. We can use the mod remap to fade both LFO mappings so that our manual phase playhead is replaced by the ordinary one (as we remove the cancellation effect) but this limits how the phase transition is applied.
If we want more control, what we can do is replace the LFO playhead with a waveform playhead from an oscillator, using the FM distortion knob.
To begin, remove the LFO 2 mapping from Osc 1’s phase. Now, use a line source to make a wavetable in Osc 2 that draws a ramp from 0 to 1. NOT from -1 to 1, mind you. From unity/middle to maximum only. Make sure you uncheck DC offset and normalize; we are not drawing a waveform here, but a control signal, and we need the range to be absolute. Also make sure you turn this oscillator’s level down to 0 so that you don’t blast your speakers with DC offset.
From here, set Osc 1 to “FM from 2” and the amount slider to 40.65 (I have no idea why, this has something to do with the total range covered by the FM knob, which exceeds the 0-1 range you might expect, but this is the closest decimal approximation to the reproduced waveform). This works because FM in Vital, as in most synths, is not TRUE “Frequency Modulation” but instead phase modulation. In essence, it uses an oscillator to do what we’ve already been doing, though it combines the resultant phase offset with the oscillator’s usual “phase playhead” instead of replacing it.
(PIC 4)
Now you should have your original waveform back again. But what we can do this time is use keyframes in the wavetable to “manipulate LFO points”, adjusting how the playhead shape should deform over time between a linear ramp and our desired final result.
From here, you could save these wavetable shapes as presets and use them for various warp mode effects achieved by dragging/modulating the wavetable frame.
NOTE: New users are limited in images/pics so I’ve uploaded all 4 screenshots for this tutorial here, and marked the images in the text
https://imgur.com/a/89g7OWO