Mutable Instruments Rings inside maxmsp

hi, currently i’m working on an external object for maxmsp which incorporates rings from mutable instruments. most of it runs fine, but i’m having trouble with the v/oct cv input.
all incomping cv values are stored in an unsigned int array, and converted to a float range of 0. to 1. - fine.
first thing that confuses me is that the default value for pitch_scale (in settings.c) is set to a negative value, which in effect reverses the range of the incoming v/oct values, i.e. larger cv values result in lower pitches an vice versa. is this really how the actual module works?
(unfortunately I don’t have one to test!)
second thing that seems strange to me is that if nothing is patched into v/oct (cv_scaler.c: performance_state->internal_note is true), the resulting pitch is determined by the freq knob only, which works fine (performance_state->note is set to 0, pitch is set by performance_state->tonic). if a signal is patched into v/oct, performance_state->note is set by
the v/oct cv signal (in reversed range as stated above) and added to performance_state->tonic, which results in a very high pitch if the cv input for v/oct is low.
this can’t be right and i’m sure i’m missing something here.
can anybody follow me here, or has looked into this issue already?

1 Like

it could be a quirk of the analog part of Rings that we don’t see in the code or in the experience of the module. It sounds like you could just figure out how you need to scale incoming v/oct data to get what you want to happen?

Oh yes. The signal conditioning circuit on all the CV inputs inverts the signal, so the minimum CV (-8V for the DAMPING CV input for example) is mapped to the largest ADC result, and the maximum CV (+8V) is mapped to the lowest ADC result. I have already spent several hours of my life writing on several forums why I use an inverting circuit on the CV conditioning circuit. Look it up! For example here:

So just fill calibration_data with whatever will make your virtual module behave nicely :slight_smile:


ok, all this makes sense now - thanks a lot all!

heck - want this object when you have things working. are you planning on keeping the audio in?


yes, of course, audio in is there. my first goal is to get as close as possible to the original, possibly adding some mods later.


Also very excited about this. Happy to help test if you need that.

@TheTechnobear you have compiled and converted this module for orac in pure data form and I believe, encountered some minor unexpected quirk in terms of pitch reproduction. I don’t know how directly relative your experience was, I think it just required a [+ (number unknown to Wannop)] object to pitch shift but perhaps your experience is relevant here?

yeah, in the PD external I did some scaling, and that was a tiny bit off which was correct in the PD patch (really I should put it back in the external)

@geplanteobsoleszenz my PD external, is obviously open source/available, so perhaps take a look at that…
ive also got other MI externals there too, which you might want in max, e.g. elements/braids - the PD and Max external api are pretty similar iirc

of course, im just wrapping the main credit here of course goes to Olivier, who did the real work, and was/is generous enough to make it open source.

1 Like

hey, @TheTechnobear this looks like a great resource, thanks! will have a look.
i’ve got plaits running already and most of elements. still some quirks left to solve, though.
will post the results, as soon as there is something stable to share.


hi again, so i’m looking for people now, who are willing to test an alpha version of the rings clone for maxmsp. Especially useful would be testing against the actual hardware unit, as I don’t have access to one.
and: anyone want’s to test a plaits clone in maxmsp?


@geplanteobsoleszenz - I didn’t catch this the first time round, but happy to test on OSX if you still need help. I’ve not got a hardware unit though.

Otherwise looking forward to any release!

1 Like

Count me in as well !

1 Like

I don’t have a Rings but I do have Max, a Plaits, and an ES-8, so I can compare/contrast them with the same signals.

1 Like

In the meantime I’ve uploaded the macos objects and rudimentary help files here:

(please note these are temporary links)
feel free to check them out and report back.


great work! thank you (and @pichenettes ).

1 Like

These are amazing - thanks so much for your hard work! Going to spend some time with them for sure. They sound great on first listen.

I’ve not used these in hardware, but fully functioning for me on OSX 10.11.6, Max 7.3.5. Evetything makes sense. Nice to see audio rate modulation - opens it up to some nice possibilities.

So in terms of MI in Max, there are now these and the M4L Braids and Clouds ports for Max4L. Has anyone seen an Elements port out of curiosity?

Thanks for your feedback, mark!
fwiw, I’ve got ‘elements’ running in max. just need some time to polish it a little.
also been playing with ‘warps’ lately which tends to get rather noisy quickly, but certainly has some very nice sounds.

1 Like

Oh wow, that’s great!

I’ve got a project that currently runs between Ableton and Max to use Ableton Collision and the Max HOA Library ambisonics. It’s all a bit unstable - I think because of Soundflower, so I’ve been wanting to put it all into Max for a while now, but have not found the physical modeling solution - hopefully Elements if you release it.

Happy to test for you at any point, but I’d be grateful if you’d tag me - as in @geplanteobsoleszenz as I missed your earlier post. Or can test and reply over PM if you don’t want to post it up yet.

Just curious - with rings, I’m now changing the structure control in sympathetic string mode. The manual says:

With the sympathetic string resonator, this parameter controls the set of frequency ratios between all strings (with virtual notches at octaves or fifths).

How do control voltage values scale to the 0.-1. range of the plugin? Are the octave points 0.1, 0.2, 0.3 etc…

I might be misunderstanding this as I’ve never used the real thing before!


Edit: as Lines won’t let me make a new post:

I’ve run into some strange behaviour trying to copy vb.mi.rngs~ into another patch for the first time.

Have a look at:

Seems like they are both sharing a buffer or similar?

I should point out that I’m on Max 7.3.5, so not latest.