What you’re describing sound like a curve fitting / optimization problem. As far as I know, nothing exists in Max that can do this out of the box. It would be awesome though.
Knowing it doesn’t exist yet is helpful. It seems like a worthwhile project.
I’m not sure how the Live API works but I wouldn’t expect you’d have to go through a MIDI translation (but maybe @ithkaa, @chapelierfou or another M4L guru could chime in). All of that said, I’m not sure this can be done out of the box but my gut says it would be easier to figure out how to map OSC to automation breakpoints/curves in M4L than build up all the UI around editing curves provided in Max.
A couple of questions:
- I’m assuming this is for recording arc gestures?
- do you want to audition recorded gestures “live” as applied to whatever parameter they’re affecting or is it sufficient to capture a stream of events and then edit/apply them?
I’d like to avoid any translation. A voltage level is just a number. Seems like it should absolutely feasible to stay in the CV realm.
The idea is to record/edit/playback ANY CV. From any source.
That sounds awesome. Color me interested! When you say CV what’s your source? I guess I was assuming we’d be talking OSC messages but it sounds like you’ve got something else in mind?
Any luck with mapulator?
control voltages coming in from ES-6 or ES-8.
Just wrote that a couple hours ago. I don’t have Max on my work computer. It’ll have to wait until later in the week (have some netlabel stuff to do when I get home tonight).
Why reinvent the wheel? Just use live clips if you have them there already.
I think silent way has a direct cv device that could be automated. Not sure about m4l… but seems trivial
I really don’t know how Live got into this. There are no clips. Not necessarily any use of Live at all. I merely showed a screenshot of a Live automation curve to make it clear what user experience I was looking to create in Max.
My bad. My head has been in Live and I saw your screenshot and jumped to a hasty conclusion. It also has the benefit of supporting a bunch of what you’re after out of the box. That said, if it’s off the table, so be it! (And sorry for the derail.)
It doesn’t do what I’m after out of the box at all. Not with CV. This is a thread about hybrid modular systems (systems that use eurorack and in-the-box software in an integrated manner).
See this thread for more context.
The new “Studies” category was added to facilitate easier discovery of technical discussion of patching techniques (not necessarily just for hybrid systems, but that is what inspired it). Other uses for the category include things like
But with one thread per topic, rather than long meandering threads in which older topics get less useful as time goes on.
Ah crap, sorry. I somehow solely focused on the drawing part (which also could be done with function into line~ i think). Recording is a different story of course…
Edit: snapshot~ should do signal to float conversion.
Jason, for complex curves and function generator kind of design in MAX, you might take a look at this (to be clear, it isn’t about CV recording though):
It would probably get convoluted pretty quickly, but you could possibly record CV and store it in a [buffer~] with [poke~], and then change/alter its output with [peek~] and [function]… it would be great to be able to record into a buffer and output that as a breakpoint envelope, but I don’t think that functionality exists.
Right, pretty sure it doesn’t exist. Just gathering advice about how I might create such a thing.
This link looks like a very good place to start to me.
The key thing here is that function has a curve mode - that should give the sort of functionality you are after I think.
Quote from the article:
Line mode allows only for linear connections between points, whereas curve mode allows for connecting lines to be curved. If in curve mode, lines can be manipulated into curves by alt-click-dragging the line.
It’s then about capturing the CV input from the ES module at an interval of your choosing and turning that into the appropriate format message to plot points on the function object. Obviously, resolution then becomes an issue - capturing once a second would give very different results to capturing every 50ms for example.
I’m thinking you want to capture pretty frequently (like a small number of milliseconds) and then use curve fitting optimizations to reduce the number of handles required to reproduce the short-sample curve. Easier said than done!
As is often the case with Max!
I had a very quick go at proof of concept CV capture to function object.
cv capture.maxpat (11.0 KB)
Thanks! Can’t wait to check it out.
That’s an article I wrote a few years back. Pleased it’s still of interest
You’re right in that it is not about recording CV, but some of the approaches in that device might be useful for altering CV afterwards. I’ve not looked at it for a while, but being able to move sets of points, or shape every x curve is pretty fun.
As for the CV record, I agree that selective sampling is perhaps the key. You could easily sample at changes of direction (which would record a saw wave for example) or at points after x change has occured to create approximations.
Curve values can also be set with messages, so there is scope for this to work. The curve approximation stuff is definitely the complex bit that’s not inbuilt in Max. @jasonw22 - do you have a good source for that info?
I’m sure the journey will be interesting though - feels the sort of project that could easily end up as something completely different from the intention, but just as useful.
another thought - ej.function is also a great graphical function eidtor - and has a few different options: http://www.e–j.com/index.php/ej-function/
Forgetting the whole translate into function part of this, just recording CV then playing it back (in various ways) is probably going to be useful for a lot of people here. Altering the playback with other CV or functions is also potentially interesting, as is tools for doing things like inverting, smoothing, modulating etc on playback.
Here is an overview of different types of curve fitting:
I think there are a lot of different potential bits and pieces people have made that can help with parts of this. Just need to find some time to pull some of those pieces together and start patching/debugging.