Softstep / buffer blues

Makrotulpa's icon

Hi there,

so i'm tearing my hair out trying to get what I thought would be a fairly simple softstep / max patch started.
Any Softstep users out there can offer assistance?
The idea: while a toggle is depressed the input is recorded to a buffer - the pressure is equal to input gain.
I've started combining the softstep dev kit with another variable buffer patch from the forums plus attempted to smooth out the values coming from the softstep.
I believe my main problem is that I can't seem to reliably get the following sequence: ON (1) - counter starts counting to increment buffer crop size - OFF (0) stop counting and crop the buffer to final size.
Problems I can see:
1) ON/OFF is not always triggered... sometimes ON/OFF are triggered simultaneously.
2) when switching off for some reason crop is getting a 1 value nullifying the recorded buffer
3) max window error in buffer "Nothing to Crop"

Max Patch
Copy patch and select New From Clipboard in Max.

here is the patch - any help much appreciated.

Rodrigo's icon

First off, junk the dev kit and use Jeff Kaiser's native solution (http://jeffkaiser.blogspot.co.uk/2011/08/softstep-and-maxmsp.html).

Max Patch
Copy patch and select New From Clipboard in Max.

Second, don't use buffer crop. Try the following :

(you can leave the buffer "full sized" and only play the relevant portion)

As far as the triggering it and controlling gain. You can use something like [>1] to start the recording (as in, any pressure at all starts recording) and then use the values while depressed to control gain. Once the pressure goes back below zero (that same object will tell you) you stop looping. You'd always have an artificial fade in/out because of the pressure though.

Rodrigo's icon
Max Patch
Copy patch and select New From Clipboard in Max.

Something like this could control the start/stop as well as volume.

Makrotulpa's icon

Thanks Rodrigo. The fade in / out is something i'm wanting. I was thinking about how I might use the features of the softstep to go beyond the Loopstation paradigm and fell upon the idea of amplitude control for record and playback. I'm also planning to run the buffers with the grainstretch~ externals.

I'll have a go with your patches later and post up where it takes me.
Thanks again.
Lloyd

Rodrigo's icon

The example I posted has groove tied to poke for recording/playback/overdub, but it's easy enough to adapt what's there to just record into a buffer, then use some other object/external to play that buffer back.

Makrotulpa's icon
Max Patch
Copy patch and select New From Clipboard in Max.

Ok Jeff Kaiser's stuff is a lot faster/smoother.
Since he implements separate "toggle" and "bang" outputs it looks like "toggle" will work so I don't need [>1]
Have set a switch for play mode so that I can select between jog/shuttle. "Bang" is useful for looping playback but doesn't work well with recording given that i'm using pressure to change input record gain (there is always silence at the end of the loop)
Your patch is slightly more complicated than I can get my head around at the moment but I definately have it working. Only thing is that in reverse mode it doesn't want to select the relevant section.
Here it is with one play / one record setup.

Makrotulpa's icon

I guess to implement grainstretch~ I need to just replace your playback section?

Rodrigo's icon

With my code it's not that simple since the record object won't work without the playback object. It's a very specific setup that allows you to do lots of varispeed type stuff WHILE recording (and afterwards) but it's intertwined. You might want to have a look at xgroove~ or something similar (there's several groove type objects that do granular stuff and would still work in that example).

What you can do is use record~ instead and maybe a count~ object to know when you started/stopped recording and can tell that time to whatever playback object you're using. It all comes down to the features you want in your recording and playing back stages.

Either way I recommend getting the mechanics working, then dealing with the mapping (of a controller) afterwards otherwise you can waste time mapping something that ultimately isn't useful.

Makrotulpa's icon

Yeah i noticed it isn't simple! ;) I have had some success running grainstretch~ alongside what you have here - I could potentially have a dry / wet for each buffer. But I also need to setup for stereo recording and the varispeed stuff is not so important to me. Will see what happens but thanks for setting me on the path. :D

Rodrigo's icon

Stereo is easy enough to implement, you just set the number of channels on groove/poke/(whatever) to two. If you don't care about varispeed then leave poke in the dust as it's a quirky record object. Groove is my go-to for most playback stuff as it handles looping, pitch, jumping around arbitrarily, and having variable beginning/ending points, all of which you'd have to handle separately with different playback objects.

Hope it works out, and glad to help. It wasn't that long ago that I was asking the same questions...

Florent Ghys's icon

Hey Rodrigo,

''First off, junk the dev kit and use Jeff Kaiser's native solution (http://jeffkaiser.blogspot.co.uk/2011/08/softstep-and-maxmsp.html).''

Why would you do that?
It seems the dev kit is working here, despite a few error messages in the Max window though...