Scriptnode Phase Delay and building a phaser.
-
What is that module for ?
I am going to assume it can rotate phase but not sure , not suitable for making a phaser as it can not be modulated without clicks .
I would normally make a phaser with multiple allpass filters but the svf allpass filter is broken in scriptnode, if you sweep it above a certain range it goes silent and will not pass sound again until removed and inserted again.
And the dedicated allpass has noise when modulating knob, applying smoothing and it lags too much to reach the needed values.Anyone made a phaser ?
-
@lalalandsynth Anyone know how this module works ?
-
@lalalandsynth To my knowledge this node only shifts the phase of the signal. To build a phaser, there's a
filters.allpass
node available. -
The phase delay module is the building block of the HISE phaser so you can definitely build a phaser with it. It's basically this:
As with everything in scriptnode: if the modulation crackles, you need to use frame processing.
-
@lalalandsynth Don't know, if this is interesting for you, but you could build a phaser with a few lines of code in Faust:
declare name "t_phaser"; declare version "1.0"; declare author "toxonic"; declare license "GPL v.3.0"; declare copyright "(c) toxonic 2022"; import("stdfaust.lib"); coeffOne = hslider("coeffOne", -1,-1,1,0.01):si.smoo; coeffTwo = hslider("coeffTwo", 0,-1,1,0.01):si.smoo; lfoFrequency = hslider("lfo freq",0.25,0.1,1,0.01):si.smoo; phaseOffset = (hslider("phaseOffset", 0,-1,1,0.05)):si.smoo; phaserTrig = button("on/off"); intensity = hslider("intensity", 0.7,0,1,0.01):si.smoo; fb = hslider("feedback", 0.6, 0,0.999, 0.001):si.smoo; rangeCon(curV,oMin,oMax,nMin,nMax) = (((curV - oMin) * (nMax - nMin)) / (oMax - oMin)) + nMin; lfo(off) = os.hsp_phasor(1,lfoFrequency, 1-phaserTrig, off)-0.5:abs*2:rangeCon(_,0,1,coeffOne,coeffTwo); apSer(off) = fi.allpassn(1, lfo(off)):fi.allpassn(1, lfo(off)):fi.allpassn(1, lfo(off)):fi.allpassn(1, lfo(off)):fi.allpassn(1, lfo(off)):fi.allpassn(1, lfo(off)):fi.allpassn(1, lfo(off)):fi.allpassn(1, lfo(off)); mPhas(off) = (+:apSer(off))~*(fb); phaserMono(off) = _<:select2(phaserTrig,_,(_*(1-intensity),mPhas(off)*intensity:+)); process = _,_:phaserMono(((phaseOffset*-1)*0.25-0.25)),phaserMono(((phaseOffset)*0.25-0.25)):_,_;