Go to bottom

4klang Hydrokinetics by Prismbeings

category: general [glöplog]
I am really interesting how the synths were done in this 4k.

2noby: could you share the 4klang patch data?

Also who can explain how to use 4klang synth vst, I am really confused by the interface...
I see steps, I can choose OSCILATORs and ENVELOPEs and DELAYs, but I still do not get how to use ARITHMETIC FUNCTIONS!!!
added on the 2015-08-12 14:44:01 by keen keen
set the Parkinson filter to 11.
added on the 2015-08-12 17:17:18 by Maali Maali
OK, it is for what synth?
..and what about ARITHMETIC options?
added on the 2015-08-12 17:41:16 by keen keen
Ok, here's a short introduction to how 4klang works...

4klang is a pretty unique synthesizer, there are probably others somewhere out there (probably in the scope of demoscene, if so), but I'm not aware of them. It's based on a stack. What's a stack? It's away of organizing information, and as the name says it's analogous to an actual "stack". You can put elements on top of one another, but you can only access and operate on the topmost element, i.e. multiply it, add something to it, remove it, or just add something new on the top. This is crucial to understand if you want to actually do something with 4klang that doesn't involve the preset sounds (and you should).

How does the stack actually manifest in 4klang? Well, you don't explicitly see it really, that's a bit of an issue for beginners. The tall list of elements in the GUI? That's not the stack, those are the operators that manipulate the stack. In 4klang you push (at this point I assume you read at least the introduction to the wiki article) signals onto the stack. A signal can be pretty much anything. Oscillators are obviously signals, but so are ADSR enveloped and DC signals (the Load unit).

Most of the units are probably pretty self-explanatory to a musician, but indeed, what the hell are those Arithmetic units? Well, those are the key to actually doing something with the stack. Every 4klang instrument by default has an envelope unit hardcoded as the first unit. If you remove all other units, you get an error at the bottom that the signal count is not 0. Indeed it isn't, since there's an envelope signal pushed onto the stack. Now if you take a look at the Arithmetic unit, there's an operation called "POP". Apply that to your stack, and now you have a working instrument! Obviously not very interesting one since it doesn't even output anything to the master track.

Let's actually output something. Remove the arithmetic unit and instead add an Output unit somewhere there (remember that the units are executed in numerical order starting from the top). Now you'll get an error telling you unit # needs at least two signals. We'll, we are operating in stereo, so that would make sense. Add a new arithmetic unit somewhere between the envelope and your output. Now try the "PUSH" functionality. If you look at the "descriptions" on the right, it indicates that the push-operation duplicates the topmost signal. Now you're actually outputting something from 4klang!

Obviously it isn't any sound you could hear, ADSRs rarely do something like that, but you should be able to see your host's VU meters act up at least a bit. So, let's out out some audio now. Leave everything as it is, envelope at the top, the arithmetic-push and output units at the bottom. So how do ADSRs actually operate on the audio? Well it's a function of time (for simplicity's sake) that modulates the amplitude of an audio. Such a modulation is analogous to multiplication. We'll want to use an oscillator now, add one after the envelope. Now your instrument is broken again, because the output only only takes two of them and you have one left over (remember the PUSH only copies the topmost signal in the stack). Let's add another Arithmetic unit after our oscillator and try to find a solution. This is where one of the two most essential (in my opinion) arithmetic operations comes into play.

These are the +/POP and */POP operations. In fact they're sort of macros, since they perform to operations in one. Essentially, they combine the two topmost signals in the stack, either adding or multiplying them. As discussed earlier, we want to multiply them, so choose the */POP. Now everything is perfect, you have one ADSR modulated oscillator in your stack that is duplicated for a stereo sound (well, it's of course mono, really). You can replace the arithmetic push before the Output with the Panning unit, which essentially does the same push operation, but let's you adjust the balance between the original and the new pushed signal.

Few more things to remember:

  • Almost all units always operate on the TOPMOST signal in the stack. This often makes stereo sounds kind of cumbersome in 4klang since you need to duplicate the necessary units for both L and R channels (the XCH operation is the key here).
  • The arithmetic units give some really interesting possibilities, remember to look at the "instructions" on the right of each unit.
  • If you get stack errors at the bottoms, go through your units and see where your stack gets fucked up. Usually you need to just add or remove Arithmetic units (or ones that push signals to the stack).
  • It's possibly to filter or distort any signals such as envelopes or modulations and LFOs, not just sound oscillators ;)
  • To do modulations: add a signal, use a store unit, pop the signal away. For global modulations (i.e. not note-triggered), use the Global channel.
  • Remember to save your patches!
added on the 2015-08-12 17:58:24 by noby noby
The trick is that you're basically programming the x87 FPU via the VSTi interface. So don't worry if it seems weird at first :)

Every unit in your instrument definition operates on this stack. The units on the top of the view are executed first and the signals propagate downwards.

For example, the envelope unit pushes a single signal on the stack, and then an oscillator unit pushes another. We want the envelope signal to modulate the volume - or multiply the amplitude - of the tone generated by the oscillator unit.

So, the situation is that we've got two signals on the stack (see number 2 to the right of the oscillator block) and we want to multiply them together. It can be done by adding an arithmetic unit, and selecting the */pop operator from its properties.

BB Image
If you didn't notice, this is the default instrument in 4klang.

If you look at the arithmetic operator description in the unit properties, you can see it's the following.
Code:a b c d -> a*b c d

The letters represent the stack, and the top of the stack is on the left-hand side. Letter a is the value on top of the stack, or in other words, the value pushed on the stack last.

If we substitute the letters with the signals in the example, let's call them ENV and OSC, the operation of the unit becomes apparent.


The two values are popped off the stack, multiplied, and the result is pushed back.

What's the difference between the * and */POP operators then? Simple: * leaves the multiplier (the letter b) on the stack instead of popping it off along with the multiplicand. In this case we'd end up with two signals, but we want just one.

4klang doesn't consider an instrument valid if it doesn't have exactly 0 signals on the stack at the end, because otherwise you'd overflow the stack on successive evaluations!

BB Image

The DelayLine unit takes in one signal and outputs it with the delay applied, but the Panning unit expands a single input to two signals weighted by the panning ratio specified in its properties. Again, see the number on the right-hand side of the unit.

Finally, the Output unit is a sink that pops off two signals from the stack and interprets them as left and right channels respectively, and mixes them with the output audio buffer. Now you're left with an empty stack and a happy floating point co-processor.
added on the 2015-08-12 17:59:54 by cce cce
I would say, you have to know synthesis first. When you know what kind of signal processing gizmo you want to build, then you have to translate that to this weird 4klang stack thing. If you don't know synthesis, then 4klang is a very confusing ass backwards way of learning it. My opinion only.

Also, if you don't understand even the most basic things about 4klang like what and why the arithmetic operators do, then it's not the time to ask for the most incredible fine-tuned presets to be given to you. You will be like a pig trying to understand a satellite, as the Finnish saying goes.
added on the 2015-08-12 20:13:57 by yzi yzi
You will be like a pig trying to understand a satellite, as the Finnish saying goes.

I'd love to hear the original saying, as that doesn't ring a bell at all. (ring a bell? in a synth thread? totally unintentional pun)
added on the 2015-08-13 08:41:51 by sol_hsa sol_hsa
2noby: thank you a lot(after your 4k and this post I tried to find more of your demos and was surprised that you was in Epoch.. really like most of them, they have a glow!!!), I didn't mentioned my skills(I was do some programming with assembly languages, thus I feel stupid that I didn't get that 4klang has stack model) and you clarified everything so it could be a good tutorial for everyone who will start with 4klang... it really helped me to understand how it works, I still have some questions, for instance:
I was able to create a chord synth, but in very simple way ;))).. and I am curious how to create an arpeggio synth, it can save a lot of space I guess...

2cce: thank you very much your update was also very helpful.. I think with all the knowledge I have I can make a good tutorial how to use 4klang with Renoise for 4k intro...

2yzi: what do you mean under "to know synthesis".. there a lot of different kinds of synthesis..

for instance I saw a lot of intros and did not see a try to use simple speech synth based on classic acoustic theory(when we have two OSC --- saw for vowels and noise for consonants, and pass them though a chain of filters):

and even if I have basic synth knowledge http://beausievers.com/synth/synthbasics/ how it could help me to understand that very hacker-like UI of 4klang...

anyway I checked out your stuff and I want to know how did you create such specific synth in this intro?:

could you share with us what you did to get such interesting sound?
added on the 2015-08-13 14:52:59 by keen keen
keen: thanks man :). Regarding an arpeggiated instrument in 4klang, not sure right away how I'd do that... I'm sure it's possible though. I'm not sure it would necessarily save space though, depends on what exactly you're looking to achieve.

Also I forgot to mention I'm interested in making some video tutorials on the subject like Yzi and some others have suggested, but I don't have the necessary sound setup at the moment to do it properly. I'll look into it when I have more free time. I'll probably put out the patch in question and some others too when it comes to that.
added on the 2015-08-13 15:10:00 by noby noby
for instance I saw a lot of intros and did not see a try to use simple speech synth based on classic acoustic theory(when we have two OSC --- saw for vowels and noise for consonants, and pass them though a chain of filters):
Looks like you missed Tiny Speech Synth by stan 1901 and JS1K Speech Synthesizer by ribbon
added on the 2015-08-13 15:34:50 by p01 p01
keen, for arpeggiated sounds, look @ these:

noby, perfect introduction. Some "how to" videos would be awesome :)
added on the 2015-08-13 15:54:07 by Virgill Virgill
About Fimpo Coller S1E2. The whole idea was to try and do pitch bends in a 4klang tune, and everything else, including the visuals, were added as filling to be able to make it a releasable prod. I think bends/portamentos are an important thing in oldskool tracker music I like, and you don't hear those in 4klang tunes, because the only thing the tracker pattern data can say is "note on" and "note off" basically. So I thought, is there a practical way to do musically meaningful portamento effects. The end result is, it's possible but awkward. Pretty much what I expected.

IIRC, the wah-wah like effects were done with a simple band pass filter with a slowly modulated filter frequency. The rain sound is some kind of a random oscillator thing that's played very slowly ie a low pitch. And what else is there, nothing really. Very basic 4klang factory presets with a little bit of tweaks.

The pitch bends are done with an inter-channel modulation where the source instrument only has a slow-attack envelope that's routed to the oscillator pitch of the instrument that's being bended. If you know modular synthesis at all, you shouldn't have any trouble doing that.
added on the 2015-08-13 16:36:12 by yzi yzi
2p01: I saw it, but thank you anyway.. the only prod where speech synth is good was https://www.youtube.com/watch?v=rGHpGFH8Scs
also there was an ANDs 64k ASM winner, but haujobb's was the best...
2virgill: thank you man ;)))

actually, I am going to make a tutorial for 4klang usage with Renoise...

2yzi: could you share the patched data? maybe virgill will ask Gopher / Alcatraz to put that tune to next 4klang release.. I want to see noby's tune there also..

regarding arpeggios I see only one problem, that is sync with tune's bpm, maybe some people allready know how to do that fast...

my goal is to create some variable filter setting, arpeggios synth with variable LP filter.. nothing new ;)))..
and the second goal to create some really good pad chords
added on the 2015-08-13 18:22:01 by keen keen
How do you plan to do arpeggios?
added on the 2015-08-13 20:56:44 by yzi yzi
Virgill wrote here with his link to an example, ENJOY:
keen, for arpeggiated sounds, look @ these:
added on the 2015-08-13 21:18:15 by keen keen
I just have checked that tune and was amazed.. I already heard it on soundcloud but I did not even try to think it was 4klang.... awesome!
added on the 2015-08-13 21:21:20 by keen keen
it was already shared.. very nice soundtrack...
BB Image
added on the 2015-08-14 16:24:06 by keen keen
noby, do you think its possible to hard-sync 2 oscillators in 4klang somehow?
added on the 2015-08-14 16:32:52 by Virgill Virgill
Made couple of 4klng tunes with both Renoise and OpenMPT. Getting started with 4klang on Renoise is a bitch (Hey, Virgill :D ) and personally it's far less CPU raping if you track it in OpenMPT.

As leat on my crappy Laptop its possible now to listen at least to a couple of instruments calculated at the same time.

Concerning creating instruments:
I'm a totally noob to synthesis theory so the only way pads worked for me until now was to use several instrument slots with similar instruments.

My latest examples:
Soundtrack from 50 Shades of K
Compo Entry for Nordlicht 2015 exe music Compo

The patch and tracking data is included in the Zip @ scene.og https://files.scene.org/view/parties/2015/nordlicht15/music_executable/dsr_51shadeofwhatever_pc_.zip
added on the 2015-08-14 18:33:34 by Triace Triace
Virgill: honestly I'm not sure how it actually should be done in the first place... maybe you could kind of fake it by multiplying an oscillator with a pulse wave and adjusting the phase and duty cycle?
added on the 2015-08-14 21:02:39 by noby noby
Noby, too much fiddling *sigh*
Triace, your tracks are soo nice (especially knowing your olde laptop) :)
added on the 2015-08-15 15:34:54 by Virgill Virgill
Thanks Virgill :)
Yet there is still MUCH room for improvement (and mastering by headphones sucks :P )
added on the 2015-08-17 19:28:20 by Triace Triace
noby: Not that I know anything about 4klang, but if you have frequencies f1 and f2, you could do sin(f1*2pi*(t mod (1/f2))) to get a f1 Hz oscillator resetting at f2 Hz. This gives you hardsync, although of course it will alias like crazy.
added on the 2015-08-17 20:34:16 by Sesse Sesse
Sesse: Well yeah, something along those lines... you could sort of do it I guess, but the modulus is the real showstopper. I looked some possibilities quickly today, but mainly came up with some "interesting" phase distortion instruments... :)
added on the 2015-08-18 00:11:05 by noby noby
A triangle wave would give you exactly this kind of modulo, but perhaps that's hard to synthesize, too? (Even from, say, an appropriate number of weighted sines?)
added on the 2015-08-18 10:49:07 by Sesse Sesse


Go to top