MC allpass cascade

    Feb 19 2021 | 9:17 am
    Hi, sorry for the noob question, I am very new to max. I'm trying to take advantage of MC to create a cascade of allpass filters, using mc.separate to split of the Nth channel and then combining the first N-1 channels with an input channel. In my presumption of how MC works, this would shuffle the output of each channel from the mc.allpass object along to the input of the next channel each time round the loop. However, max is suggesting there is an infinite recursion problem, which would tell me that my presumption is false. Can anyone please help me by explaining what I have done incorrectly here? Eventually I want to create feedback delay networks in a slightly cleaner way using mc, but if thats not possible I will have to find another option. Cheers

    • Feb 19 2021 | 5:36 pm
      I want to create feedback delay networks in a slightly cleaner way using mc
      MC is not great for feedback, by itself(MC is more parallel by design, furthermore, if you're working outside of gen~, you are limited to at least a vector's worth of delay when creating any kind of feedback... and finally, outside of gen~ to create that feedback you're limited to using things like tapin~/tapout~ or send~/receive~ etc... delay~ will not work for that)
      so if you're willing to work with a vector's worth of delay within the feedback routing, try putting the feedback paths through send~/receive~... otherwise, for more accurate feedback control(sample-level), i'd recommend building the feedback portion within gen~, and then using MC(by instantiating what you created within gen~ as an 'mc.gen~') only to extend the channel-size of the overall system(MC is more for layering the same thing in parallel, often with different settings/params for each layer... not so much for working the individual channels into a series of processes one-after-another).
    • Feb 19 2021 | 6:40 pm
      i havent looked at the patch, but i must say that dont like the term "allpass cascade", because an allpass requires parallel order. could that be the issue? ;)
    • Feb 19 2021 | 6:50 pm
      could that be the issue? ;)
      ^oh, ha(didn't think about that: since allpass is all about phase 👍), i don't think we've got that far yet though(the error right now is just the regular MSP recursion error), but yes, you're probably right: that might be an issue for an allpass-cascade eventually(especially if working with vectors of delay).
    • Feb 22 2021 | 10:13 am
      Ahh, yes you are right, I guess it makes more sense to use gen, thanks! The reason I was trying to use MC was to keep a clean patch while making an extensible set of objects. What I really want to be able to do is experiment with networks of objects, a bit like an FDN, with several series and parallel chains of devices. However, if possible, it would be nice to experiment with this kind of thing without tons of copypasta and patch cords all over the place. Feeding a series of devices represented in a simple way (as a single device with an MC patch cord) seemed like a first step, but not a good one I guess. How do you make clean patches of networks of objects?
    • Feb 22 2021 | 5:37 pm
      How do you make clean patches of networks of objects?
      when specifically dealing with Audio/Digital-Signal-Processing, gen~ is the best place to start as you'll want to create 'sample-delay networks' within there(you can abstract commonly used gen functions into .gendsp files which you can then use repeatedly within gen~). from there you can work multi-threading and more efficient processor usage by utilizing the voicing capabilities of poly~... but eventually, if you want ultimate conciseness, a visual-programming environ like Max will have to provide some gateway into actual coding(at which point you'll be getting so close to C and C++ you might as well start learning those)... Max begins to take you there by offering the code-generation of gen~, along with its own SDK(if you want to dev your own in C or C++), and i've also seen many people handle much of their 'faster-than-realtime' audio-processing needs in MXJ(max's Java engine... nowadays, you can also do many of these things within codebox of gen~ utilizing 'for-loops' which can iterate over many samples within the time it takes for the audio-engine to stream one sample).
      so basically, you have all these tools available and each person will come up with their own style of working them all together(for what you want to do with FDNs... i'd study utilizing 'codebox'/'genexpr' more within gen~, it's a very concise language to work with).
      hope it helps! 🍻
    • Feb 22 2021 | 7:18 pm
      Best reply to a forum question I have ever received (as far as I can remember, sorry to anyone who previously gave me a good reply to a forum question). Thanks Raja!
    • Feb 22 2021 | 7:53 pm
      You're welcome, happy to help :) (and it was not a noob question: it's good to see people are trying to perceive of extending the limits of different parts of this system - Max has a nice metaphysically 'synesthetic' effect on people's learning and growth, where we try out everything from newer perspectives because Max often helps us find a kind of 'modern-day magic' by altering and reframing our perceptions and processes in different ways)