Don’t know this has been answered in this post or elsewhere on here, but have you posted these online anywhere? Would love to see/hear these.

i released it in the max facebook group about two years ago. But i used viktor’s fourses~ object
i am no longer on mac Rodrigo so here is the object and i’ll find the patch and link it soon

http://vboehm.net/maxobjects/vb.fourses~.zip

is the object i used and tweaked and
http://s373.net/code/A-Chaos-Lib/A-Chaos.html

2 Likes

it was fun because it used chaos to modify the chaotic oscillator

1 Like

Awesome.

I had seen the vb.fourses before, but never took a proper look at it as there’s a decent gen~-based build and I’d want to avoid taking on externals for something that isn’t necessary to do so.

I was mainly interested in building some of the control structure stuff. There’s a couple good blog posts by Richard Brewster on what the Quantussy is, and explaining its schematic.

Ah i see what you mean
gen~ is cool for sure but what i wanted was something i could make relatively quickly into a working M4L/patch. i know what you mean about externals because you are at the mercy of the dev

but you can build and tweak dave bennets db.bounce~ which is a choatic triangle as well

Peter Batchelor

Peter Elsea

John Mayrose

Mark Phillips

Baz Tutorials (Youtube)

Joel Rich (Youtube)

Delicious Max Tutorials (Youtube)

6 Likes

I’m debugging a patch, and would like to view multiple signals at once, in a way that correctly displays their relative phase. Does Max offer something for this?

Best I can tell, the scope~ object shows at most one signal (per axis). Connecting multiple signals to an inlet just sums them, as per usual.

Using one scope~ object per signal solves that, but now I need a way to trigger one scope~ from another, and I haven’t found one.

Is there another solution?

I’ve always preferred the scope function of plot~. One solution is overlaying scopes with transparent backgrounds and different colours for each plot.

Re-reading, not sure that answers your question! Probably a jitter solution too…

connecting signals to the left and right inputs of scope~ will give you SOME info about their relative phase, as would inverting one of them and summing.

1 Like

For multiple sources, an alternative is to use [sfrecord~ N] where you record N channels in parallel. Then you can view them in an editor or open them in a [buffer~] & [waveform~].

For up to 4 sources you can write them with [record~] to a [buffer~] and display in real-time each channel in separate [waveform~].

If you want to compare the output of any two sources, as @alanza suggests, you can subtract one from the other (or in other words, phase reverse one and then add it to the other). If the result is (0) then they are in phase.

1 Like

Thanks for the suggestions! Using record~, buffer~ and waveform~ worked okay, although I must say I’m a little surprised that Max doesn’t have better support for this (a multi-channel scope that lets you pick which channel to use as trigger, just like on a digital oscilloscope). Maybe I’m just holding it wrong.

Follow-up question: I’m trying to implement basic phase distortion synthesis as described here. That needs two phasors: one for the base frequency and one for the resonance. Whenever the base phasor resets, the resonance one should also.

I started by using two phasor~ objects, but couldn’t find a way to reset a phasor exactly when another one resets. I then tried using a phasor~ and a rate~, which almost works: if I set rate~ @sync cycle, then the rate resets when the phasor does - if the rate multiplier changes at least once per cycle. If the multiplier is constant, it does not work. Any ideas on how to fix that? Are there other objects that are better suited?

Patch
----------begin_max5_patcher----------
695.3ocuWssaiBCD8YxWgEOtaJx1bIv9z9erppxgXQcEwDYbxlrUMe6KLFRR
aID2BgW.wvXNy4LWr40YNtKK1yKcQ+B8Gjiyqybb.S0FbZd1wcMaeZNqDbyU
x+awxWbmadkluWClyKXqVxjYsuPtccwVcNWCqhzXsTeHmC925mwI8gMbSP3B
eDziMudCSm9rPl8jhmpMdDrXgGdNhDB2hv0WoTO7o0HVAHTEkODhuHdDxSgS
ss2lMq9xbK48ZdYIKi+Ihi87GLmuAei.JhCfaIdgWmuAIcxW52fuYLg7X2Li
ZOyJEYRVt6bjqPp6kl99907K3bBsJGGfuBO6Nsd5qqXq4Zt5ItjszDh3ugDb
kR8edDg8BGbRuQZrPS7i.0HHr2R8QKyeEZ+iiSBkwP9O.Gd6pcJcz3bYZwF9
UHH9pDTqDYYb0kpPsob9NdNrRObq8TVdZZwVo9xFnN3OIhXx0IPCfO9zsNU.
x8NqWUrS7lhDO0LV2OxTxG2WsNEe+K1QOLU7FZt8ol7duamQRlBdOYC2hMDu
YteuDO9dS7zCo47oYBW.PXZbvsGpS7u27Vwz7ineWdPlh.MXRjfEFIH.j.BN
oOMX7R87+shk9kGx2U7Sg1zHRx4TX80NmUcuyfadlUVnNhBCmn4UvfJRBv5E
A8V9dStCqxMWH+3Og.HWa+8BRYwVUZaz1dhWzYvWwK0BISKJjW3TUIDhfdrS
M2Vfp+UhaBTazLHjhs.n5ACCmRV.T8YrFLPA1.z67oPsp4bUSBvjOCLdP.So
1TszMkm.jqO233q1TrsETCsEgXSWea3LLjroaLbL.x2l193w.IKmXN5kl1.7
GxrcVYZ1zfsYyNtprY4.nU6W9RA39h4viBo4Qe3QEemn0+PvBSUs8ltZussJ
yNi6iibMKsnBX4VQC1UH+1r+C.uiVs.
-----------end_max5_patcher-----------

It feels weird that phasor~ objects don’t natively support audio-rate sync, doesn’t it?

I’ve found two ways to solve this: one is to observe that if you multiply the output of a phasor~ by some value greater than one (and maybe pong~ing it back to 0…1. if you need to, although if it’s driving the phase of a cycle~ object, you don’t), you effectively multiply the frequency by that amount.

The other is to do this:

Now, when the right-hand phasor~ resets below 0.5, it will trigger the sample and hold, and subtracting the value the left-hand phasor~ had at that moment from itself will effectively (modulo pong~) reset it back to zero phase.

Ninja edit—I’m not sure if my first suggestion is actually relevant: I was imagining a scenario where you wanted to create a ratio of the base frequency. There you would automatically have syncing, but the behavior is different.

3 Likes

Whoa! Of course! That’s so much simpler than what I was doing. Trying it now, works like a charm:

Patch
----------begin_max5_patcher----------
705.3oc2XksaiBCE8YxWAhGmIE4ELK8WYznJGhUpiH1HvjIYpZ91GvFZS6PH
NJ.Upu.xNWmy83ycK4kENdqjGXkdtO59KWGmWV33n2pYCm10Nd6nGRynkZy7
Dr+HWs0ao4iTrCJ81RAKWlwN4R769LQ0NYkJiozGD1tao5XFSejN6LFoNlyL
9gWIeifl4496VCxopzm4hMOUvRUFaBPDevRWHNn4Uj9IB4Cd6L70F2Z01GhO
yg3hN+A0r2qKVz7X48w8ebxEAlGZCQZZaHb.ZHZGM0z9mmbgyBqwIwZhBgMu
vwCw5voWrmEJGEoYYfgrI9jKSY7nQ4MTt3BzCcyzaoqGWnFlkXrNNNDzIo0w
1Af9oYPuzD912dAcGSwJdhInqLtHX7T87mokxhSt.exrjmatXLw8CWcCQFM4
uLUlytf9CtH+RoYooxJg57vjd3DAzV6J1T4F71qdoEdFJeMSpYaXNNTeADPF
RNIeSpeAzxa.fb85WHzWbDrpfuYCq37aglsxX6YY5S5Cf2XvNLDZz5DqB1ge
a5UiLMtvg3q2qFAlgIydXt3sN4FiL5NXHdCSlCdOaE2hMDusU9fDexGEO8XZ
FadpvEnILJN35E0giWyL1eWSSu4Jb84+HcLZHL4c+u4YuIpSsr0MdEgLSIqZ
QCZy7UWuzr9TdYbwm+gzZja1+iWHkxphzNusEB22wdMqTwETEWJN2ljOXjrX
caCqdEgwDYb+.CtKfis.XzWFxQSwccyf5WE4Vu6t.JxBbBGAbBsL3Adm3fsI
8XL.xFApYX06Fn.a.ZJhAsEX3Xm0gPVfbvTjuaExH3jjwCrMf5dSE+T2gKfD
XLPxl5mjw.HqR6++5kltwz778rhxVq0fTOHxVoVUiVpWxElkX8xB1ddm8D8N
zh54FT0CMTUXF43Pr4eWzamrN9PTwaCQpQ90E+S0DFDa
-----------end_max5_patcher-----------
1 Like

I am not sure if this is the right thread for this question but:

How does one make patch bays in Max? For example the patching section in the Max for Cats semi-modular M4L devices?

I don’t think there’s an easy way. Or at least anything built-in to make it simple.

I tried once and came up with this (Thinking along Madrona lines) :

Messy! Never really finished it…

1 Like

as you might’ve already gathered there isn’t really going to be like a max-friendly way to do this. in my personal experience I’ve learned to stay away from doing non-max friendly stuff in max (mainly for sanity), but of course a lot of it can be done and has been done. max for cats did a lot of wired finagling to get oscillot to work (they didn’t share any exact techniques in the interview though, I’ve theorized that they use an invisible object with a patch cable going to it that gets moved around using scripts).

I’m working on a max device now that i want to add some patching functionality to, but I’m just planning on distributing it as a patch with some bpatchers in it that’s meant to be used unlocked. I feel like especially with the ‘operate while unlocked’ feature being added to max 8, that’s becoming a valid way to use a max patch. obvs though this definitely wouldn’t work in m4l, and probably not well for all circumstances.

patching matricies though, different story

1 Like

I did this with an lcd object the size of the window to the front. The patch points register their locations in a mxj java object when they are created, via scripting. The mxj object generates script commands to thispatcher I think, and redraws the lcd patch lines when things get moved or patched. In the background it’s connecting inlets and outlets of bpatchers, which let you do one to many, many to one connections. Originally I dynamically changed send / receive (~) objects, which was nice to avoid clicks in audio, but was one to one…

This is in locked mode and works in max runtime. Which I think is kinda cool cos you sort get to edit limited blocks of max without a licence.

I plan on releasing this sometime soon (I’ve said this before, but really), I’m working on another (secret) project which I wanna get out first, and my free time is pretty constrained.

3 Likes

matrix~?

if you need feedback then you will have delay >= vector size. no way around this without making an external.

it’s possible that i don’t understand the question.

ahhhh I meant the UI of, like, click and drag patch cables a la the Max 4 Cats example, rather than the guts of it.

Your feedback comment makes me wonder though—it ought to be possible to get down to single-sample delay if you roll your own version of matrix~ with gen~, yeah?