grippy 0.3, + some notes about other stuff
- Robyn
- Mar 7, 2024
- 5 min read
I forgot to post on here! oops!
grippy
My most substantial & ongoing project is a max for live synthesizer I've lovingly christened "grippy". Based on the "cycle gripper" (citation pending - I can't find any documentation of it online, but I did not make it), grippy is a sample-playback based polyphonic synth that sits somewhere between a granular synth and a wavetable.

TL;DR: The cycle gripper "grips" "cycles" of audio and loops them.
I was interested in the concept but not happy with how it worked. There are a few things I wanted to change, like the use of the selector~ object. Here are some early adjustments I was tinkering with that eventually became grippy.

This version is formatted to take audio in from Live and record it to a buffer for real time gripping. ;)
As you can see, there's a vestigial retune~ object, as my idea for this is to turn it from the fully unpredictable noise generator to a playable, "tonal"* synthesizer that takes MIDI in.
*By tonal, I mean creating discrete pitches for use in some kind of harmonic or melodic context; not inherently related to tonal harmony.
Up until this point I was using the play~ object, but I was advised to switch to the groove~ object for my purposes. The groove~ object has variable playback speed, and so theoretically, if you want to ask it to play back its cycle at a certain pitch, you just need to figure out what the playback speed should be, and tell the groove~ object to play that speed whenever you call upon it to play that pitch.
This has to be an inherently dynamic process, though; it won't work if you created a list of frequencies and their corresponding playback speeds, because the other factor in the playback speed is the length of the cycle, which, for my intended purpose, needs to be variable at the user's discretion.
So, this needs to be some sort of algorithmic process that decides real-time based on the current cycle and requested pitch what the playback speed should be. My first iteration of this was comically horrible:

Notably, this device is still an audio device, not an instrument, so it's input is still audio signal, not MIDI. However the kslider object (keyboard lookin' thing) provides me a way to test polling a particular pitch from the groove~ object.
(Also notably, there is a hilarious lack of subpatchers here, as well as very poor patch cable management. I don't really remember exactly how this works because of that.)
The funniest thing about this isn't the bird's nest though; it's that it actually sort of sometimes works, sort of. One of the kind of cool things about grippy and its predecessors is that it's a little unpredictable - however, this version especially so. This is because it contains a recursive loop between the playback speed and the pitch detection/correction. It actually increments the frequency up and down until it matches the requested frequency. Due to the nature of floating-point numbers, though, as well as the fact that our tuning system has a lot of frequencies that aren't nice whole numbers in Hz, this means it never really stops, and when it gets close to the target pitch it sort of wobbles above and below the target pitch. That's the best-case scenario, though; sometimes it gets confused and just keeps going up or down.
This is like the Max equivalent of building a car that doesn't have breaks or a gas pedal, it just goes forwards or backwards at a user-input speed, and when you want to stop, it scoots back and forth (or does something much worse). No matter how many conditional statements you add to account for certain scenarios, the bottom line is you just shouldn't design a car that way. This is a terrible algorithm.
Here's a video of it absolutely not working. IT IS VERY LOUD AND THERE ARE VERY HIGH FREQUENCIES. Do not listen with your speakers cranked or on headphones.
The root of the problem here is the closed loop (I think. There's some other stuff too). The workaround is two groove~ objects.
I don't really wanna lay the whole thing out here, because I would like to eventually sell grippy for a couple bucks. It's not rocket science, so you could probably still figure it out from this description. I'm very torn between my desire to explain everything and my desire to have a Thing that is Mine. But I digress.
Here's a really simple diagram of grippy's new playback speed (rate) algorithm. That middle school algebra really came in handy here.

The results, along with other adjustments, make grippy a versatile, spontaneous instrument. Given polyphony, the possibilities are as numerous as the input samples can you give it (basically infinite).
Here's some demonstrations of the most recent versions of grippy.
I'd like to note some of the main features (as of v 0.3):
Stereo auto-pan: grippy has 6 voices of polyphony that can be auto-panned at offset phases to create a swoosh-y spacial effect. Auto-pan LFO is adjustable. To come in the future: dry/wet adjustment, and maybe phase control.
Jitter: randomizes the start position by a small amount at the tempo of your Live project; random amount and tempo divisions are adjustable. There's still some kinks to work out with this one.
Automatable cycle start and length parameters: as seen in the second video, you can automate these values in Live to create shifting, unpredictable timbres, or in this case, transform a percussive sample into a synth in real-time by automating the length shorter and shorter.
Also a few QoL things: the smaller buffer view is the gripped cycle, and the larger buffer view has a colored overlay of where your cycle is. These update in real time with your changes, or with the jitter feature. Also ADSR envelope control for obvious reasons.
I will add more examples of grippy being used in context of my work on my WIP's page.
other stuff
Live 12 is out!! Yippee! With it comes the addition of two new types of Max for Live devices, Midi Transformers and Midi Generators. I will be conducting a thorough investigation of how these work and see if there's anything I might make.
Also! I finally bought a damn RNBO subscription. I hope to be starting up my Raspberry Pi explorations again soon. There will be a post dedicated to my vision & updates on that front.
Also (again)! This month I will be doing my first real show where I'm the lighting engineer. Will have a post about that sometime soon too.
Comentarios