Antialiasing by limiting rate of change (cont. of "perfect" synthesis)

DSP, Plugin and Host development discussion.
RELATED
PRODUCTS

Post

I really wish the thread wasn't moved to Everything Else (Music related). So I had to start a new thread under a more "technical" title to keep the mods from moving it again. But the concept of "perfect" synthesis is really what this thread is all about. But I've definitely introduced a number of ideas that are not obviously related but in the big scheme of things are very related. I have a very specific concept of "perfect" synthesis that analog synths will never be able to achieve, that's just not what analog synths are about; and since digital synthesis has largely been influenced by analog synthesis, the digital synthesis has taken on some of the imperfection of analog PLUS not being able to sound analog. I see today's digital synthesis as "the worst of both worlds." Digital synthesis should be more perfect, or it's not taking advantage of being digital. (Edit: When I say "perfect" I'm not talking about aliasing per se, more talking about stuff like interface, control scheme, certain features, certain ways of generating sound, will provide specifics later.)
aciddose wrote:Then if you need help you can get someone like myself to look at it and implement the actual DSP for you.
Thanks aciddose, that helps to say that, because I just realized something. If I had the money I'd hire a programmer to begin working on my ideas under wraps, but I have a much better chance of bringing my ideas to reality if I just share openly and maybe someone (aciddose?) would be inspired to help. Also, it's ok if my ideas are used by others, the master plan is only in my head. :)

I'm going to see about getting together some graphs and explaining my ideas (which are not new!) more precisely. The only thing new is how I intend to connect things.

Post

I don't suggest you share all your ideas openly, but sharing the resulting plugin or ensemble you build to test them will be a good idea to get an idea of how much people like the sound.

Then you might find someone who could help you implement a plugin in c++ and at that point you'd only need to share the details of the idea with that person, not everyone.
Free plug-ins for Windows, MacOS and Linux. Xhip Synthesizer v8.0 and Xhip Effects Bundle v6.7.
The coder's credo: We believe our work is neither clever nor difficult; it is done because we thought it would be easy.
Work less; get more done.

Post

Am not being dismissive, but maybe more precise terminology would help?

Everybody has their own idea of perfect, and perfect probably doesn't exist. But my idea of a "perfect" synthesis method would as easily nail a high quality grand piano or accurate krumhorn or chinese cymbal or falling tree or whatever, in addition to abstract bleeps and bloops. :)

Am in no way dissing bleeps and bloops. Those are kewl as well. The "perfect" synthesis ought to excel on the full palette.

Post

aciddose wrote: Yes wavelet based synthesizers already do exist.
Not sure about this...
Who makes them?
And how are the wavelets used to generate sound (versus filtering via wavelets)?

Post

For example if you're inserting blit pulses from a table, these are wavelets.

You then filter them and presto, you have typical analog waveforms.

Nothing stops you from inserting them in any order/amplitude/phase you like, which can produce any waveform you like!

There are many, many synthesizers which use this method, for example Xhip.

Filtering via wavelet is called a FIR filter. Your answering machine probably implements this, if you use one. Obsolete technology from the 1980s.

Or what about the Fourier transform? Technology from close to 1800.
Free plug-ins for Windows, MacOS and Linux. Xhip Synthesizer v8.0 and Xhip Effects Bundle v6.7.
The coder's credo: We believe our work is neither clever nor difficult; it is done because we thought it would be easy.
Work less; get more done.

Post

I'm not too familiar with blit and blamp etc.
I know wavelets as sets of bandlimited impulses which combine in some order to make a waveform.

Post

aciddose wrote:...sharing the resulting plugin...then you might find someone who could help you implement a plugin.
Noted.
JCJR wrote:But my idea of a "perfect" synthesis method would as easily nail a high quality grand piano...Am in no way dissing bleeps and bloops.
Yep.

ALRIGHT PEOPLES, here is my impulse synth idea, very Tone2 Rayblaster-esque

U-he TyrellN6 saw through bandpass filter
Image

REALLY SIMPLE Approximation: sin(x*a)/exp(x/b)
a = frequency; b = resonance
Image

I know how the lowpass and highpass versions would look/work, just don't know how to graph it, I'm not good at maths!
Last edited by Architeuthis on Sat Jul 04, 2015 1:49 am, edited 2 times in total.

Post

The above is far from a complete idea, no where near the details required for my master plan. I'll give you a few examples. This also has to do with my idea of perfect synthesis.

Image

Notice the edge that is created before the next cycle. I don't like that. I would get rid of it, smooth it over, keep it sinusoidal as much as possible... not sure how to do it, but I think there would be a simple solution.

example2: I think it would be simple to create harmonic locking by manipulating the equation a bit maybe with some logic or rounding to "round to the nearest harmonic" while also smoothing that over so it's not a perfect lock, however perfect locking would probably be sonically interesting as well. Edit: Well if you look at the above gif, you can kinda see what harmonic locking looks like. It's made by the edge as well as the amplitude of the first part of the cycle.

example3: Simply by using a waveshape other than sine, you can get an overdriven filter sound. By manipulating the waveshape over frequency and amplitude, you can fine-tune the behavior/character of the filter.

example4: Not sure if this would work, but my experiments with digital chaos (1-sample delay) algorithms leads me to believe that it might be possible to integrate chaos and get some of that bubbly behavior of some analog filters. If that doesn't work, I bet I could create modulation patterns that mimick the sound. I know that if you modulate the frequency of the sine generator (the one creating the filter blips) on every blip, you can get some dirty filter sounds.

Post

U-he TyrellN6 saw through bandpass filter w/ overdrive
Image

Ok, so HERE's what harmonic locking (as well as chaotic behavior) looks like. Firstly, the sudden bursts of amplitude at the start of the cycle is happens as the the frequency of the filter nears a multiple of the frequency of the oscillator. The closer in frequency, the slower the bursts until there are no more bursts, that is when the filter and oscillator are harmonically locked. Secondly, the speed of the bursts is chaotic. I could inject my own chaos algorithm to control both the amplitude curve and timing of the bursts. Another interesting behavior (of TyrellN6) is that the overdriven resonance shape of the filter starts asymmetrical, fades to symmetrical, inverts phase, and becomes asymmetrical again in one cycle. I believe the inversion happens at the 0 crossing (0 line) of the input.

Edit: So... you see how we can look at a filter's output and break it down into behavioral components? Imagine a digital synthesizer where you can customize all kinds of behavioral settings for the filter. I'll be looking at my favorite analog filters for inspiration.
Last edited by Architeuthis on Sat Jul 04, 2015 4:37 am, edited 4 times in total.

Post

4th post in a row! Here's my chaos algorithm in action:
http://www.elanhickler.com/_/impulse_sy ... filter.wav
Somehow I need to connect this idea with the ideas above.

Post

The way you make the edge smooth is to combine the wavelets with a length greater than a single cycle. So the wavelet continues to fade to zero smoothly, unlike in your case where the filter's response to the input signal contains a discontinuity.

Try using:

sinc(x) = sin(x) / x
(note you need to avoid x being zero)

...combined with a window function such as sinc(x).

Then you insert these "wavelets" or "impulses" at fractional positions using interpolation, and allow them to overlap.

This is how the saw waveform you're using to start with is anti-aliased in the first place.

So what you're doing is no different than anti-aliasing a more complex waveform and then filtering it. In fact you depend upon the blit/etc and filter to do what you're doing!
Free plug-ins for Windows, MacOS and Linux. Xhip Synthesizer v8.0 and Xhip Effects Bundle v6.7.
The coder's credo: We believe our work is neither clever nor difficult; it is done because we thought it would be easy.
Work less; get more done.

Post

aciddose wrote:The way you make the edge smooth is to combine the wavelets with a length greater than a single cycle.
Yup. This is how wavelets typically work. Overlapping successively higher (or lower) banded wavelets has a phase cancellation effect.
Adding equal amplitude cosine waves in linearily increasing frequency also generates the sinc function (with a little samping of the result). The cosine waves can be any length, only the sum of the bands affects the results.
But what wavelets typically do is window these bands, the size being proportional to the frequency. They are then overlapped by increasing frequency over time...
Image
The result of this is improved time resolution, but diminshed frequency resolution.

Post

I agree with aciddose, it is much like granular synthesis.

At the moment, i'm playing with some ideas combining terrain synthesis and granular synthesis (with JSFX Reaper http://forum.cockos.com/showthread.php?p=1530723 )

With granular terrain synthesis i use good old pitch synched / overlap add grains.
What's "new" is that the grains are slices from the terrain. (I can put in my terrain, whatever 2D function or set of 1D functions i want, including wavelets :) )
I can control how i slice the terrain (position, angle, speed) quite easily. Complexity at low cost ;)

I achieve "cyclic" antialisaing by limiting the speed at which i read the grain terrain.

I had some issues with "clicks" with fast changes on many parameters. Analog synth designers have the same problem.

And I think - much like suggested in this thread - that one good solution is to update certain parameters depending on the state of the audio signal.
For example, by updating oscillator pitches only when the "derivative" of the output signal is 0 (ie when it is a local maximum or minimum).
With granular/wavelet synthesis it's even much easier, to avoid clics i only have to update the discontinuous parameters on grain reset.

Thierry
See you here and there... Youtube, Google Play, SoundCloud...

Post

Architeuthis wrote: Notice the edge that is created before the next cycle. I don't like that. I would get rid of it, smooth it over, keep it sinusoidal as much as possible... not sure how to do it, but I think there would be a simple solution.
Crossfading is the simplest solution.
To an extend crossfading becomes overlap add : you have a double generator with a 50% phase offset and you go from one to another to avoid the part of the signal you don't like.
See you here and there... Youtube, Google Play, SoundCloud...

Post

What about if you modulate the frequency (LFO speed), wouldn't that throw off any attempt to solve the click before it happens?
Last edited by Architeuthis on Sat Jul 04, 2015 7:34 pm, edited 2 times in total.

Post Reply

Return to “DSP and Plugin Development”