Catmull Rom Spline

That is phase shaping / phase increment distortion. You find some more information in this thread i have written: On the path of the halfAHeart window - phase shaping vs. phase increment distortion

Thats an easingOutIn function also called a seat.

You can check out my collection of unit shapers here:

You can get this one from the collection (try out different easing cores), with height 0.5 you get the desired shape (all the params are normalized between 0 and 1 and you can modulate them at Audio rate)

(
var easeIn = { |x|
	x * x * x;
};

var easeOutIn = { |x, height = 0.5|
	Select.ar(x > 0.5, [
		height - (height * easeIn.(1 - (x * 2))),
		height + ((1 - height) * easeIn.((x - 0.5) * 2))
	]);
};

var cubicSeatReversedToLinear = { |x, shape, height = 0.5|
	var mix = shape * 2;
	var easeOut = 1 - easeOutIn.(1 - x, height);
	easeOut * (1 - mix) + (x * mix);
};

var linearToCubicSeat = { |x, shape, height = 0.5|
	var mix = (shape - 0.5) * 2;
	var easeIn = easeOutIn.(x, height);
	x * (1 - mix) + (easeIn * mix);
};

var cubicSeatToLinearMorph = { |x, shape, height = 0.5|
	Select.ar(shape > 0.5, [
		cubicSeatReversedToLinear.(x, shape, height),
		linearToCubicSeat.(x, shape, height)
	]);
};

{
	var phase = Phasor.ar(DC.ar(0), 50 * SampleDur.ir);

	var sigA = cubicSeatToLinearMorph.(phase, \shapeA.kr(0), \height.kr(0.875));
	var sigB = cubicSeatToLinearMorph.(phase, \shapeB.kr(0.5), \height.kr(0.875));
	var sigC = cubicSeatToLinearMorph.(phase, \shapeC.kr(1), \height.kr(0.875));

	[sigA, sigB, sigC];
}.plot(0.02).superpose_(true).plotColor_([Color.red, Color.blue, Color.magenta]);
)

You could also check out the cubic bezier through two given points here:

1 Like