Phase modulator dsp device

Back in the day (03?), there was this great little piece of software called “cell synth” I believe. Which would allow you to FM (PM) any piece of audio with any other piece of audio. I’d love to see something similar implemented in renoise, as it could give us native FM/PM, greatly expanding the potential of our native tools’ sonic palette.

The way I am envisioning it would be as a dsp device, which would take the carrier as the incoming audio stream, and the modulator as a signal routed to it via the sidechain device (if that actually routes an audio rate signal), or perhaps via a send device. The Phase Modulator device would then, well, modulate the phase of the carrier by the modulator, and the resulting audio would be passed through.

This would preserve the semi modular nature of renoise’s audio architecture, and could allow for use of phase modulation within instruments via the instrument fx chains, or, perhaps crucially, of entire audio streams via the mixer fx section. This could be a powerful feature that (to my limited awareness, lol) does not readily exist in other daws, and could open up a lot of territory for sonic exploration.

@taktik, would this be possible to implement? Any technical hurdles I’m not seeing? I think this could satisfy a lot of the renoise native synthesis enthusiasts out there, and would add a lot of power to our capabilities in a relatively straightforward fashion.

A quick mockup could look something like this

Thoughts? Feasibility?

2 Likes

Yes, I’m aware of this, but would like the ability to cross modulate signals, and to do it natively

Correct me if I’m wrong, but that phase distortion unit only modulates the incoming signal by itself

1 Like

I agree with you. A native modulator would work much more correctly. And to be honest, I would like to be able to add a send to several side chain devices.

Do I understand you correctly? You want to be able to collect patches like the Cassio SZ synthesizers?

if so then more stable envelopes are needed that could also control the signal. current LFOs can often oversample with small clicks or slight delays.

1 Like

I don’t know about casio-SZ style, but I imagine the current lfos would offer some decent functionality. I’m all for more accurate envelopes, though. As well as ones that can retrigger without playing from the current value (generating clicks, etc)

one of my favorite demos of this synth

1 Like

I’ve experimented with a little code in the past, and even got something very simple as a sidechain plugin going I believe. The concept to make this sound is simple, you just have to delay one signal with the amplitude of the other signal - i.e. like in a chorus delay line, but much faster.

What to say about it? It works, and has the expected sound! Well, it has some shortcomings. I.e. you need to delay/lag the signal, because while the PM can push the dealy into the past, it could also spike up to the future! There are ways to solve this, as well, with some artifacts.

I guess the kilohearts phase distortion plugin is exactly this? It also has a sidechain input?

1 Like

casio cz is phase distortion
The phasor which is an upwards ramp wave reads a cosine from a table ( just like phase mod ) ,the difference is that in phase distortion the ramp wave is altered and thus the cosine bend -skews because it’s read out at a different rate where the phasor is distorted .
The resonance part in phase distortion is not phase distortion at all but just windowed sinc where the envelope window is either saw-triangle and the resoant peaks are a sine wave .

Simple side note ; one can achieve fm with just a delay line , when the delay time is read out at audio rate you get fm

1 Like

A I see phase distortion is just a phasor shape trick. Wasn’t fully aware of that yet.

But with “phase modulation” I mean the practice of modulating the phasor by another oscillator, not only statically changing the shape. This is to enable wavetables or sample streams to be modulated.

In my understanding, in a frequency modulation you would have a (free running) oscillator instead, and modulate it’s frequency by the modulator.

Or do I understand something wrong?

1 Like

Fm in yamaha way is phase modulation , your modulating the phase not the frequency .
The sine wave is also stored in a lookuptable ( the lookup table actually stores a quarter of a sine wave , iow pi/2 radians )
By reading that table back and forth you get a sine .
The extended waveforms found in the tx1z , tg77 , dx100 use the exact same principli , again only a quarter of the sine is stored , by reading it in different directions you get the funky sine variations

1 Like

So what might be the simplest/most efficient way to implement something like this as a DSP device?

Here’s a good explanation of PD

Hmm.
Perhaps making the formula device capable of audio rate processing per sample tick .
I don’t think a renoise synth is a good idea , by no means I underestimate Taktik’s intelligence but in the end it just won’t cut it when measured againstfull environments like reaktor ( imho even bitwig failed because of the audio buffer dependent feedback loop etc.)
All renoise needs is an overhaul of the instrument editor , faster envelopes , deeper routing capabilities , filter and osc fm etcc…

2 Likes

Like I said, I already coded a simple (private) vst3 without gui with such a capability. Might go looking if I still find the code, if you’re interested to try. It was in early steps so far, no high quality delay line etc.

The concept is simple, I like it to the phase distortion (PD) syntesis, where instead of the frequency of the oscillator the phasor is modulated with an offset. I just use a delay line (with memory, like 100ms), and then I use a point in the middle (like 50ms) as a center point. The delay line will now output the sound with 50ms difference. Now I add a sidechain channel, and modulate the delay of the delay line by the sidechain input.

It will give straight away FM/PD sounds if you input the right sounds! And you can tune the intensity of the modulation by chosing a different modulation range (i.e. by how much the sidechain input will shift the delay line read pointer). Even it is a very simple algorithm, you really just need to linearly shift the read pointer of the delay line by the current sidechain input value, and you tune the intensity by scaling the shift. You will need a delay line which allows fractional delays for this, like found in a chorus/flanger.

Some advanced topics would be, smoothing/antialiasing the delay line for large/fast per sample modulations, and also reducing the latency by adding a gliding offset that will respond to the sidechain input.

P.S: with a (virtual) modular synth with a delay line plugin with offset input, you can probably set up the effect pretty well

2 Likes

I think this option needs to be added to the modulations tab, and then you can choose different types there.