Moog "zero delay feedback" ladder filters + Korg & friends
  • Noise? You're talking about the noise in the diode clipper sub-patch of the Korg35? I exagerated a little bit on the amount of this one I think, but if it's cool soundwise why not. As for the gain be careful, on certain filters it will hardclip badly. I think that the gain or drive control should be done outside of the filter anyway.
    As for the updates, KB tracking is my priority on all filters. I'm planning to release another iconic filter soon too.
  • Pretty awesome to hear about all this progress! I've been squirreled away on some other modular/computer interface issues, but I'm really looking forward to getting back to playing with these again soon.
  • I'm making progress with the new filter, here is an audio test done on iOS with Virsyn Tap delay.

    https://soundcloud.com/sans_nom-1/bassline
  • Sweet, new Sansnom filters are always welcome. I have been getting to know the korg 35 filter a little more and it is really rather amazing when overdriven :)
  • Sure, he's the bad boy so far!
  • Man, that saturation/overdrive/distortion/whatever is NOICE!
  • @Sansnom sick...just sick. What is this based on?
  • https://soundcloud.com/audulus/bimini-road-the-horror-acid-house

    Demo of my version of the Korg 35 with more drive control
  • Man, excellent track! Great sound!
  • Man, that new filter sounds amazing, SansNom! Also loving the Korg 35 here, I did an exercise I liked last night that used several of the ones from this thread with external modules, it's so great to have them in the toolbox.

    Bimini Road, that piece really gels for me right around the 1 minute mark, I get totally pulled in and lost in the rhythm and textures at 1:15. Really fun.
  • @all - I'm glad you like it. Should be released very soon.
  • diodeladder.jpg
    1349 x 531 - 152K
    diodeladderLPF.png
    2048 x 1536 - 122K
    Diode ladder LP filter.audulus
    128K
  • @sansnom You are the best!
  • yissss thank you @sansnom! Very illuminating description too :)
  • Thanks ;)
    @biminiroad - If you notice significant differences with your stg Sea Devils I'm interested to get the soundfiles.
  • Man, I'm getting some great sounds from this Diode Ladder low pass, a little bit of makeup drive after it and it breaks up in a really nice way.

    I'm using the drive algorithm from the stereo output module of the 8x2 mixer, I don't know if it's the sound material I'm using, or the filter, or the combination, but they seem to work really well together.
  • @demcanulty - Nice. Audio examples you want to share?
  • Screen Shot 2017-06-12 at 8.40.13 PM.png
    647 x 518 - 296K
    vMS20 Filter Demonstration.audulus
    1M
  • @biminiroad Funny how the basic 8 step sequencer is often the best one for melodies?
  • @robertsyrett - yeah! I wanna make that one better with directionality and min syep but its so nice to just pull an 8 step out and just get going.
  • Awesome! And I don't think I had a copy of that 8 step sequencer module, I like how simple that is, definitely going to start using it for just that reason, I've been looking for a nice low-fuss sequencer.

    SansNom, I'll share something soon hopefully! :)
  • Love that sidechain compression!
  • did I misunderstand? I had initially thought the korg was an ms20 emulation and then thought I was corrected to it being a different korg filter. the MS20 highpass is my all-time favorite filter and the last one I had downloaded from this thread may have been superseded. Just want to get it if so because Ive got a major crush on that filter.

    Also I have been attempting to extract/clean/isolate the internals of the different ones to consolidate and optimize a model that contains them all in one without any redundancy. Was wondering if @biminiroad has done that already?
  • @plurgid (plur kid? peace love unity respect? do you have any candy bracelets and vape-o-rub?)

    I wanted to reply to your prior question as to WTF? how does this work?? cause I was kinda the same when I first started messing with the z-1 in Audulus a year ago (being a beta tester has some fun advantages :P)

    HOW A FILTER WORKS:::

    so since the z-1 gives us the last sample, when we crossfade or add in the last sample to the current sample, it effectively AVERAGES them together. Because we are doing this constantly through every sample in time and using the output to feed back into the average, the more of the old sample (output) that we mix into this recirculating loop, the more it ends up SMOOTHING out the result. If we do this at a much slower rate as in the SLEW module, you can easily see what happens on the built in wave scope. that module uses the feedback delay and the crossfade, which has the same effect but just on a slower time scale. When a signal at audio rate is smoothed out, we end up losing the high frequencies.

    what is really interesting is that this is the same thing that is happening in analog filters, only using things like transistors, diodes or op amps (these are the level/multiply/crossfade in the Audulus patch) alongside capacitors (which accumulate electrons, giving us something roughly similar to the z-1 in effect). and variable resistors (potentiometers/knobs, which are like our Audulus knob controlling a crossfade, or slightly similar to the level object)

    what makes analog filters so special? Why is it people always preferred analog? 2 reasons: the components are INACCURATE, and subject to nonlinearities that you can review in the data sheets, they respond to current and voltage in a way that is not perfect and linear (IE put in 1 volt and get 1 volt out, put in 2 volts and get 1.7 volts out cause the component isn't perfect like floating point digital numbers... well they aren't perfect either but not about to go on that tangent.. suffice it to say they break down when you try to represent values that are both HUGE and tiny at the same time like "2374598729687.0000000000001" computer is like sorry bro I can't see that .000000001 cause I'm focused on the 238572935729385739 part).

    So anyway, these shitty electronic components that were the bane of scientific accuracy end up sounding really f***ing cool when you are using them artistically because they DISTORT the signal in ways that are NATURALLY HARMONIC!!! like woh man, trippy.. and then these dudes made this stupid computer thats all precise and biquad filter that are just math nightmares for people who don't have a degree in calculus or whatever.. so the dudes who had that calculus degree were the ones programming the digital filters and of course they hadn't taken enough acid to consider that they sound boring and shitty to people with a musical ear because of the second thing that made analog filters better which was that unlike digital sound which is typically driven at a sample rate causing a limit to the frequencies it can deal with properly (previously discussed Nyquist frequency) causing frequencies to fold back.. well the analog world don't have that limit.. 'tis physical and (virtually) infinite resolution. So all this beautiful distortion of the wonky components came through clean, harmonic, loud as it wanted to be till it blows your speakers cause you didn't put a limiter on your output and now you got these really cool speakers which are shooting shards of the woofer out at you and billowing smoke and its the coolest thing you ever saw (yes I did this back in high school it was awesome)

    Now that I have given the basic understanding of how a general lowpass works, highpass is simple, we subtract the low frequencies that we have extracted by averaging them from the original signal.. and for bandpass uhh.. shoot I think I need a refresher on bandpass cause Im having a brain fart.. I made the SVF in Audulus modules copied from a website in the same way that @sansnorm did these ones, you can check in there to get an idea of how the different notch and bandpass are achieved.

    Ok, thats enough nico.. back to work. While Im working would anyone else have an understanding of "WTF HOW DOES THIS WORK WITHOUT THE Z-1 / I'm too lazy to read the whole PDF" cause thats the actual question at hand and I have done a great job of typing for 10 minutes and not actually knowing that.

    Oh yeah and super sampling, we need that I guess... Taylor and I made a ridiculous Audulus module a long time ago that was trying to super sample by averaging a whole module with a z-1 of a poly 4x and proportions. Ill dig that up and see if it does anything.
  • Honestly @MacroMachines you should write a textbook in that style.
  • @MacroMachines - The Korg35 is the chip used to make the MS20 filters, among others. So the HP filter on p.1 is the correct filter.
  • As for the maths and z-1, I'm not an expert but other people are. I think this link is what you're looking for.

    https://urs.silvrback.com/zero-delay-feedback
  • Here's a new version of that patch with drums and spline automation - it's a nice 10 minute long zone-out tune.
    vMS20 Filter Demonstration with Drums.audulus
    2M
  • I'm trying something new for tutorial videos - instead of talking the entire time (which takes a long time to do, and makes it harder to do more tutorials), I have subtitles explaining the patch. The advantage of this is that you can easily translate the subtitles with Google Translate into many other languages.

    To translate the video, make sure subtitles are on, then click the gear icon, subtitles/CCs, then click auto-translate, and you'll be given a list of language options. From my limited knowledge of French, they seem to be translating well into that language at least.

    I'm trying to write the subtitles simply enough so that they translate well, but invite some feedback on specifics.

    Here's the draft unlisted video - let me know what you think!

    I won't do this for *all* the tutorials, but just wanted to try it for a change.

    Note: It looks like to turn on the CC's you have to go to the Youtube site instead of just watching the embedded video.

  • @MacroMachines, thanks! That explanation made a lot of since. I think I'm beginning to understand ... sort of. My intuition would have led me to think averaging samples would create a leveling effect on the amplitude, like a compressor or something ... my first guess wouldn't have been a filter, anyhow!

    Heh ok so my name ... plurgid ... man what a story. It actually predates "plur" rave culture stuff by quite a bit. Back in the day, there was a Hitchhiker's Guide to The Galaxy text adventure someone ported to C-64. My nerdy middle school friends and I had obtained a copy from a BBS ... at a sleepover ... by leaving a modem dialed in literally all night long. But anyhow, the game effectively had cheats you could enable by answering trivia questions about the books. One such question asked you to cite such and such line of Vogon poetry.

    If you're with me this far you're a trooper. A'ight, so this question comes up, and I'm all like "hellzyeah! I got this, trust me" ... I type in "gabbleblotchits on plurgid bees". This is the wrong answer, and now my friends and I are locked out of the cheat mode for that level or whatever. Naturally one of the nerdpack, does indeed have the book on hand so we look it up and the correct answer was: "as gabbleblochits upon a lurgid bee"

    Naturally, I was razed mercilessly. Later on, when I got my own modem, I used it as a handle, and here we are like 30 years later, lol.
  • Ah bbs days. I had a collection of mod files that I had downloaded from bulletin board out of southwestern PA where I grew up in the early 90s. It blew my mind that you could encode music like that in such a tiny file format.

    Also as soon as you said hitchhikers I knew exactly the scene you were about to cite. That passage was also my first introduction to the word micturations, what a brilliant beginning for a poem. That Douglas Adams fellow had a first-rate mind.
  • biminiroad, I think the subtitle version is pretty workable, I have to go through it slowly, but I'm definitely getting a much better idea for the way you think about this patch, which is really helpful for getting a kind of paradigmatic perspective on this kind of composition.

    I'd say if this technique makes it easier for you to make more tutorial videos, it's well worth it. It should open up the door to more users who want to become experts to become well versed in productive methods of production, and ideally lead to more independent tutorials.

    Also, as you point out, it could make it easier to make your work available to users for whom english is not an option, which could be really awesome. I'll look forward to the future forum in which there are innumerable threads that I cannot understand, but whose patches I can open and listen to :)
  • @biminiroad - Impressive job!
  • Suggestions for the video: zooms to the specific places you describe in the comments (I know, synchronization must be tricky here!). As for the translation, it's not as good as you would hope (in French at least, some weird stuff really! e.g. lead = plomb (the metal)) but for someone who's not very familiar with English, it's lot easier to read than to hear anyway. So useful even without translation I would say. However, lots of comments in this video so you have to read fast.
  • Even as a native english speaker I had to pause a lot just to take in the ideas, but still, it's very useful to be able to pause with the text on the screen, where you can refer back to it continually while you look at the images, or explore your own patch, or possibly consult your dictionary :)

    Just remembering the latter from when I lived in mexico, I loved the tv stations where I could see the subtitles, even though I couldn't pause the television, it was still so much easier to understand.
  • @MacroMachines, good non-technical explanation of a zero delay filter as well as the gap between analog and digital. @biminiroad, I thought the video was well structured and did a good job of explaining the patch, but like SansNom I think zooming in on the section you are referencing in the comments would be helpful if you can manage it.
  • BTW I forgot to thank SansNom and everyone else who contributed. These filters are very impressive. I've been playing around with them and hope to have something to post soon.
  • Can someone make a z-1 all-pass filter for use in reverbs? I'm curious to know what @lagomorph's awesome reverb patch would sound like with z-1 instead of biquad filters.
  • @stschoen - Thanks!
    @biminiroad - I'll make one, but unless you introduce nonlinearities that shouldn't change the sound much. From my understanding biquads are not that bad unless fast modulated.
  • @SansNom I came across this thread since I'm an Audulus customer and I like the expert sleepers silent way plugins for controlling my own plugins as well as external gear, and recommend their products to my customers if they way to add additional modulators.

    If you have questions about solving implicit filter equations I know lots of answers. Just a word of warning, I prefer to use correct mathematical terminology instead of more modern embellishments such as ZDF (which doesn't make sense on multiple levels).

    The most efficient solution of these equations I have found is usually an optimised row reduction solution of the set of linearised equations, in the simple case of the a linear SVF or Ladder then an explicit solution can be written down, but as soon as you add multiple non-linaerities things get messy real quick. In my plugin The Drop I've solved the following filters: MS20v1 Korg 25 based (MS1), MS20v2 OTA based (MS2), Moog Prodigy (PRD), Oscar (OSR), Odyssey v1 (AMU), Wasp (WSP), Jupiter 8/Juno6 (JPR), SH-101/SH-09 (SHR), and a few custom circuits I've designed like an input mixing Sallen Key (KSM), a filter half way between a Sallen Key MS20 type filter and an SVF (SMP). Being able to solve these filters accurately and efficiently is difficult, and for me only possible by writing an entire optimised circuit solving framework that calculates the most efficient method possible to iterate to the implicit solution of the equations. Oversampling is a parallel task, and does make things easier, but there is still no getting away from an implicit equation solver in general analog modelling cases.

    Biquads are LTI (linear time invariant filters) abstractions not analog models. Linear time invariant means you can't change the cutoff or resonance since the coefficients computed don't work from the previous state when you do so. They also suffer numerical issues, but as long as you don't change the cutoff, or resonance, and use double precision numbers to calculate them then you're all good.
  • @andy_cytomic That makes a lot of sense about the biquad filters. They definitely sound better when you aren't modulating the cutoff. Can i request a patch example? I would love a nice analog sounding filter module that was well documented inside about what each equation is doing in context. It need not be a very complex module, but I would love to have a little better understanding.
  • @andy_cytomic - Thanks for your comment, I knew that at some point a big name of the dsp world would chime in :). As for the zdf terminology issue, I've read all these excellent threads @KVR, I know you're not a big fan. When reading Zavalishin's book and Will Pirkle app notes, I've just noticed that all these block diagrams could easily translate into audulus patches. Having block diagrams is a great start because Audulus is a graphical programming interface. I feel that one of the strengths of this approach is that inserting nonlinearities is straightforward and don't introduce unsolvable equations. There are probably better algorithms to build. I would like to build my own, thanks for offering your help if I have questions.
  • @andy_cytomic Thanks for that enlightening post!!! And welcome to the forum :) Just gotta say LOVE the Glue. I have all sorts of UAD compressors but if I just want a simple low CPU transparent but tight sounding compressor I always reach for that one.
  • Also Andy any clues on where to begin modeling a WASP in a a rudimentary sense in Audulus? Not looking for your trade secrets but is it possible to make a simplified version with z-1 nodes? I was looking all around the net for models and couldn’t find any.
  • @RobertSyrett I can't provide patches for Audulus, but I will publish more technical documents describing the maths behind various analog modelling techniques, including resolving implicit nonlinearities. What I can do is answer questions, so please ask away! My existing technical papers are here: https://cytomic.com/technical-papers
  • @SansNom Well done on your work, and it's great that you are contributing it for free to the Audulus community and willing to learn :)

    Although whacking non-linearities into these alluring block diagrams is possible, it is important to realise that it doesn't solve the actual equations properly, other methods are required to do that. Lets have a look at the most basic of equations, a non-linear one pole low pass filter with only one non-linearity:

    vc = iceq + cutoff * tanh (input - vc)

    where vc is the voltage over the capacitor, and iceq is the charge stored in the capacitor. As you can see the vc is related in a non-linear way to itself, which is called an implicit equation, and this needs special solution using iterative methods, which can include pre-computation of the answer and then looking it up with some interpolating approximation, but to form the function to interpolate you still need an iterative solver!

    in the simple case:
    vc = iceq + cutoff * (input - vc)

    you can get an explicit solution (one not requiring an iterative solver) by pulling the vc over to one side:
    vc = iceq + cutoff * input - cutoff * vc
    vc + cutoff * vc = iceq + cutoff * input
    vc*(1 + cutoff) = iceq + cutoff * input
    vc = (iceq + cutoff * input) / (1 + cutoff)
    vc = iceq + (cutoff/(1+cutoff)) * (input - iceq)

    Now you may be tempted to just whack a tanh right there in the last line like this:
    vc = iceq + (cutoff/(1+cutoff)) * tanh (input - iceq) // warning - wrong!!!!

    This does not solve the original continuous non-linear equation! With audio stuff this doesn't matter as long as you like the sound, so I'm not trying to be a party pooper, but it's good to be aware of what you are and aren't doing along the way while you're having fun :)

    The best way to solve these sorts of systems in full is to use some sort of numerical root solving technique, of which Newton Raphson or quasi Newton methods are the most prominent, but please feel free to try out any of them. Most of these methods use the slope of the non-linear function to step towards where the zero is. In the case of a linear function you can get there "in one step" since the slop of the function gives you exactly where the zero is straight away.

    In general, when you have multiple non-linearities to make up your filter then using visual methods becomes difficult. In the end you are best off forming a linearised system of equations and solving the system with as few operations as possible (which is the bit I did by hand above but just for one equation not several at once). Drawing the circuit to be solved visually would be fine, but under the hood there would need to be a circuit solving engine to generate the actual code that would be run.

    As an example the WSP filter in The Drop has 6 implicit non-linearities that are solver for, and it is the interaction of all of these that give the lovely warble at certain settings. The low cpu version of the solver requires up to 2 iterations per sample to come to an ok solution, but the full HD version requires up to 8 iterations per sample to properly converge. Each iteration has to evaluate all 6 non-linearities to work out in which direction to step the current guess towards a better guess of the voltages in the circuit for that sample.
  • @biminiroad great to hear you like The Glue! You really should check out The Drop if you want a good Wasp emulation, but I've allowed it to self oscillate by using the same trick used in the Oscar, positive feedback around the bandpass section.

    The Wasp is a straight forward SVF with inverting CMOS buffers used instead of inverting op-amps, which have a very distinctive shape to their non-linearity, and don't have that much gain (x10-x400 compared to x300,000 or more!). The filter core is an OTA, of which most people use a tanh function to model, which is a good start. There is a diode clipping in the feedback path of the bandpass to increase damping with increasing level, but it really doesn't do that much, most of the interest is in those CMOS buffers getting overloaded which is what pushes the circuit into near self oscillation with loud incoming audio. An SVF wants to self oscillate, it's really a sine wave oscillator with some damping to stop it self oscillating. The damping happens by feeding back the bandpass output to the input again, but if the level of this feedback is reduced by a non-linearity (the CMOS buffer) then the filter is temporarily pushed into self oscillation while the combination of signals causes the bandpass feedback to be limited.

    I wouldn't know how to even begin making a model of that using Audulus! I stick to the continuous equations by feeding my semi-automated circuit solver a netlist (list of components and nodes that interconnect them) and get it to solve everything for me in as optimal way as possible. I use modified nodal analysis MNA as used by SPICE.
  • Wow! good stuff. That is a lot to take in. I'll just try and let that steep in my brain for a bit.