Idea for a module: Buffer with automatable playhead

Hi there!

I got this idea in my head and am hoping maybe one of you developers likes it and likes to implement it, so here it goes:

You probably know Image Line GrossBeat, which has been cloned a few times (I have MRhythmizer, and then there’s TimeShaper and I think some more). It’s basically a buffer with a controllable playhead, so that in it’s default position the output is the same as the input, but when modulating it the playhead slows down, at a certain angle it stops, and then at even higher angles it starts moving backwards, jumping back to the original position when modulation is 0 again.

Since we already have Shapemaster for the envelope modulation, it would be really cool to have a little buffer module that, in combination with e.g. Shapemaster, would act like GrossBeat.

To make it really useful, it would be great if it could be synced to a given tempo - I think the best way would be to be able to control the buffer size in measures of a tempo, like “4 bars at 120 bpm”, so one value for tempo and one for length in bars as controls on the module.

Then it would need to react to CV input in a useful and straightforward way - since it only makes sense to modulate into the negative region maybe it would be good to have the modulation input react the same in positive and negative directions. So usually I would say 0 Volt is always at the end of the buffer (input=output) and then 10V or -10V would be back to the start of the buffer (input=output again). So let’s say the length is 4 bars and I put in 2.5V - it now acts as a delay of 1 bar. If I put in a ramp that goes from 0 to 10V in 4 bars time, it plays the buffer backwards. If I put in a ramp that goes from 0 to 10V in 8 bars, it would just stop and go quiet, and so on, creating slowdowns, speedups and scratches with various curves of CV input.

It would also need a reset input to sync the buffer to the patch.

If you don’t know GrossBeat, MRhythmizer or TimeShaper, check them out to see what I mean.

So the module itself would have a control for speed in BPM, optionally syncable to an external clock, a control for length in bars, a modulation input and a reset input. And then maybe optionally a little graphic that shows the current position of the playhead.

So what you think?

Since 4 people come to mind that I think might be capable of creating such a module, I want to tag them here so they see it, but of course I give my idea freely to anyone who wants and can do it. :slight_smile:

The people I’m thinking of are @Patheros @steve @Ahornberg @synthi

Interesting Idea.

I think the volume envelope part we can safely say could be done very well with shape master. Even the more advanced stuff like switching gate patterns can be done when you use Shape Master Pro because it has trigger/CV inputs for the shape presets.

The time based stuff is more tricky because as you mention, everything is tempo based.

I did produce some fake scratch effects using Nysthi complex simpler or simpliciter with the tape head expander, modulating the sample start point and playback speed (including reverse). Maybe with a more complex modulation routing you could directly address similar time based FX.

Happy to experiment around with that.

1 Like

@Schabbes Sorry, I’m only developing modules for my own needs, and I share them for free. Personally, I don’t need this kind of module.

1 Like

Try Clouds. It works around recording an audio buffer with variable-head playback, combined with either granular, spectral, or pitch-shifting modes.

What’s the difference between the proposed module and a delay where you can modulate the delay time?

Surge xt has a delay where you can modulate the delay time between nearly zero and up to 10 seconds. Set the mix to 1 the feedback to zero turn off the filters and you can then have a buffer with a Playhead you can move around roughly

But perhaps I don’t understand the problem

I think, the OP wants to have a module in combination with ShapeMaster to do something similar to this VST in sync with a given tempo and the capability of playing the buffer forwards and backwards, controlled by CV:

Yeah. @baconpaul as you can see in the video this would be impossible with a regular delay. You could pitch, reverse, slow down, speed up and everything in between in a very controlled manner (or as chaotic as you want), or jump back and forth to chop it up.

I just thought it might be super cool to have the buffer as a small and easy module, and then you could use it like Gross Beat with Shapemaster, or you could modulate it with envelopes and LFOs and sequencers and stuff…

You could for example run an AD envelope into it to get scratches or tape-like pitch dropouts, or a simple sequencer to chop it up and rearrange it, or an LFO to have pitch warble and stuff like that.

I don’t know how difficult this would be to build, but if it’s easy enough for anyone it might be a fun module.

That would only adjust the length of a buffer, not the playback position from it. Clouds lets you scrub through a buffer of up to 4 seconds.

maybe i’m dumb but a delay writes information to a buffer then reads it out lagged by n samples (with interpolation) if you modulate the delay time with, say, a ramp from 1s to 0 every second you essentially frequency double with jumps. If you modulate it backwards from 0 to 1 every 2 seconds you half the frequency. its a bit tricky to keep in your head since the two pointers are racing each other. but a delay is just a playhead (usually fixed) in a record buffer

so the reason I asked is: there is obviously some difference between how delays are displayed to users and so on, but what’s the other set of differences here? Is it that you have a snap/unsnap like the freeze in clouds? Or is it just a different ui and modulation path?

The difference is you could go back and forth inside the buffer, with a delay you can only speed up or slow down, not jump to a different position or go backwards.

What does “go back and forth” mean to you?

if you modulate a delay time with a square wave you certainly jump to a different position right?

I’m not asking to be difficult. The module you want is pretty trivial to write with the stuff we have kicking around in the surge codebase. i just want to understand what the controls for it are. Like what is the ‘playhead’ control and what are the inputs and outputs.

it sounds like you have a buffer, input records to it, and output plays from it just with the position in the output controlled by cv plus some knobs.

That’s exactly what a digital delay does though so the details in the difference are interesting.

Well if you want a jump in a delay you would have to modulate it to extremely fast and then back to normal and try to hit the right position. Also you can’t go backwards.

It is essentially the same, but in the new module the CV would correspond to position, not to speed, and the delta of change would correspond to the speed.

right so you have to always pump the cv with a sawtooth then basically?

(like i said this is an easy module for us to write with bits of surge if i know what it does).

So lets take the simplest case.

You have a stereo in and out and a single cv port for position.

The in writes to a recording ring buffer so you always have the last 10 seconds of stuff available.

What a simple delay does is read from a constant position back from the write position. So read position = write position - offset % ring roughly.

Instead it seems you want, what, read position = 0 + CV / 10 * buffer length? something like that? So absent cv input there’s no signal out because it stays in one place?

can we describe it that way?

(you can go backwards with a delay - just modulate the delay time to longer times faster than the write pointer advances; but that’s a separate issue).

I think the OP wants something like that:

I would want it to react as in GrossBeat (or MRhythmizer (maybe you could have a look at a demo of that) or TimeShaper), so the ramp would be built and it would always play forward at regular speed, but it would also be ok if the ramp would have to be patched in with the other modulation - a bit less user friendly, though.

So it really is a simple delay in essence, only that most delays seem to modulate the length of the buffer, not the position of the playhead. as officialdjglitch pointed out.

The CV would add an offset to the position, so with a constant CV value patched in, it would be a simple delay, with a downward ramp with the duration of the buffer length it would stop.

So yes, basically read position = 0 + CV / 10 * buffer length but maybe better with a constant internal ramp applied, so that it keeps running with constant or no CV patched in.

maybe it could be achieved with the right type of delay module… have to try that, am a bit confused now about how it would work out.

nope, that ain’t it. :slight_smile: the first video you posted of GrossBeat shows what I would want - it would be like an extra CV input that applies an offset to the position, speed would only be changed indirectly as long as the CV is not constant.

So to clarify, I would want read position = 0 + CV / 10 * buffer length + "constant ramp" and the buffer length should be adjustable in measures of bars at a given tempo.