Some tips on migrating to polyphonic?

Hi All,

I have a very simple oscillator which looks like this:

void CZSaw::process(const ProcessArgs& args) {
	// Calculate desired frequency
	float freq = clamp(params[_FREQ_PARAM].getValue() + inputs[_MODF_INPUT].getVoltage(), -3.0f, 3.0f);
	freq = 261.626f * powf(2.0f, freq);
	// Calculate phase
	phase += freq * args.sampleTime;
	if (phase >= 1.0f)
		phase -= 1.0f;
	// Calculate the shape index
	float shape = max((10 - clamp(params[_SHAPE_PARAM].getValue() + inputs[_MODS_INPUT].getVoltage(), 0.0f, 10.0f)) * 0.05f, 0.001f);
	// Calculate the wave step
	float a = phase * ((0.5f - shape) / shape);
	float b = (-1 * phase + 1) * ((0.5f - shape) / (1 - shape));
	float m = phase + min(a, b);
	float out = cos(m * (M_2PI));

	outputs[_WAVE_OUTPUT].setVoltage(out * 5);
}

I am wondering if someone could get me a tip on getting it polyphonic? It has been working fine monophonic. I have already looked at the source code for the fundamental, and befaco, and of course I am already lost and confused, as these oscillators do have much more functionality than mine. Sorry I keep asking these noobish questions, but if someone could give me a simplistic example to follow or some generic guideline I would be grateful.

Thanks, Marcelo.

See Making your monophonic module polyphonic

1 Like

Oh … so I do have to create (16) “instances” of the oscillator, this way I do have frequency/phase/etc. per instance … is that it?

Well, there’s no way around storing 16 phases in memory.

I think I understand now what I was missing. I will implement. Thanks!

It works!!! YAY!!! Thanks man!

1 Like