Xfer Serum advanced algorithm tutorial

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

Post

Greg Houston wrote:
wasi wrote:Has anybody tried some of these?

http://countercomplex.blogspot.ch/2011/ ... f.html?m=1

Or does that concept translate at all? It would be pretty awesome if it did.
Doesn't translate, but fun.
Thanks! Ah well. I suspected as much.

Post

wasi wrote:Has anybody tried some of these?

http://countercomplex.blogspot.ch/2011/ ... f.html?m=1

Or does that concept translate at all? It would be pretty awesome if it did.
yes and no. you can not bitshift right bitshift left directly in serum. However you CAN /2 and *2. more correct would be that you can bitshift left by x bits using *2^x. you can bitshift right x bits by using /2^x. remember x has special meaning in serum so these are not formulas to be typed exactly as I write them. to confuse things even further you may actually have the serum variable x contained in my illustration as part of an expression in the exponent. this is to say that you will be bitshifting f(x) bits. there is another problem, when you /2 you leave significant data 0.xxxxx that would otherwise be truncated at the decimal and converted to whole numbers (integers). this is sorted pretty easy using rint(). in serum you bit shift right with rint(shiftme/2^bitstoshift). WARNING, you can not bitshift x*2^1.5. you must use rint to convert the power to a whole number first. shiftme*2^rint(bitstoshift). negative numbers are also discouraged as this would flip your * to a /. maybe you can exploit this as a feature to bit shift both directions on a single expression.

Post

I really wanted to continue writing this tutorial but my methods have changed slightly to better suit my needs. simply put, I no longer use serum as my main tool for generating wavetables. after reading this, I decided it was time to take the training wheels off. I have more control over my data with none of the limitations of serum. this is not a jab at Steve or Serum. I still use serum as an instrument. I just don't use it to write generative computer programs. I am currently experimenting with a few different programming languages. some of them are surprisingly simple if you have just a little experience with programming. while these are mostly not compiled to small efficient binary executables, they do offer a very friendly high level language that gets results fast. in addition to generating sound, I am also generating pretty pictures and video using the same exact functions I use to generate the wavtables. less work more fun no limits.

python
mathematica (wolfram alpha)
processing.org (java)
supercollider (smalltalk)
cycling74 max 7

Post

eatyourguitar wrote:python
mathematica (wolfram alpha)
processing.org (java)
supercollider (smalltalk)
cycling74 max 7
Do all of these have the ability to make wave files?

I wish the Galbanum files included the formulas. It would be nice to be able to use them to generate entire wavetables rather than only having the single cycle waveforms that are included.

Post

A couple other things. What limitations specifically are you experiencing in Serum that these other applications overcome?

Also, I'd love to continue hearing about your exploration of this topic, particularly if it includes more formulas and explanations of them. ;)

Post

Greg Houston wrote:
eatyourguitar wrote:python
mathematica (wolfram alpha)
processing.org (java)
supercollider (smalltalk)
cycling74 max 7
Do all of these have the ability to make wave files?

I wish the Galbanum files included the formulas. It would be nice to be able to use them to generate entire wavetables rather than only having the single cycle waveforms that are included.
All of these are can write wav files faster than real time. They can also do batch processing or analysis. you can generate reports. They support realtime interactive audio applications. Supercollider has no GUI unless you bootstrap some other programming language to do the GUI. I would probably avoid processing.org with a lot of audio java calls. I use processing.org to do graphics mostly. one advantage to processing.org is that you can compile to java and integrate with other apps or hardware. all of the apps I use support some way to directly integrate, communicate, otherwise control all the other apps in the list. you can do anything you can imagine.

I am not really worried about not having the Galbanum source. Most of it was pretty easy to understand what was going on. if I remember there was a compatibility problem with Serum and Galbanum. Galbanum is in a two dimensional matrix. Serum will only scan a one dimensional array. Maybe codex would be better for Galbanum. The problem with codex is that although it supports a matrix of single cycle wav's it only interpolates in one dimension. Still waiting on Serum 2.0 or Codex 2.0. Maybe the waldorf plug will finally be released? its a race.

I typed something really long and deleted it. These are really good questions. I don't think it was specifically one thing in Serum that was limiting me. I think my needs are beyond the scope of what any VST can offer. I also think the bait was too big to resist with making my own apps. There may be a DAW some day that does everything I want for this kind of work, but right now I don't think the perfect DAW exists. I will give you some specific examples for Serum. Serum has a proprietary format for WAV files created in serum. If I load my audio into serum and bounce back with export or save I do not have %100 1 to 1 compatibility. I have not done extensive testing to see if this is a real problem or not. I simply skipped it and used free open source software to write perfect .WAV files with an exact length and amplitude.

If there is anything I do that overlaps with the topics of this thread more closely I will post it here. Some of the things I do now use library functions instead of formulas. I would need to convert them to the longer form to port it over to serum. I also do a lot more resampling. the trick with that is how do you chop it and import it to serum? if you make a bunch of single cycle .wav, you can use some program to organize them by spectral content, remove dc offsets, fade in/out the zero crossing, reconstruct the zero crossing, apply normalization using weighted FFT in the analysis section or apply custom amplitude envelopes over the entire set, etc…

If you have any questions on Serum formulas I can answer them here. 8)

Post

eatyourguitar wrote:
wasi wrote:Has anybody tried some of these?

http://countercomplex.blogspot.ch/2011/ ... f.html?m=1

Or does that concept translate at all? It would be pretty awesome if it did.
yes and no. you can not bitshift right bitshift left directly in serum. However you CAN /2 and *2. more correct would be that you can bitshift left by x bits using *2^x. you can bitshift right x bits by using /2^x. remember x has special meaning in serum so these are not formulas to be typed exactly as I write them. to confuse things even further you may actually have the serum variable x contained in my illustration as part of an expression in the exponent. this is to say that you will be bitshifting f(x) bits. there is another problem, when you /2 you leave significant data 0.xxxxx that would otherwise be truncated at the decimal and converted to whole numbers (integers). this is sorted pretty easy using rint(). in serum you bit shift right with rint(shiftme/2^bitstoshift). WARNING, you can not bitshift x*2^1.5. you must use rint to convert the power to a whole number first. shiftme*2^rint(bitstoshift). negative numbers are also discouraged as this would flip your * to a /. maybe you can exploit this as a feature to bit shift both directions on a single expression.
Meanwhile, I'll try to wrap my head around this. :shock: Thanks for your elaborate reply!

Post

eatyourguitar wrote:
wasi wrote:Has anybody tried some of these?

http://countercomplex.blogspot.ch/2011/ ... f.html?m=1

Or does that concept translate at all? It would be pretty awesome if it did.
yes and no. you can not bitshift right bitshift left directly in serum. However you CAN /2 and *2. more correct would be that you can bitshift left by x bits using *2^x. you can bitshift right x bits by using /2^x. remember x has special meaning in serum so these are not formulas to be typed exactly as I write them. to confuse things even further you may actually have the serum variable x contained in my illustration as part of an expression in the exponent. this is to say that you will be bitshifting f(x) bits. there is another problem, when you /2 you leave significant data 0.xxxxx that would otherwise be truncated at the decimal and converted to whole numbers (integers). this is sorted pretty easy using rint(). in serum you bit shift right with rint(shiftme/2^bitstoshift). WARNING, you can not bitshift x*2^1.5. you must use rint to convert the power to a whole number first. shiftme*2^rint(bitstoshift). negative numbers are also discouraged as this would flip your * to a /. maybe you can exploit this as a feature to bit shift both directions on a single expression.
Meanwhile, I'll try to wrap my head around this. :shock: Thanks for your elaborate reply!

Post

Hi there!

first of all I really enjoy this topic! and thnx @eatyourguitar for your tutorials on Serum's parser.

I 'm searching for some years also that dsp stuff, and especially wavetable synthesis. I have made a patch in Max, that can create wavetables via additive,fm,am and extract it to tables (2048-samples) wav. or .h2p format (128-points) for u-he zebra tables.

The tables are generated in "almost" real time (with fast re-triggering of the lists,to receive back immediately the changes of the variables and parameters) with the combination of list management objects and the mathematical library of max. My basic idea was to construct an expression evaluator inside the patch like bitwiz app (http://kymatica.com/Software/BitWiz) and some other stuff on the net. But it's a really tough task to program an well working evaluator in java or c++(for max externals). In my dream plans was to construct a whole vsti based on this math idea.

And thank "DSP" God (Steve of course)... here comes the Serum.

When i see this wavetable monster, i lost my days and nights in the way to learn it's brand new features.
Beside the geometrical design of the parser, i m also love the wavetable processing with "in" variable, and the fantastic and extended control of q variable (spectral bins). All this wonderful stuff is a really big pallet to play around, and the mathematics that possibly can be used are endlessly.

Of course i agree with @eatyourguitar for the limit of Serum's parser at more complex stuff.. And my thought also goes straight to Galbanum wavetables, with the usage of some more complex math, like fractals etc.

But at the end, I think that Serum's wavetable tool is a fantastic add on a Vsti synth.

Here is some of my best formulas till now. hope you enjoy them guys!

[sum(((sin((rint(-y*32+32))*pi*x)*sin(z*pi))*0.5)+(sin((rint((y<0?-1-y:1-y)*32+32))*pi*x)*(1-(sin(z*pi)))*0.5))][rissetone]
in a common synth you could use 4 lfos and 2 osc's to achieve a nice sounding risset tone.. I know that sounds crappy (basically for the harmonic steps) but the illusion i think works as well as possible for a wavetable.
[sin(sin(x*pi)*rint(-sin(10*(z+0.08)*(x)*pi)*10*(z+0.055)))][tarantula]
[sin(w*pi)*sin((0.05+z)/(sin((y/z)*x*pi)))][cfm]

some complex spectra tables created with q
[q*(q-(sin(z*pi)+0.04))%((sin(sin(sin(q*z*pi)))+0.15)*6)*(1/q)][q experiment]
[q*(q-(z+0.04))%((z+0.15)*14)*(1/q)][fft magic 3]
Here the wavetables have really smooth shapes, and are phat and nice sounding for bell like sounds.

some multi process formulas also
[(x>=0)?0.8*(rint(rint(4*(x*z^2)))*in):abs(0.8*(rint(rint(4*(x*z^2)))*in))][spikes prc]
[z=q>=rint(z*256+2))?0:(in+(1-z)*sin(rint((z)*256+2)*in))][FM filter design]
either you can design some weird filters like this. it sounds like a phaser filter. try it at 256 saw waves, to hear this weird morphing from sine to saw.
You do not have the required permissions to view the files attached to this post.
Last edited by Endov on Fri Jan 30, 2015 3:26 pm, edited 2 times in total.
Elias Panagiotopoulos
E-Mail: info@endovlane.com
Website: http://www.endovlane.com

Image

SOUND DESIGN / GAMES AUDIO /PROGRAMMING
MUSIC PRODUCTION / MUSIC CREATION

Post

this thread is hilarious...E=MC^2 is the only formula you need to make sounds
HW SYNTHS [KORG T2EX - AKAI AX80 - YAMAHA SY77 - ENSONIQ VFX]
HW MODULES [OBi M1000 - ROLAND MKS-50 - ROLAND JV880 - KURZ 1000PX]
SW [CHARLATAN - OBXD - OXE - ELEKTRO - MICROTERA - M1 - SURGE - RMiV]
DAW [ENERGY XT2/1U RACK WINXP / MAUDIO 1010LT PCI]

Post

layzer wrote:this thread is hilarious...E=MC^2 is the only formula you need to make sounds
Indeed this. also the wave equation! :D
Elias Panagiotopoulos
E-Mail: info@endovlane.com
Website: http://www.endovlane.com

Image

SOUND DESIGN / GAMES AUDIO /PROGRAMMING
MUSIC PRODUCTION / MUSIC CREATION

Post

Does anybody a way to get the fibonacci sequence in Serum?

Post

Kain wrote:Does anybody a way to get the fibonacci sequence in Serum?
yes you can do this explicitly with the values written out for each quantized section of x. or you can do an approximation of the curve using some kind of logarithm. try some logs in a graphing calculator. the max value of your fibonacci sub set is dependant on how many values you use from the fibonacci series. this will also determine the overall shape and quantization of the curve as it appears in serum. Interpolation of explicit list values is probably possible but I have no proof at this time. in fact I think I have done it previously with 3 values. modulo(x*8) produces a high frequency saw that can be used for crossfading a list of values. I forgot the rest.

Post

So what I want is something like this. In the waveshape editor you have a middle correct? So now I want the smallest possible value above that middle line (A) and then the smallest possible value below that middle line (B). And then A + B above the middle line = C and then C + B = D bellow the middle line. You know, like the fibonnaci sequence 1 1 2 3 5 ... where every new number is the some of the two previous. In this case it would alternate between above and below the middle so you get a single waveform.

Is anybody able to give me the formula I can put in Serum to do with for just one waveform? I really don't know much about mathematics or programming. Also a bit lazy ...

I'll guess I better start reading the manual that explains the formula section ...


Oh by the way was this question about fibonacci really such a dumb question? Greg Houston in the Serum main topic says I lost all authority on the subject by asking that question. Not that I had any, I have stated multiple times that Serum is the first VST that I am making my first steps in to sound design with.

And I still think this is a kickass guitar sound that I made in Serum.

https://soundcloud.com/matthijsbos/elec ... r-in-serum

Post

You were going on a rant about simplicity. I said you lost authority on that subject, the subject of simplicity, when you asked this rather open ended question about getting a Fibonacci sequence into Serum somehow.

Post Reply

Return to “Instruments”