First time here? Check out the FAQ!

Capytalk for slowing down a rate change

0 votes
I'm continuing experiments with my Monome Arc which and I've now received and am thoroughly enjoying. I've got delta values coming in over OSC which end up [one for each encoder, n] as !Arc_n_delta which is being generated between -64 maximum and 64 maximum.  

I've been exploring various different capytalk approaches but can't quite replicate something that Monome have coded for the Arc using their Ansible module, namely where the faster you turn the ring the faster it increases spinning (the imaginary rotation speed) can then rotate the encoder slowly the otherway and it will slowly apply the brakes on the rate of change...before drawing to a stop and finally spinning the other way.  Very much like how you'd expect a disc to operate if spun with your finger adding friction.

I've tried using various accumulateWhile, sameForLast: tolerance, track/sampleAndHold approaches but can't get it right - it always ends up flipping the value into the opposite direction as soon as you rotate the encoder the opposite way, not gradually slowing it down.

I'm sure there is a good way and I'd really appreciate some help in trying to get the right combination of code.

Many thanks


edit: not in front of Kyma but think that the result of the accumulated value * !Rate ought to do it. Will verify next time I'm in front.
asked Jul 16, 2020 in Capytalk & Smalltalk by ghood (Master) (3,020 points)
edited Jul 16, 2020 by ghood
accumulate should work, but you have to scale the values *way* down because it accumulates 1000 times per second, so you should try something like (0.001 * !ArcValue) or even less.

Please log in or register to answer this question.