Insert silence in groove~ loop at audio rate?

Julien Vincenot's icon

Hi

I'm making a loop-based patch to help while learning foreign languages (techniques of chorusing and shadowing), so naturally I came to using groove~ which is very accurate and also offers easy timestretching. I have this editor allowing to select portions of audio and loop through until your mouth tastes like sand πŸ˜‚

Now I wonder if there is an easy way to add a portion of silence (for instance a percentage of the loop duration) between two loops without losing the time accuracy.
For instance I'm playing segment 6 (about 3-4 seconds) in loop, but I want to add a breathing gap of 2 seconds everytime the loop ends.

So basically interrupting playback of the groove~, which can be done with edge~ and a delayed bang. But this way it always eats a little on the loop start before stopping, so not a great solution.

I was hoping to be able to do that using only audio. I tried playing with the sync out but not luck, that's beyond my knowledge. Any suggestions?
Thanks in advance for your help !

Roman Thilenius's icon


that is the downside of groove: you have no external phase accumulator such as wave or play have.

Julien Vincenot's icon

Yes exactly, and those don't have timestretch so I can't use them :(

I was hoping for a smart way to control the on/off sig driving the groove~ with a condition, but in audio. That must be doable but I don't know how...

Roman Thilenius's icon

you can start stop it with a signal, and zero out the output value using a gate, but i am not sure if you want to do that or of that is sufficient for your application.

in my head is immediately "phasor - * 1.2 - clip 0. 1." when i see that request. :)

Julien Vincenot's icon

hm yes I understand what you mean, indeed after the *1.2 and clip the shape of the signal is exactly what I'd need

but then I still get stuck, indeed I can zero out the sig~ driving the groove~ but how do I restart it?
It seems the sync out of groove~ just stops emitting signal after it's off (it doesn't keep outputting zero...) so it seems to disable any object it is connected to :(

here's what I got so far

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


Source Audio's icon

I don't understand what the problem is.
Is something simple like this not acceptable ?

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

Just select portion to loop a bit more carefull, and that's it.
If you don't want fade I/O remove trapezoid and volume

Julien Vincenot's icon

It's not bad (close to what I go originally) but it's not really acceptable because :

1) I cannot assume the selection is careful (it's a learning tool and I'm not the only potential user.

2) the timing of the del is not accurate.
The whole interest of the chorusing technique (practicing pronunciation in a foreign language) is to speak in loop for a very long time imitating the rhythm, prosody, finally detail of consonants + vowels + tons

Now if I lose the rhythm accuracy of the loop (during the silent part) it's very uncomfortable to practice.
The idea is really to use the silenced part to repeat the selection as close as possible, relying mostly on rhythm. 1) speak with the recording -> 2) speak alone (so I can hear myself better) -> back to 1

But actually playing with your example and explaining this made me think perhaps of a satisfying solution. I need to try it now and I'll be back with it...

Julien Vincenot's icon

Ok indeed that was the right move, thanks everyone for the help ! I figured it out :)

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

maybe save and restart, I have a few loadbangs/messes

So my big mistake, I still do frequently after 15 years maxing, was to confuse the interface and the internal mechanics. If I select a segment in waveform~ doesn't mean at all that groove~ must play that segment as shown πŸ˜…

All I did was 1) multiply the length provided by the waveform to get a new section ending ( playing more than needed)
2) generate a buffer accordingly, to follow that new pattern and mask the extra time after a little ramp. I used function to fill the peek~, I'm not sure how to do it easily otherwise.

Source Audio's icon

Now that you explained the loop and reading of the text,I would suggest to loop
once at full level, and second time either muted, or much lower volume,
maybe user adjustable ...
And all the time scroll over the waveform, so than one can folow the rhythm.
That would be more helpful than arbitrary delay time between the playback.
You could even use second waveform to fully zoom the Loop Selection
and insert progress in it.

Julien Vincenot's icon

I think you missed my last example, that's pretty much what I do with the envelope buffer and extra time πŸ˜… There is no arbitrary delay time, only exact ratios of the original duration (0x 0.5x 1x 2x)

Now I see what you mean about leaving some sound, but precisely the idea of the loop is that after 3-5 min on a single phrase you only need the listening to check for details / compare, not to know the rhythm. It's already in you, silence definitely doesn't affect that and you still hear it in your mind. Really the idea of the break is "to take a break" from the audio for a second, no need for a cheat.

Also the break is multipurpose, I really noticed that playing with today. It also allows to isolate a given segment from context, to focus only on a small fragment and not pay attention to the rest at all.

Source Audio's icon

I had a short look into your patch, but it looked too complicated for my eyes.
Main thing is that you get it working the way you wanted to.
We all have different ideas about what sometning should look like.