In this video, Meta Function demonstrates exporting a diode ladder TB303 zero delay filter Gen patch via RNBO in Max as C++ and using the code as a Hardcoded Polyphonic FX in HISE. This allows you to use the diode ladder filter emulation with polyphonic modualtion inside VST’s exported from HISE.
Thanks to Christop for the HISE NUM_HARDCODED_POLY_FX_MODS pre processor feature.
The Art of VA Filter Design:
https://www.native-instruments.com/fileadmin/ni_media/downloads/pdf/VAFilterDesign_2.0.0a.pdf
Urs Heckman Blog:
https://urs.silvrback.com/zero-delay-feedback
Oli Larking C74 Forum post:
https://cycling74.com/forums/zero-delay-feedback-svf-in-gen
Is there a Hardcoded Polyphonic FX P1 / P2 etc modulator preprocessor definition?
https://forum.hise.audio/topic/8883/is-there-a-hardcoded-polyphonic-fx-p1-p2-etc-modulator-preprocessor-definition/3?_=1707494140067
Subscribe to Meta Function on YouTube for new content!
https://goo.gl/RMY7Jv
Website: http://metafunction.co.uk
Facebook: https://www.facebook.com/metafunction
Twitter: https://twitter.com/Meta_Function
Blog: http://metafunction.co.uk/blog/
In this video we’re going to see how we can use zero delay feedback filters also known as topology preserving transform filters from Max MSP rainbow and gen and bring those into highs and use them fully polyphonically now these filters have been rather fashionable for the last 10
Years or so in synthesis they really are an extension of traditional DSP filter design by using some interesting tricks and they sound quite peachy uh they’re very good for synth applications this is the white paper the art fa filter design by Vim Zin who works at na instruments
And is part of the reactor development team so the big contribution to this filter design was already to take an analog model and then use a clever piece of algebraic manipulation to move this into a new space using some different types of factor so this paper is a
Little bit full on it’s kind of a heavy read don’t be afraid of any of the mathematics in here but we can see how these filters can be used to sound a little bit more like a real analog filter it’s worth noting these filters aren’t really discret circuit modeling
By the likes of universal Audio Waves however they are actually quite peachy and sound quite good so I’ll put this link into the comments below so you can see a little bit more about the theory there’s also a great article here from Earth Heckman who runs UI in Berlin
Which is a great synthesizer pluging manufacturer and this gives us an overie of some of the method of the zero delay filter methodology it’s a little bit easier to understand this one in the previous link but these filters have been used a lot in many sort of interesting synth plugins for example
There’s lots of Max for live devices that feature this this is the dark synth from amazing noises on the Ableton web shop this has got a couple of interesting zero delay feedback filters inside it in fact the zero delay feedback filter stuff is quite common across the max landscape so you could
Google around the cycling 74 forums and find examples of these patches here’s a great example from OE Ling who now works Ableton with various different model designs that he’s done based on some of this Theory so there is quite a few zero delay feedback filters available in the
Max MSP landscape you can Google for some more the one we’re going to have a look at here is one based on O’s interpretation of this diode ladder so this is actually an emulation of the Roland CB 303 filter and the EMS vs 3 filter it’s a four Poole died ladder
Sounds a bit different from the mini mooge that has a four pole transistor ladder the tb303 is quite famous for having a very squelchy filter um it’s actually a four pole but it operates a bit more like a three pole so it’s really 24 DB but it has a bit more
Frequency responses to uh an 18 DB so these filters are actually really really interesting and so much more peachy than what we might be used to with filters in the digital landscape as you can see the code is a little bit hairy but we’re not really going to be too worried about
Understanding the algebraic manipulation of some of these lines of code we can just stick these into gen and rainbow export them and put them in highs so the main reason I wanted to make this video is because recently Kristoff was nice enough to add some hardcoded polyphonic effects modulation elements in one of
The dev branches of heis so now got a way to add some poly modulation into sort of some of our hardcoded poly effects which means we can use these filters with true pipany so I did promise Kristoff that after he did this I’d make these free tutorials but I’ll
Stick this link up if you’re interested in the read we are going to have to be using a certain version of highs from the dev branch that allows us to have our hardcoded poly effects activated by some pre-processor definitions so let’s jump into into Max and have a
Look so here we are in Max MSP I’ve got a little example for you so you can hear the difference so make this patch available to you as a download we’ve got over here a drum Loop so we’re going to trigger our drum Loop and now we’re
Going to come over and make sure we’re going to root the drum loop as our input source in our little drop down menu here that is now being passed over to our rainbow diode filter and also the standard max State variable filter which is using the more traditional filter DSP
Methodology so to audition this we just got to choose our filter so let’s go to the svf this is the standard max MSP filter that’s a usual typical digital filter using the bilinear transform it’s you know standard DSP so let’s have a quick listen to this we see if we can
Hear how this Filter Works so it does self resonate but yeah pretty much a standard digital filter from the DSP landscape the sort of thing you’ll probably find inside a stock plugin from a door or maybe on a digital mixing console let’s move over to our diode which is running
In Rainbow as a gen patch so let’s crank up our gain and we’ll see the filter really squeals when it starts to self- Resonate so also has a bit more of a crunchy element to It let’s push it up it’s going to get a bit squealy now so watch your Headphones so we push it right to the point of Self-resonance so a quite a nice more musical result than the standard svf nice so let’s have a look at the patch we’re going to go inside our little Rainbow patch here and we can see this is our little rig so we’ve actually got the parameters coming in over here on
The right hand side we’re actually having to calculate coefficients based on the resonance parameter most filters would calculate the coefficients for the filter that produced the output based on the user’s requirements of cut off and resonance so we’re actually calculating here the A and K coefficients using
These little bits of rainbow math and these are all fed in with the audio and the cut frequency value into our gen object so we’ve got a left and right hand side here it’s both exactly the same code duplicated one for the Left Channel one for the right channel so the
Code block itself is actually only really operating mono so let’s go into our gen diode thing and we can see we’ve opened up the G patch so here’s the code we saw earlier from the website which has been moved over into the Gen environment by olle I’ve Ted it up a
Little bit added some different comments in here for us we can see here really that you know the core of this is to calculate all of these different coefficients amounts for various different stages in the ladder and you can see the reason the TB 303 was quite interesting in terms of analog circuitry
Was the way the coupling of the diodes worked which gave it its unique feel so this is sort of the main part of the code block and it’s a zero delay feedback so it’s actually using a couple of delay States it’s you know a bit of a misn nameer really zero delay feedbacks
Do actually have little delay lines them but the delay lines are usually one sample a typical digital filter actually uses delay lines of more than one sample to provide the filtering technically a digital filter is a sum of shifted impulse units which are really delay lines in the SLE landscope so this
Filter looks a bit hairy but you know again we can utilize the code through rainbow you can find other examples of zero delayed feedback online and maybe patch those into some sort of code block like this and we’re klicking the output back from gen through into our rainbow
Patch which we can compile now this filter actually is requiring a specific dewarping setting here cuz we’re not really going to be running this with oversampling we could do that if we stayed in the max domain but for now we’re going to use this particular line which was um operating here is
Uncommented because we’re not actually going to be running the output of this through a polyphonic object in Max for oversampling so that’s quite an important thing to realize if you want to with this code so as we might have seen from a previous bunch of videos I’ve made it’s quite easy to export
Stuff in the rainbow domain so here’s our main rainbow patch and let’s see how we can actually export this code as a C++ source and bring that into highs so we’re inside our rainbow patch and all we need to do is open up the toolbar on the right hand side for the
Export and we’re actually going to come back to the main window here and make sure we can see source code export for C++ so we’re going to export it as C++ code let’s click through for that next up we’re going to have to configure some of our properties
This is very similar to a previous video I made earlier that shows you exporting rainbow into highs so let’s choose a location for output directory I’m going to place this into the folder next to my Max Patch in folder called C++ that’s our destination we’ve got an export name
Diode this needs to be exactly the same name for the export parameter here as the class name so we’re going to make sure they’re exactly the same and the important thing here is to disable any pipany provided from Rainbow he is going to handle that for us so we can click
The export button in the bottom right hand corner this will be super quick because we’re not really using a cloudbase interpreter from cycling 74 for this we’re using the C++ route export we’ll see it’s done so super easy let’s come back to our desktop and we’ll
See in our folder now we’ve got a bunch of stuff here which we can now move over to highs so the entire contents of our C++ folder needs to be copied let’s put that in our buffer and we come back to my high project I’ve prepared as a
Little example for us here and we’re going to move into the DSP networks folder this is a standard Heist project that’s been created just to be able to import our code into in the DSP networks folder we’ve got to have a thirdparty folder which I’ve created so you can see
Here third party see capital T capital P noce spaces inside there is a new folder I made called Source SRC and this is the location where we paste the exported code from Rainbow so super easy let’s move back to highs we can see here’s the project I’ve created to prep so this
Project just really has a way from generator i’ made a couple of dials here you can see on the right for cut off resonance and envelope so once we’ve created a project we want to load it into in highs we’re going to go to the tools drop down menu and create create
C++ 108 for rainbow patch now because the file has been copied over successfully into the right location he automatedly sees it so we can select our diode CPP which is being exported from Rainbow this is going to be a stereo device we need to make sure our Channel
Amount is set to two so the previous videos I made about this we always worked with the pipy disabled but now we can actually enable the pipany this will allow he to allow us to utilize these filters with true so let’s press okay and we see that
We’re going to create our file here and we now need to export the DL so once we’ve created this we can visit the export menu compile DSP networks as dll and we’ll see we’ve got our diode it shows up in the list it’s fully polyic we’ll press okay launch the script and
He will compile our code for us so it’s going to take a while we’ll come back when this is finished so our compilation was successful a quick terminal that launched the script I’ve rebooted highs and I’ve loaded back into the project in high that we’re going to use with our poly diode filter
So the module true now I’ve got my waveform generator and under the effects section I’m going to add in a hardcoded polyic effects and we can see inside that object we now have access to our diode filter from the ddl export from Rainbow so what’s interesting here is we’ve now
Got two modulation slots P1 P2 modulation so this is because of Kristoff’s update to the development Branch for this to work we need to use the pre-processor definitions num hardcoded poly effects mods equals two or six or eight you might be familiar with a number of hardcoded effects mods
This is a new version for the poly effects for this to work you’re going to have to use this pre-processor definition is you have to add these pre-processor definitions into the original juice project and rebuild highs and also to use them in your vstd export from your highs project include them
Into the settings for your project so these are all in here now which is where we can see P1 and P2 modulation showing up so let’s go into the P1 modulation and we’re going to add an envelope a hdsr so now we’ve got ourselves a little envelope here let’s come into the
Envelope and we’ll have a quick demo how these sound but to make it really noticeable with our envelope depth we can move over to very long attack time so for example in my code once I compile it we’ll be able to see that we’ve actually got some mapping and scripting
Here to control various aspects of our device we got a cut of frequency in our resonance and we’ve also got pre-prepared over here an envelope depth amount for polyic envelope modulation let’s have a listen to how these sound so there’s a died filter inside highs let’s kick over to our adsr modulation
Source increase the envelope amount and let’s let’s trigger [Applause] Pipany so you could hear each of those three notes I triggered had an independent filter sweep modulating the cut off via the envelope frers so there you go polyphonic filters using zero delay feedback and a diod emulation from gen rainbow Maximus p and highs so once again thanks to Kristoff for allowing
This functionality he’s amazing and hopefully you can explore some more zero delay feedback circuits you can find online for example in the cycling 74 forum and see if you’re a Max user get those through to Rainbow and Gem so we do need to have a license for rainbow to
Use this it’s a additional cost on top of you do also need to recompile highs with the pre-processed definitions but if you have any questions or anything shout out happy to help out until next time have fun