SynthMaker

complex oscillators investigation......

Archive · 2011 8 old posts

From the original SynthMaker forum (2004–2014), with its members’ names and dates.

tinkergnome ·

hello again .... i've been conducting some R&D about how certain oscillators connect and with trying to complex oscillations for some seriously different/exotic synth sounds has been somewhat exhausting path traveled so far..... interesting enough i had figured out how to use an ADSR to produce a delay/reverb like feature to the synth sound produced. i've looked into here somewhat, not completely, but if anyone could tell me about some basic wirings of oscillators to help it make sense. i do have a few images of how i have things connected. i hope they're not seriously backwards. i could possibly figure out more connection types than that,... but i want seriously complex sound.

tinkergnome ·

ok .... i think i'd like to ask ...... is everyone ok with these designs? lets not be shy now ....... don't everyone all speak up @ once now? i'm just mildly curious as to what people think about them. for better or worse.....

cyto ·

Okay, I'll bite...

Your frequency shifters (the bottom halves of the stream adds) need to be calculated in such a way that they are sample-rate independent (ie. shift in Hz times 2/sR). Simply multiplying them by .001 to "normalize" them may give you acceptable sounds on your system, but if you intend on sharing your synths with others, that method isn't going to cut it. Also, with the "adds" the way you have them, I would seriously consider putting some type of (0-1) limit going into the oscillators. I would imagine, looking at your pics (though it's hard to tell), that you may run the risk of overshooting 1.

I'm a big fan of ring modulation (used to spend hours on the EML200, RMing my guitar with the VCOs and drenching it in that lovely onboard spring reverb 😍 , ahhhhhhhhhh, but i digress). Having said that, I'm guessing that modulating 2 or more saws like that is going to result in some absolutely nightmarish aliasing. If that's the sound you're going for, then more power to you.

I don't want to deter you from your experiments, but remember there is a lot more to creating "complex" sounds than just having a crazy waveforms. My personal opinion is that the most interesting sounds are the ones that "develop" over time. Even in the few milliseconds that say a snare drum sounds, there are many complexities in the development of the sound (rise and fall in pitch, timbre of the drum heads, growth and decay of the snares, volume envelopes, resonances, etc, etc, etc). No wave cycle is exactly the same as another. For beginning to end the sound is constantly developing. Likewise, the sound of a good synth (to me) is not in its oscillations, but rather what the synth can do with those oscillations (the sound of the filters, the shape of the amp envelopes, the timbral development of the note, etc, etc, etc). Again, not to deter you (I'm interested to see where your experimentations take you), but just to remind you that some of the most sought-after synthesizers can do so much with a handful of sines, saws, triangles, etc.

-cyto

tinkergnome ·

ok ....so about the sliders? how can i fix them where they'd be acceptable and not cause any harsh impact of frequency? i understand that when i have a (stream add) in connecting oscillators, it tends to have a basic layering. when i use a (stream multiply), it really sounds like the oscillators blend very nicely.... i dig that. i guess if that blending may be indicative of aliasing..... it doesn't sound too terrible. i was wondering if you or someone could show me examples of a basic thing like what i have up above,.... one that would cause aliasing, & one that would act within normal range(s) so i can get a better understanding of how i need to connect/build the controls to correctly suit it.

BTW: is there some code module? way to do the math on..... HZ*2/SR ?????

cyto ·

Hopefully the following will clear up some issues you may be having and give you a better understanding of what is going on in that signal path...

I'm going to address the two parts of your schematic (BTW I'm referencing the first picture). First, the "add" section where you are adding a value to the frequency value of the poly voices. Second, the "multiply" section where you are multiplying the two saw(?) waveforms together. Notice that each of those operations is affecting a different type of data (frequency/waveform).

Regarding the "add" section. The sliders (and the subsequent math) are producing a value that is being added to the normalized frequency of the voice. This is effectively shifting the frequency scaling of the instrument up by a fixed amount. Think of a piano. The "A" below middle C is 440Hz. The "A" an octave above that is 880Hz. The next "A" is 1760Hz and so on. Our brains register musical notes in this base-2 logarithmic way. When you add a fixed frequency as you did in the picture, you are shifting the whole scheme up by a fixed value. So say we add 20Hz to the frequency. Those A's would now be 460Hz, 900Hz, 1780Hz respectively and they no longer sound an octave apart. You are effectively altering the "temperament" of the musical scale. This could be a good thing.

Now back to your picture. As I mentioned earlier, the stream frequency data is "normalized" meaning that instead of having a value in Hz, it has a value from 0-1. 1 represents the sample rate divided by two (Nyquist frequency). Since sample rates can vary from system to system, a normalized value of say .5 on a 44.1kHz system represents 11025Hz, but on a 48kHz system, it would represent 12000Hz. That's why I say you need to normalize those values- so you are adding consistent frequencies from system to system. You ask it there is a code module. Yes, there is but this would be much better done with "green" math. Just search the toolbar for the "sampleRate" primitive. This will always output the system's samplerate. Divide 2 by that value, then multiply the values coming out of your sliders by that result.

Now to the multiply section. By multiplying two waveforms together, you are effectively achieving "ring modulation." As we all learned in our textbooks, doing so results in frequencies that are the sum and difference of the input frequencies. So say for example you have two sine waves (pure tone), one at 800Hz and one at 1000Hz. If you multiply those two waveforms together, you no longer hear the input tones, but rather tones at 1800Hz and 200Hz (the sum and difference). Pretty cool. But the problem you run into and why (I imagine) it would sound so harsh in your scheme is that those saw waves contain (at least theoretically) all of the whole number harmonics of the base frequencies. So if you are playing one of those previously mentioned A's, you are generating frequencies at 440Hz, 880Hz, 1320Hz, 1760Hz, 2200Hz, 2640Hz, etc, etc, etc all the way up to Nyquist. Granted, each partial is decreasing in volume, but they are still theoretically there. So if you have two complex saw waves multiplied together, the result is all of those respective partials summed and subtracted. "Cool" you might think, "such complex sounds". And if you were using an analog signal path to do it, you'd be right. The problem is, you are in the "discrete" digital realm. When you try to produce tones above the Nyquist frequency (samplerate/2) which you inevitably will with saw waves multiplied, you run into a problem called aliasing. Now I'm not going to go into all the gory details (do a google search and you'll find plenty of "wagon wheels in motion pictures" analogies), but you are essentially "reflecting" those frequencies back down into the normalized range. The result is not pretty. Now, you asked for an example of an "acceptable" range ring modulation scheme. Unfortunately, with saw waves, I'm not even going to try. It would no doubt involve seriously intense oversampling routines that frankly are way beyond the "how do I hook this up" level. If you are interested, I seem to remember seeing an oversampling page on the wiki that provides a pretty decent "intro" to the concept and some example OSMs.

Okay. I hope that clears things up a little for you and gives a little insight into what all those adds and multiplies are really doing.

-cyto

tinkergnome ·

well thanks cyto that was quite an earful..... i'll have to hook it up as you suggested. you know what i had looked thru a few things and found that samplR primitive and had a thought about it ... but i wasnt even sure how to connect it to my design for fear that i might crash the program or something....

dutchound ·

I am very interested in low CPU oscillators that have very different and interesting sounds.

Voweling oscillators are a favourite, i discovered one once but i dont have it at hand, it's interesting to just take a bunch of weird modules, delays filters, and try to discover new types of FM or feedback chaos engines and instability tricks.

A favourite is the serge wave multipler. read about it on youtube or googly or something, it basically folds a standard oscillator over on it's self gradually up to 20 times so you have an array of little oscillators. i.e. put a multply knob on a triangle osc and send through a sin function and it will fold over and creat masses of interesting partials.

Reaktor weedwhaker has a cool oscillator that feeds back onto itself while going through some kind of filter, notch or something and it does crazy things, while being controllable.

voweling ones are way good, and 7 saws too, if anyone knows other easy to add up oscs please say so!!!

dutchound ·

hiya, i just made a demo of the serge wave multiplier, there is also the wavetable that i found on the forums here searching for wavetables which is very versatile...

if you want wave scanning abilites like in massive you have to make a crossfader using multiplu 0-1 on 2 -3 lines so that you can mix 2 3 oscillators at the osc level although it is good also to mix them using filters and etc and after filters etc.

the serge wave multiplier as you can see is also fun (see attachment), just turn the serge wave button to muplitply the peaks. if you want to hear the wavetable you have to go in the structure and change the wires.

Wrote something here? To have a post removed or your name hidden, write to [email protected].

Before your first post

A few rules keep this a friendly place. You agree to them once.

Shown next to what you post, here and in the app. It doesn’t have to be your real name: 3–24 lower-case letters, digits or _ (capitals become lower case, spaces become _).

    Then your post goes up straight away.

    Delete this reply?

    Open it in SynthMaker?

    It goes on the track you’re editing there, in place of that track’s sound, and into My sounds. Your other tracks stay as they are.

    Want to keep that track’s sound? Start a new song in SynthMaker first (Song › New song), then open this.

    Report this reply?

    Only the developer reads reports. The person isn’t told who reported them.

    What’s wrong with it?

    Block this person?

    You won’t see their posts and replies here any more. They aren’t told, and you can unblock them at any time.

    People you’ve blocked

    Their posts and replies are hidden from you. Unblock someone to see them again.

    The community rules

    A few rules keep this a friendly place. Everyone agrees to them once, before their first post.