Wanted: Karplus-strong / modal resonator VCO

This is a Bounty Hunter project break-out thread, to discuss the development of a bespoke Resonator VCO.

There has been discussions about resonators on the forum before (most notably https://forum.orthogonaldevices.com/t/multiband-spectral-resonator-custom-unit), but none since 0.6. This unit was requested by @cosmicsoundexplorer and was based on Mutable Instruments Rings.

Requested features so far:

  • Karplus-strong synthesis / resonator based sound generator
  • Input for excitation (defaulting to white noise)
  • V/Oct. input
  • Round robin voice allocation

Nice to have:

  • Filters/EQ/Dampening

Anyone who finds this idea interesting or knows how to put the pieces together and build it in the middle layer / SDK, do comment. There is also a little crowd-funding game going on here so you can also check that out if you want to back this project.

1 Like

I wouldn’t call it an oscillator per-se as karplus-strong / modal resonator synthesis is just based off of delay lines and filters, the source of excitation (where an actual oscillator would come in) is irrelevant.

I’d definitely like a karplus-strong generator unit with an exciter input that by default contains a white noise impulse, but otherwise has the ability to contain sample players or just input from a chain / INx. The delay line would control the perceived pitch, and the feedback route can contain various kinds of filters or even an EQ to create different dampening behaviors. An even cooler idea I had is to include a vocoder-like series of bandpasses in the feedback, to make the eventual resonation model the spectrum of other sounds
I’d be willing to create a free impulse library to contribute to this project.

2 Likes

Those are some great ideas. I have edited the title of the thread with some of your key words. About the naming of the unit: even while under the hood there wouldn’t be any “oscillations” happening per se as would the case with a classic oscillator, I guess calling it a VCO helps to make it clear we are interested in a unit with a V/Oct. input and a tuned output. That should be added to the basic requirements of the unit, come to think of it…

1 Like

Hello all - feels like it’s been a long time since I’ve posted here. Been on a bit of a music break.

I might be willing to help out with the coding here assuming the following:

  1. This goal here isn’t a straight copy or port of rings/elements. I’d want it to be an ER-301 blue sky creation. Something unique, even if it’s built up on the same concepts

  2. There are others willing to contribute

I think a lot of the popularity of rings/elements/plonk/etc is their creators spent a lot of time finding sweet spots - combinations of impulses and network filter settings that sound good and musical - and tried to expose only those.

I think there’s a lot of time consuming work in finding those sweet spots. This could be front end/UI level work that is essentially just sound exploration. But I think it would be trying many things, sifting through a lot of chafe to get to the wheat.

As for the round robin voice allocation, I would think that might best be done in the UI layer to keep the CPU usage of the base unit at a minimum?

6 Likes

First of all, good to have you back, @Joe :slight_smile:

Your first assumption is correct. Originally there was a MI “clone” requested but this was not very attractive as a project for this platform. Currently I’m not sure about the second point, but since we have just started this up it’s quite possible someone joins in. I’m following this up but won’t be coding

That’s interesting, and makes a lot of sense. So this creates a dilemma between how generic/versatile the unit could be versus how much it is tweaked towar
ds producing specific sounds or specific timbres. Maybe there could be some sort of voltage bank memory around certain values? No idea if that makes any sense. Both scenarios sound wonderful to me.

2 Likes

Hey Joe! I’d be happy to contribute, but I’m a sound-designer, not a coder. So I can help with making impulses and with sweet-spot finding, if that’s enough for you I’d love to.

2 Likes

I think so, yes. Rainmaker would be a good example of something that gives you more flexibility in controlling the specific frequencies of the filters in a modal resonator config. The tradeoff is that it’s more time consuming to really dial in something nice than it is with rings/elements/plonk for example.

Yep, that’s great, @Worldwave! If you have a lot of interest and a knack for this kind of thing, that could be enough to make the difference. I’m just not sure I have the patience to really get top results here, based on my time spent trying to do this kind of thing with Rainmaker.

Btw round robin is infinitely easier to make in the DSP layer, CPU is minimal :wink:

4 Likes

Nice! I wasn’t so worried about the CPU from the round robin implementation itself, so much as that a modal resonator would have a boat load of BPFs even for one voice. But I agree if you wanted round robin, it would be more cpu efficient at a lower layer.

BTW, found this nice, easy to understand video about modal synthesis for any who are interested.

2 Likes

Also worth noting with my polysynth project I’ve found ways to efficiently run many bandpass filters at once. The trick is to run each bandpass in it’s own lane of a simd vector, this means you get multiples of four very cheaply. Should be very promising for big stuff like this.

2 Likes

This makes me very happy because it’s so tedious to set up in the UI.

@Joe About the above dilemma between specific and generic, I was thinking of how this drum module BIA has a switch that changes the character of the sound produced. Maybe a switch like that in the settings of the unit would be a fun way to approach offering a predefined range of values.

1 Like

pretty sure that we’ll fix the dilemma part :rofl:. granted, it’s definitely a design problem. but i believe that it is one that we are able to solve in an elegant way that is specific to our er301s.

regarding the problem i was also reminded of the solutions we find in intellijel’s plonk module.
(@Joe, some anon and i discussed physical modeling and rainmaker vs. plonk before Joe actually also got a plonk. Still have it, @Joe? :laughing:)
whereas the rainmaker’s UI is close to the underlying algorythms (with all its benefits and drawbacks) the design of the plonk seems to have “translated” those physical modeling parameters into some terms that are closer to the real world equivalents that the module is emulating (but also transcending). some of them acoustic instruments or parts of them, some are related to modules/electronic circuitry (e.g. filters, saturation, …)

some of you won’t be surprised when i’d advocate to think about a both worlds solution. :cowboy_hat_face: Maybe it’s feasable to have one unit that sports both, a rookie mode and an expert mode. doesn’t necessarily have to be a switch (option). could also just mean that the initial UI is some sort of rookie mode (just like the hardware UIs of Rings, Elements and Plonk work) whereas the options could reveal the rainmaker style complexities, which are closer to the maths/physics?

2p from a non coder who is willing to sacrifice his time as a test pilot :sunglasses:

2 Likes

I believe the sub-views would be the native way to implement rookie vs advanced controls, for example the way @tomf did the Sloop controls. There is a “basic” set of controls on the surface but hitting Enter on any of them reveals further options and parameters.

2 Likes

Yes, I still have Plonk. I actually had a little go at it as a kind of info gathering mission for this. I’m very on the fence about it. Sound design on it feels akin to working with a DX7 to me - a bit tedious. However, once you have something set up, and the x, y, velocity, etc. cabled up and assigned, it can be pretty fun to play with, and it does generate a very wide range of sounds.

The resonator and impulse generator modules in Drambo are also pretty interesting.

Also interesting - there are a few posts from Emilie here about the philosophy of Rings.

Kind of an aside, but in researching resonators, I ran across this. Which promptly made me want to forget about coding a resonator for the 301 and spend the next month figuring out all the ways I’ve underutilized Rings. :joy:

5 Likes

:laughing: No backing out now Joe!

haha, I do get the sentiment though, you should absolutely follow your excitement. But if we can get a fraction of the Rings magic in the ER-301 that would be great. I never owned the module but these demos are certainly enticing.

1 Like

If all you ever do with Rings is connect the Strum and Tune inputs, you can get a lot of good sounds out of it. If you’re willing to add some CV modulation, you can get even more. If you’re willing to supply your own exciter impulse, the universe expands dramatically. And if you’re willing to do all that plus process the output, it’s practically limitless.

And yet the thing only has 5 knobs and 2 buttons. And everything I described above is true even without touching the buttons. That’s the magic of Rings.

So how do we translate that kind of magic to the ER-301 while taking advantage of the 301’s strengths and without just making an outright Rings copy?

I’m wondering if we should start this project in the UI layer to lay some ground work? Looks like @tomf has given us a nice low CPU, bi-quad BPF with selectable slopes we could use. How many filters do we need in the network? How many poles? What’s a reasonable way to manipulate their f0s and Qs without a zillion controls? Maybe we do need a zillion controls to find the answer to that last question…

:joy: (and maybe that is an advantage/strength of the er301?)
could also be one aspect where our dusty trusty 16ns and sweet sixteens could
be of help… and/or teletype scripts and alike?

1 Like

I think sketching out the UI is always the best place to start. I’ve been planning to build some filter banks anyways so happy to make something custom here as well. I think ideally we’d want to find some filter algorithm that allows continuous variable bandwidth on the BPFs, none of my implementations have that atm.

I generally prefer simpler controls since I like to optimize “time to music”, i.e. how long does it take to make something sound good. There’s always room for big fader lists though but I think those are less fun for me.

Edit: some quick back of the envelope performance math: Bique/Sieve use about 2-3% CPU, using simd we can make 4 filters using the same performance so 8 filters should be about 6%, 16: ~12%, 32: ~24%

3 Likes

I wonder how many would be “good enough”. The first video I posted with Rainmaker uses 16 BPFs, one per tap. I believe Rings has 64 - but I’m not sure if that’s per voice or divided amongst all 4 voices with the round robin modes so 16 per voice.

32 @ 24% x 4 = 96% would be too heavy for sure.

So probably a good starting place is the UI layer with 16 parallel Bique instances and see how good it can sound? That would probably be a good indicator of max poly.