Using history to create a feedback network

Sandeep Dasari's icon

I'm trying to implement this feedback network from Buchla's synthesizers in gen~. In the image, circles are oscillators and triangles are VCOs.

Using history to introduce 1 sample delay for the feedback network ( osc4 -> vco4 -> osc3 -> vco2 -> osc2 -> osc4) is the feedback loop I'm trying to implement. I added a history after osc4, this gives out 0 samples ie. no audio.

I'm not sure if I'm using history the right way. Any pointers?

feedbackFM.maxpat
Max Patch
feedback fm config3 buchla

👽'tW∆s ∆lienz👽's icon

ha, such a small diagram, hard to tell.... but a few things are confusing at first:
1) VCO stands for 'Voltage Controlled Oscillator', which would be the same thing as an oscillator...
so i think maybe the triangles are actually "VCA" = 'Voltage Controlled Amplifier'
(in circuit diagrams, triangles are often 'op-amps' which can be used to sum/multiply/etc. with multipliers controlled by voltage input to create VCAs)
2) at the outputs 'A' and 'B'.. i can't really tell what happens beyond there... according to the diagram, they could even just be outputs left and right in stereo(?... probably not, but it's what i did in my patch below)
3) the diagram doesn't really show how external controls would be input/summed/multiplied at the oscillator-nodes(and some 'op-amps' could be used to sum, while others could be used to multiply, but if they're all definitely VCAs then multiply is the way to go)

having said all that, since i don't know i could be completely off, but here's my first guess and it probably at least shows how the basic 'history' routing would go(basically, at the point before any possible feedback):

Max Patch
Copy patch and select New From Clipboard in Max.

but ya, not entirely sure, it's one of those diagrams that's so general, another person could give it a try and come up with something completely different that works, and eventually we'd have a huge collection of instruments simply based on how the basic diagram feeds back into itself... so i'll leave it at that for the next person to come along and take a guess 😁
(if you know how it's supposed to sound, or have links to videos of the module it's from, or further info. that might help, too.... and also, if you want the codebox version of my patch above, you can simply go into the gen~ patcher, and on the right-toolbar, click the "C" icon, and it will show you code that you can use for codebox... actually, looking at your patch, you probably already knew that because you're using similar naming conventions"mul_1" etc... but just makin sure 😇)

Hope it helps 🍻

Sandeep Dasari's icon

Firstly, thanks for correcting me. The triangles are VC Amplifiers indeed. The outputs of the network A and B are waveshapers. I didn't mention that to focus on the feedback network. Buchla 700 is an arcane synthesizer with very little description but I'd like to think of them all as multiplications for now

Just taking a look at your patch, the big differences I see is
1. you used a phasor and a sin while I kept re-using the cycle~ signal generated outside my gen~ patch. This is probably just good practice?
2. a history object after each VCA, this probably made the difference. But I'm curious why? Does this mean it adds a sample of delay after every VCA output (it doesn't make a massive difference for me, but I'm just curious)

ps- thanks for all the comments and preset object!

👽'tW∆s ∆lienz👽's icon

1. you used a phasor and a sin while I kept re-using the cycle~ signal generated outside my gen~ patch. This is probably just good practice?

actually it doesn't matter, your way of using cycle~ is perfectly fine too, i just wanted to see everything all inside gen~ while i was working(i think cycle~ might be slightly more efficient since it reads from an internal wavetable... there's also a 'cycle' op in gen~, too which can read from an internal wavetable... whereas 'sin'/'cos' ops calculate/generate the values given the phase-in-radians input(might be a bit better sounding in some cases but for the most part, doesn't make much of a difference)).

Edit: also, if you use cycle~ outside gen~, somehow you'd need to feed from gen~ back outside into the frequency input of cycle~ for FM to happen, so doing it all within gen~ helps with that, too.

a history object after each VCA, this probably made the difference. But I'm curious why? Does this mean it adds a sample of delay after every VCA output

ya, it adds a single-sample-delay, and this is just to solve for the feedback problem in a digital environ like Max...
..however, I realize now i was wrong(i saw so many things connected in a loop, i thought they were all feeding back, but actually you only need one history)... maybe this is actually more like you had it before, too, not sure, but this is with just one 'history' object, apologies for being too hasty:

Max Patch
Copy patch and select New From Clipboard in Max.


👽'tW∆s ∆lienz👽's icon

also, since i've been in the practice of converting everything to MC objects(to hear many layers of voices all at once), i've got these readily available bpatcher interfaces(mcui.maxpat) that can help me do it quickly, so here's an extra little gift(requires Max 8), MC-ified to play 4 voices at once(changeable to more, if you reset dac~ after altering the chans), with an extra 'nodes' interface to quickly interpolate presets for more diversified combinations(sometimes it doesn't find a good combo, too, and ends up cutting out... have to tame the original 4 presets somehow for better control... if this happens, just restart the patch), in case ya find it useful:

Buchla700FM.zip
application/zip 14.26 KB

if you feel like it, keep us up on how you get along with the waveshaper part... no worries if you get too busy, hope it all helps either way 🍻

Sandeep Dasari's icon

Ah, that makes sense. Turns out I was using the history object OK but multiplying the cycle~ signal within the gen~ patch. I just got into gen~ and had a difficult time debugging this. I love the little mcfied Sequencer Synth that you put together. Multiple voices was definitely on my TODO once I connect the waveshapers. Thanks a ton for your patch time as well as the knowledge-share. I'll probably end up making a well structured project once the Buchla 700 recreation is done.