v1.0 released: Regency — Free Multi-Tiered Phase Distortion Synthesizer

VST, AU, AAX, CLAP, etc. Plugin Virtual Instruments Discussion
RELATED
PRODUCTS

Post

nakst wrote: Sat May 06, 2023 7:13 pm
jbraner wrote: Sat May 06, 2023 5:59 pm So we're thinking that there's a good chance it will go in to
C:\Program Files\Common Files\CLAP?
Yeah, I think so. The installer will tell you the folder it's installing to anyway.
Well, that's fine ;)
(I just didn't want to go looking for where it got installed. This happens occasionally with some VST plugins) (with bad installers) ;)
I'm looking forward to installing it ;)
John Braner
http://johnbraner.bandcamp.com
http://www.soundclick.com/johnbraner
and all the major streaming/download sites.

Post

Where can I find out which version I have installed? The where I would expect it (the about panel) doesn‘t show it. It would be also nice if on your site the release dates would be published…

Post

Tj Shredder wrote: Sun May 07, 2023 5:54 am Where can I find out which version I have installed? The where I would expect it (the about panel) doesn‘t show it. It would be also nice if on your site the release dates would be published…
When the about popup is open, the version is displayed at the bottom of the interface.

(Multiple people have told this is too difficult to find though, so I need to move it to a more prominent position!)

I have been posting release notes on my Discord, but I'll see to also putting them on my website.

Post

Here's another quick question: (the manual link doesn't work - comes up with 404 "unknown")

What are the Unit Presets? There is a folder for them, and I found some Warkauze presets on Discord - which has some .dat files in the Unit Presets folder.
John Braner
http://johnbraner.bandcamp.com
http://www.soundclick.com/johnbraner
and all the major streaming/download sites.

Post

nakst wrote: Sun May 07, 2023 10:06 am
Tj Shredder wrote: Sun May 07, 2023 5:54 am Where can I find out which version I have installed? The where I would expect it (the about panel) doesn‘t show it. It would be also nice if on your site the release dates would be published…
When the about popup is open, the version is displayed at the bottom of the interface.
Nobody could possibly expect it there. When there is a popup, it has to be in the popup and not on some arbitrary different place somewhere on the screen… I couldn‘t find it on the popup, that means it wasn‘t there… I would place it right a side of the plugin name…

Post

Tj Shredder wrote: Sun May 07, 2023 5:00 pm
nakst wrote: Sun May 07, 2023 10:06 am
Tj Shredder wrote: Sun May 07, 2023 5:54 am Where can I find out which version I have installed? The where I would expect it (the about panel) doesn‘t show it. It would be also nice if on your site the release dates would be published…
When the about popup is open, the version is displayed at the bottom of the interface.
Nobody could possibly expect it there. When there is a popup, it has to be in the popup and not on some arbitrary different place somewhere on the screen… I couldn‘t find it on the popup, that means it wasn‘t there… I would place it right a side of the plugin name…
I'm going to put the version number in the patch display control (the one at the top-left of the interface) when the plugin is first launched. Hopefully that should help people find it! And I'll make the text in the about popup bigger as well.

Post

jbraner wrote: Sun May 07, 2023 2:22 pm Here's another quick question: (the manual link doesn't work - comes up with 404 "unknown")
Oops, I forgot about that. I should probably link that somewhere else...
jbraner wrote: Sun May 07, 2023 2:22 pm What are the Unit Presets? There is a folder for them, and I found some Warkauze presets on Discord - which has some .dat files in the Unit Presets folder.
When you click the "State" button in the corner of some units, it will show you a list of the presets for that unit it finds in the Unit Presets folder. You can also save your own from this menu.

Post

nakst wrote: Mon May 08, 2023 5:30 pm
jbraner wrote: Sun May 07, 2023 2:22 pm Here's another quick question: (the manual link doesn't work - comes up with 404 "unknown")
Oops, I forgot about that. I should probably link that somewhere else...
I can't find one anywhere...

jbraner wrote: Sun May 07, 2023 2:22 pm What are the Unit Presets? There is a folder for them, and I found some Warkauze presets on Discord - which has some .dat files in the Unit Presets folder.
When you click the "State" button in the corner of some units, it will show you a list of the presets for that unit it finds in the Unit Presets folder. You can also save your own from this menu.
Aah thanks - I'll have a look. Maybe this is in the manual?
John Braner
http://johnbraner.bandcamp.com
http://www.soundclick.com/johnbraner
and all the major streaming/download sites.

Post

jbraner wrote: Mon May 08, 2023 6:05 pm
nakst wrote: Mon May 08, 2023 5:30 pm
jbraner wrote: Sun May 07, 2023 2:22 pm Here's another quick question: (the manual link doesn't work - comes up with 404 "unknown")
Oops, I forgot about that. I should probably link that somewhere else...
I can't find one anywhere...
Yes, this is the problem, I haven't written a manual :lol: It is too much work for a free plugin, unfortunately. But please post any questions you have here or on the Discord and I'll be happy to answer them :tu:

Post

aah - that's OK ;)

I'll figure things out myself ;)
John Braner
http://johnbraner.bandcamp.com
http://www.soundclick.com/johnbraner
and all the major streaming/download sites.

Post

jbraner wrote: Mon May 08, 2023 8:24 pm aah - that's OK ;)

I'll figure things out myself ;)
well, maybe not ;)

There are some nice sounds in here - but editing them is just "click and see what happens" for me ;)
For each layer - what exactly do the 3 waveforms do?
They make up a PD "oscillator" - right? but do they modulate each other? ie 1 -> 2 ->3
What is their relationship to each other?
The first one seems to have the most effect on the sound - but I'm damned if I know what I'm doing ;)
John Braner
http://johnbraner.bandcamp.com
http://www.soundclick.com/johnbraner
and all the major streaming/download sites.

Post

jbraner wrote: Tue May 09, 2023 3:02 pm There are some nice sounds in here - but editing them is just "click and see what happens" for me ;)
Well, it is the same way for me. I don't think understanding the mathematics behind the sound engine really gives any insight to how a certain parameter change could modify the timbre.
jbraner wrote: Tue May 09, 2023 3:02 pm For each layer - what exactly do the 3 waveforms do?
They make up a PD "oscillator" - right? but do they modulate each other? ie 1 -> 2 ->3
What is their relationship to each other?
The first one seems to have the most effect on the sound - but I'm damned if I know what I'm doing ;)
The 3 curves are used to warp the phase passed to a sine oscillator.
so, if you denote the curves as mathematical functions f, g, h (left to right), then the output waveform has formula sin(2*pi*( P + f(g(h(t))) )) where P is the phase offset parameter and t is time.
Then there's the added complication of the distortion amount parameters. These smoothly blend each of the f, g, h functions respectively from a linear ramp to the curve you have drawn. At 0%, this means the given function has no effect, since it is the identity function it maps its input to the identical output.
Because of the ordering of the functions, the changes to the rightmost curve have the most impact to the sound, as its details are amplified by the other two curves -- but this only happens if the other curves have non-zero distortion amount.
Finally, there is the matter that the interpolation performed by the distortion amount parameter takes place on a cylinder rather than a rectangle, but this is too difficult to explain without diagrams...

Nonetheless, here is the relevant code for anyone interested:

Code: Select all

// sample generation
for (int j = 0; j < 2; j++) {
	if (p[P_GEN_1_ENABLE + j] < 0.5f) continue;

	float p1 = cVoice->phase[j] * (1.0f + p[P_GEN_1_SYNC_AMT + j] * p[P_GEN_1_SYNC_AMT + j] * 7.0f);
	uintptr_t p1i = (uintptr_t) (p1 * CURVE_CACHE_LOOKUP_COUNT) & (CURVE_CACHE_LOOKUP_COUNT - 1);
	float p1f = p1 * CURVE_CACHE_LOOKUP_COUNT - floorf(p1 * CURVE_CACHE_LOOKUP_COUNT);
	float p1l = cState->curveCache[j * 3 + 2].lookupA[p1i] * (1.0f - p1f) + cState->curveCache[j * 3 + 2].lookupB[p1i] * p1f;
	float p1c = p1l * p[P_GEN_1_DIST_3 + j] + p1 * (1.0f - p[P_GEN_1_DIST_3 + j]);

	float p2 = p1c;
	uintptr_t p2i = (uintptr_t) (p2 * CURVE_CACHE_LOOKUP_COUNT) & (CURVE_CACHE_LOOKUP_COUNT - 1);
	float p2f = p2 * CURVE_CACHE_LOOKUP_COUNT - floorf(p2 * CURVE_CACHE_LOOKUP_COUNT);
	float p2l = cState->curveCache[j * 3 + 1].lookupA[p2i] * (1.0f - p2f) + cState->curveCache[j * 3 + 1].lookupB[p2i] * p2f;
	float p2c = p2l * p[P_GEN_1_DIST_2 + j] + p2 * (1.0f - p[P_GEN_1_DIST_2 + j]);

	float p3 = p2c;
	uintptr_t p3i = (uintptr_t) (p3 * CURVE_CACHE_LOOKUP_COUNT) & (CURVE_CACHE_LOOKUP_COUNT - 1);
	float p3f = p3 * CURVE_CACHE_LOOKUP_COUNT - floorf(p3 * CURVE_CACHE_LOOKUP_COUNT);
	float p3l = cState->curveCache[j * 3 + 0].lookupA[p3i] * (1.0f - p3f) + cState->curveCache[j * 3 + 0].lookupB[p3i] * p3f;
	float p3c = p3l * p[P_GEN_1_DIST_1 + j] + p3 * (1.0f - p[P_GEN_1_DIST_1 + j]);

	float smp = EsCRTsinf((p3c + p[P_GEN_1_PHASE + j]) * 6.24f);
	cVoice->phase[j] += dp[j];
	cVoice->phase[j] -= floorf(cVoice->phase[j]);
	sL += smp * panL[j];
	sR += smp * panR[j];
}
// lookup table generation
cState->curveCache[i].hash = hash;

for (int j = 0; j < CURVE_CACHE_LOOKUP_COUNT; j++) {
	float x = (float) j / CURVE_CACHE_LOOKUP_COUNT;
	float y = CurveCompute(state, i, x, false);
	cState->curveCache[i].lookupA[j] = y;
}

for (int j = 0; j < CURVE_CACHE_LOOKUP_COUNT; j++) {
	int ja = (j + 0) & (CURVE_CACHE_LOOKUP_COUNT - 1);
	int jb = (j + 1) & (CURVE_CACHE_LOOKUP_COUNT - 1);
	float ya = cState->curveCache[i].lookupA[ja];
	float yb = cState->curveCache[i].lookupA[jb];

	if (fabsf(ya - yb) <= 0.5f) {
		cState->curveCache[i].lookupB[ja] = yb;
	} else if (ya < yb) {
		cState->curveCache[i].lookupB[ja] = yb - 1.0f;
	} else {
		cState->curveCache[i].lookupB[ja] = yb + 1.0f;
	}
}



Post

Hi nakst,

Well, thank you for going in to that - but I'm none the wiser - so I think I'll stick with my original idea ;)
Well, it is the same way for me. I don't think understanding the mathematics behind the sound engine really gives any insight to how a certain parameter change could modify the timbre.
you are 100% right! ;-)

So, I guess it makes sense to treat this like a DX7 - in that I have no idea what it's doing, so just poke around until it sounds good. ;-)
That is still totally worth it - as there are some nice sounds in there (I like the PD sounds in the CZ synths and sometimes play around with virtualCZ).

Could I ask you one more question?
What do you think about adding the Altitude sequencer - in to Regency?
Regency is using the LFO for SEQ type sounds - which just adds to the "hit and miss" adjustability of patches ;-)
That sequencer would really work well with this synth ;-)
John Braner
http://johnbraner.bandcamp.com
http://www.soundclick.com/johnbraner
and all the major streaming/download sites.

Post

jbraner wrote: Tue May 09, 2023 6:50 pm Could I ask you one more question?
What do you think about adding the Altitude sequencer - in to Regency?
Regency is using the LFO for SEQ type sounds - which just adds to the "hit and miss" adjustability of patches ;-)
That sequencer would really work well with this synth ;-)
I am not against it, although please bear in mind that I only have limited time I can spend working on free synths!

Post Reply

Return to “Instruments”