Tutorials

MC Recipe 02: SettingPlotter

The Max Patch ...

... and the mc.plotscaler abstraction in detail.

02.SettingPlotter.zip
application/zip 4.64 KB
Download the patches used in this recipe.

MC Concepts

  • Use the deviate and spread messages with wrapped MC objects

  • Use the plot~ object to visualize generated MC results

Commentary

In the last two recipes, we targeted individual instances of MC objects to affect their actions. "Wrapped" MC object - MSP objects that are enclosed in an MC wrapper - respond to a number of messages that generate instance-specific behavior. The deviate and spread messages are two examples.

In some cases, it can be difficult to understand exactly what is happening with these objects. To provide more insight, we create a scaling system that can produce a visualization of the generated results.

Ingredients

  • mc.sig~ : An MC-wrapped static signal generator

  • deviate and spread messages : Messages that generate value variations

  • mc.snapshot~ : Creates messages from individual MC channels

  • mc.makelist : Assembles a list from multiple channel sources

Things to Note:

  1. The deviate message produces values around a centerpoint with a defined deviation. In this case, the slider produces values between 0. and 1., and are sent to a message box which will cause a deviation of that value, centered around 1.0. This will cause the mc.sig~ to generate values from 0.0 to 2.0.

  2. An alternative generation message is the spread message, which will create an even range of values between a low and high value. In this part of the patch, we make simple calculations to create a spread evenly spaced around 1.0.

  3. The mc.plotscaler abstraction (included in the download) sets up a plot~ object, sets the number of points to the number of channels, and creates a display list from incoming MC signal values. The arguments sent to the abstraction defines the low and high end of the display range.

  4. You can change the number of channels that are calculated, but the actual number of channels flowing through the MC patchcords will not be altered until you turn the DSP off and on again. Use the attrui object to change the number of channels while DSP is running, then cycle the DSP switch to see the change in the patch.

Additional Options

Option-click (right-click on Windows) on a wrapped MC object to see the available options available for those objects. Among the details displayed in the help files, you will find a number of additional messages that can generate interesting value ranges.

Learn More: See all the articles in this series

by Darwin Grosse on October 23, 2018

Creative Commons License
Darwin Grosse's icon

Raja,

Thanks for the heads-up; the patches were supposed to be in there, but they were missed. I've taken care of that.

Regarding the explicit @chans requirement - did you try flipping the DAC on and off again after changes? Toggling the DAC should cause the 'downhill' objects to adapt to the number of incoming channels.

But I'm glad to hear you are experimenting with the patchings - some of the additional generators (like harmonic) are pretty amazing.

[ddg]

Kasper's icon

HI

if i input a "deviate" value which is greater than 1 I will, in the case of that patch with those values, have chances to generate values (frequencies of [cycle~] ) which will be negative (such as -0.6) - which is normal. In the case of a "normal" (non-mc) patch I would use a flonum with a set minimum (to, say, 0.01). in the case of MC how (with which object) could i set a "hard-floor" (or ceiling) ?

kasper

Darwin Grosse's icon

kasper,

You could use an mc.clip~ after the mc.sig~ in order to prevent out-of-range numbers. Or you could also manage the values on the input (the number going into the deviate).

[ddg]

Kasper's icon

Mc.clip~ - of course !
thanks

k

Brooks Frederickson's icon

Hello - very helpful tutorial, thanks. I'm working on a patch that uses [mc.tri~ @chans 8] with a spread message with 440. and 880. as the low/high. When listening to each chan individually, the 8th isn't 880, but is just flat. I have to raise the second number in the spread message to 942.9 in order to get the 8th chan to be 880. Can you explain why that is? I figured that it'd set the first chan as the lowest, then the high as the last chan, then equally distribute amongst the others.
Thanks!

Brooks Frederickson's icon

Figured it out - I should have used spreadinclusive rather than spread! Awesome to have both options!

Matt Jackson's icon

Is there a way to apply an expression to spread?

Ben Bracken's icon

@MATT JACKSON Not sure exactly what you want to do, but you could explore mc.gen~...

Matt Jackson's icon

Ben I ‘m already using gen~ to make a reverb. I use it because I’m more comfortable with my own hand made snippets and because I’m doing sensitive feedback calculations. Inside this feedback network, I’d like to do some complex multi-band processing (and I’m not sure how many bands I’ll need yet). I’ve made a great mc.gen~ to do the multi and stuff b but now I want to use that inside the gen~ feedback.
I’ve heard from a reliable source that it isn’t possible. So I’m looking at other solutions.