Cool tutorial for diy solina-like synth

I may be wrong, but I think phaser and flanger effects are produced in the same way- with short , LFO-modulated delays, producing phase-cancellation when mixed back in with the original signal. I think the difference between the two effects is just the range of the base delay time (shorter for phasing, longer for flanging).


Chorus is produced in basically the same way, I think.
The old string-synths used to have several of these modulated delay circuits running at the same time, for that characteristic thick sound.


Historically, phaser effects were produced with all-pass filters. That’s the criterion I use personally to distinguish the two.

Yeah, phasing and flanging both produce moving notches in the frequency spectrum but it’s how they’re produced and the resultant spacing of the notches that characterises them. A phaser doesn’t use a delay, it instead uses allpass filters to shift the phase of part of the spectrum. When this is mixed back with the original signal, the parts that are 180 degrees out of phase cancel. Phaser notches are much more widely spaced and fewer in number, the classic MXR Phase 90 is 4-stages and thus has two notches. Flanging creates a comb filter, much more ‘whooshy’ because of the large number of little notches, while feedback makes it metallic.

Gotcha. I think I may have been mixing up chorus and phasing, in that case.

Or perhaps I’m just confused…


Yes, the same guy.

Oliver, if you analylse the code it is anti aliasised.
Do all the calculations and you’ll se.

And t2k, mocking people doesnt work in neither your or my world?

Just some respect, please?

> Do all the calculations and you’ll se.

I’ve done them and I don’t see anything. Care to explain how it works?

“DCOPH” is a sawtooth with aliasing, “integrators” doesn’t integrate anything at all since it’s a ramp counting down from 28 to 0 at each edge of DCOPH. I kind of get the idea that you’re trying to use these to generate a band-limited pulse that you would be integrating somewhere, but there’s no other code in sight.

Are you sure you have published all the code?

The integrators are count down slopes at 753Hz.
Lower trigger and they get flat, higher and the amplitude lowers.
But the requency is fixed at 753Hz.

The eight harmonic, the top of my keyboard, is still below half the samplig frequency and Nyquist rate. (in reality -48dB below the signal.)

If there are any overtones, because of staircase or other artifacts, in my signal they are beyond the DAC.

And I’m giving it all away on the internet.

That was one of your Points, open source.
Not living up to that today?

Now it’s my turn.

And the biggest nagg of your choise was the chorus/phasser/flanger line.

Do it with a BDD and make sure it’s interpoleted!

No, the frequency of the “integrators” is not 753 Hz. Their frequency is just the same as that of your “DCOPH” ramps, and their reset points are synchronized with the edges of the DCOPH (with the same “jitter” when the frequency is not a divider of the sample rate). The only thing your code achieves is to reduce their amplitude when the frequency is above 753 Hz, and enhance the high-frequencies when the frequency is below 753 Hz.

With a low frequency:

With a high frequency:

My point is that your “integrators” signal has as much aliasing as the naive DCO.

A good hint that your method is not band-limited is that when a phase reset occurs, the information about the fractional sample at which the reset time occurs (DCOPH / FREQ) is not used anywhere.

> Do it with a BDD and make sure it’s interpoleted!

What you did is not a BBD emulation, and doesn’t have interpolation.

On the Solina, the ensemble effect is obtained by two delay lines, each of them modulated by a different LFO (which is a different combination of 3 sinewaves, 2 at a low frequency, one at a faster frequency). At the very least, you need two delay lines and the two LFOs to recreate this. Or you can go all the way and emulate the variable clock speed, noise and frequency colouration of the BBD.

But please don’t call a flanger (non-interpolated delay line + LFO) a “Solina emulation”.

And aliasing, please explaine how it occures even if i dont generate frequecys above Nyquist?

I’m not much of a programmer, but I’ve messed around with naive oscillators enough to be familiar with the aliasing problems and the various methods for avoiding it. If there is any antialiasing happening, I’d be interested in the technique but Olivier knows his stuff so I’m inclined to believe him.

bookmarks thread

It’s not a matter of open-source, but a matter of being honest about what you’re publishing.

@janost Because the waveform contains harmonics above nyquist… A naive sawtooth aliases like hell because it effectively has infinite harmonics. This is why people go to so much trouble band limiting their waveform generation.

I get your diagrams.
But It still sounds good.

How about that?

> please explaine how it occures even if i dont generate frequecys above Nyquist?

Let’s say my sample rate is 20kHz and I want to generate a sawtooth at 700 Hz. I use the following code:

x += 700.0 / 20000.0
if (x >= 1.0) x-= 1.0

You think that x has no aliasing because its frequency is below Nyquist? Well x has an infinite number of harmonics at 700 Hz, 1400, 2100, 2800, etc. Its 15th harmonic is at 10500 Hz and will be aliased. Another way to realize that is to consider the point at which the waveform resets: the spacing between these points is either 28 or 29 samples. 20000 / 700 = 0.57142857. The fractional phase when a reset occurs will be 0.57142857, 0.14285714, 0.71428571, 0.28571428, 0.857142, 0.42857142, 0.0 - a pattern that repeats every 7th reset… So there’ll be a subharmonic at 100 Hz.

That’s why we strive to generate band-limited waveforms which do not have harmonics above Nyquist. In the code above, x is certainly not band-limited.

I made a mistake Writing here again.

But it pisses me of as hell when someone makes mock of me when my drumchips and synth has sold very well.

Never mind.
Until next 6 month’s