audio delay with playback speed control
i’m just getting back into some max stuff, after a few years of barely having touched it…
one thing i’m trying to do is to make a delay that plays back the delayed signal at twice the speed of the original
i want to feed the delayed audio into outboard processors and then back into max, so that the sounds stack upon each other with each generation, getting faster and faster with every cycle (and higher in pitch too)
the delay should be relatively long, something like 30 seconds. it’s more about creating a thick web of sped-up sounds than having an audible "echo" type delay sound.
tapout~ unfortunately doesn’t have a playback speed control
i’ve been messing around with a record~ object, a buffer~, and a groove~, and i’m able to record incoming sound and then play it back at twice the speed, but not at the same time. if i’m not mistaking, it’s not possible to record into a buffer~ and play back it’s already recorded contents at the same time. the logic for triggering a record and faster-playback mechanism switching between multiple buffers fails me at the moment…
if anyone has any ideas to share about how to achieve this, i’d love to hear about it!
On Fri, 13 Feb 2009, beschaving wrote:
-&e->i’m just getting back into some max stuff, after a few years of
-&e->barely having touched it…
-&e->one thing i’m trying to do is to make a delay that plays back the
-&e->delayed signal at twice the speed of the original
-&e->i want to feed the delayed audio into outboard processors and then
-&e->back into max, so that the sounds stack upon each other with each
-&e->generation, getting faster and faster with every cycle (and higher in
Well, there has to be some sleight of hand here, what you’re asking for
is valid, but the way you’re going about it is impossible without some
Say for example, you were reading a book, and I’m 30 pages behind you
reading the same book, reading twice as fast (you’re the present, I’m the
delay). Eventually I’d pass you. Problem is, we’re talking about
realtime audio, and you don’t get to pass the present.
So you want the illusion of it speeding up, but for it to never "pass" the
There are a few approaches to get the effect you’re talking about without
having to disrupt our lovely Newtonian view of spacetime:
1. Normal feedbacking delay, and in the feedback segment, you place a
pitch shifter. So what you put in it comes back, however many seconds
later, at a slightly higher pitch, and then again after the same amount of
time even higher, etc. The problem, is I think you want something
messier, where the echoes seem to keep swirling faster and faster in
addition to raising in pitch.
2. You could do a larger version of what most pitch shifters do when
pitching stuff ‘up’, and basically imagine 2 or more seperate delays, that
as they reduce in delay time from say 30 seconds to 10 seconds, also fade
out a bit, then reset at 30 seconds and fade in again. The reason you’d
need multiple ones is to mask that fade in fade out behavior, by having
I’m not at a machine where I can use max right now (stupid sysadmin job
and lack of a linux port of Max :P ) but I’ll see if I can send out my
hack at what you’re describing this weekend as I’ve been wanting a nice
psychedelic swirly delay thing for my own work for a little while now.
p.s. oh, and hello list, i’ve been posting a bit lately after lurking for
*years*. just got upgraded to max5/jitter a few months ago and I’m loving
it, so I figured I’d play along on the list and answer some of the
questions now and then. it’s the karmic cross we all bear for those who
answered questions before.
I agree with AndyW
however, I think the pitching effect CAN be done with tapin and tapout where you would have to change the delaytime with an audio signal at a constant rate (still you need to fade between a few delay lines to obtain a constant sound).
here is an example with 2 delay lines and hard switching (I’ll leave the fading to you):
----------begin_max5_patcher---------- 997.3oc2Yt1aaBCEF9yI+J73iSMU3KXfopIseGSUSDvsgIhIJPWuo1e6CeLz larXGBPW+Rhriw75GdOGev44oSblm+fnvA8MzOQSl77zISftTcLot8DmkQOD mEU.CyINe4Rgrz4B8uUJdnD5+pYyPKhVmfJtOsLdQp7VzbQ48BgDQPIhrnGQ Yoxp6U8EdStrrH8Ig5hwjKcq6d0ZQQ0zGUllK+0ZQboVagX2pgfXAdpubq+. ccyUEoukabE9d9pQ4wgqfvfVjMuH4cKSkYhRXcgq6LMAVM4y+8LFYSsJiVBZ 04GqSixbdeNxuqrYRbUc9xzopOtni7rPThVoHIJ+FM+NMxwYApUNlxLkbaeE Xrm8jCO1jKS7GQ1w.19KcFODVy9fagisek6NDq7axxqljl4SOYkOtRnWDpeN pBKHm4QxacdS614aXAT.E7.S8MLsSA6yg.OWqgGMvV3QNA3IE2Wcy1y070Wq VejVYZQ5sxJUbTXtOVngDMI.rvH+arPN.V7sEK3Q2SsOF7B09Ip2o5N3ip6n yNiCGl4yfLNd9FGlwC4arwFkboms9I7P3mZAjeuJLqmPY.Ahs7zeYVMBfmzi ACl5YenIYDQ4YvS1ZXZGbWtiJRpxrzW9qPlFMgDKCUoTH3lws1eQBFQXd0qH bO3v3dAcKni3OhP4Kypnxk8WfGQWDk1wXGVXiHVl0SdEc.Dg6ehYiHj++yF0 pWoC4UFyR.hyRWoJ1tehiZrLgvauxOR41zCvF2OsroIGyIyFb33FNQ5QnvN0 bL3wbS5UKhJxW2OYeadks.HhhyrNMCdL2otLZU0DqRA2S0Cx45yjzKzx5AY5 iljGX86.i4eN.ZqdsNfF53hlTohLdshlpgDmKkvB1d7Te1ZLWMdr+vrGjD2h mRhhe6sRa+rv3AD8C6lOMNiB67cHpGIgJqWpbqF.XJbzx91Wkemb4vcwQ+2v r0e4CnTU+ayqh76VG2rnaNJRz6hMQTTlJg7haLH1ViYQZRh.94FrrLMYUdpr rVCnqO3CuypjBsSRLWrpJ.Jt9HaYu0pqh0.styBp24WfoZBObZhaflvCLmvF Z8GNLgCMPRDKwD2Ep.lRfP.d0VMMs5nZIlDnpN8PaHXs97zuKCGWez3jtGo5 9w6wsIQppC7X.iJ1410hlbGVMYBmv7gUSlXmnV9ry20SGbBe4yIu0pqNMSx+ tSBwdO+KwTMYQDYMypSe3iCOWoOHlraAlNnDDSMMA7Gr3hcBn+Xrs5v59wlr 4IYXq7dmaWKd7A9YmQ49CGTME1CaGU+NILFTkV8FAPqgPrzSTrtPIk5BLgVa I1pFuL8uUglSzC -----------end_max5_patcher-----------
>Of course you can record and playback at the
> same time. Only thing, you would get a click, if the playhead passes the
> record head probably…
passing the record head is tricky in max, it can introduce a weird samplerate reduction like effect that persists until you stop and play again. It’s safest to always keep a signal vector size distance.
right… i’m trying to get my head around your responses. i’m pretty much new to building to my own patches.
my intention is to play live guitar (for example) into the patch and then have a long delay, say 10 or even 30 seconds, before the patch starts playing back what i did, at twice the speed and pitch (for example). it doesn’t have to be triggered by particular events. i would simply click somewhere in the patch, start playing, and at some point the patch would start adding layers to it.
let me think aloud here to understand the process (i’m not so good with numbers)… let’s say i want a 10 second delay, but played at twice the speed and pitch of the original. i play guitar for 10 seconds, while the patch records this. after ten seconds have passed, i want the previous ten seconds to be played back by max, at twice the speed, while i continue playing guitar. so then i’d have live playing plus the recorded past, but compressed to five seconds. i want both of these signals to be recorded too, feeding back the max output into the max input. max should loop the sped-up playback once, to cover the time it takes for the next pass. then, now 20 seconds in, the previous ten seconds are again played back, now combining two generations, plus my live playing, etc.
the feeding back into max i would do via a mixer, to add outboard processing.
how does one paste a patch into the forum so that it shows up compact like that?
The copy compressed from the edit menu is the answer to the last question.
The effect that you’re looking for is performed by a plugo I built a while ago called discorporate. It’s a good medicine for these times. (www.jvkr.nl/shelves)
It works like this:
----------begin_max5_patcher---------- 1323.3oc0ZsrbaaCEcszWAiZVz35G3hGjTs+CcY2zoSFJQHY1QhjiHcqRxD+ sWP.PGYGvTXJBH3MTi.0Pdtm6Em6CnuLe1hUUG4MKh90n+LZ1ruLe1L4RcKL S+8YK1mcb8trF4Oaw5p864ksKtVcuV9wV456KNF0lUC2Itf6uaQt7dUq96aR n8KtoprsLaOWdq+feHOqLq+d0Ysquunb6GOvW2pfEMEcK55HJk18Q5xtqXwR Q+0IOulhOKed.HtsZ4xG1WTti2JgM7sEqdnseUT2hec97tKWao8Wx+Wg47cl +u7nIaFaiMq.T6mp4JCdQSw1xrcKdx.MPJ3XIavX3tOH3aYifTvFIEXDjxPA EUa1zvaMvLwKGYz.FhUVrz9o3KbzvddSS1V92Y3oHjo3AznhG9gQBfZ6glPT QBP5EKRP7DVwOXx1gQY6EcQUQKVkUt0JZflJ2Wflv3B7HnglcE4FogX53byZ CSqBBD0GwmXfVXIvzo28tahfaMYerQ4l2rqJq8GS.D4Fe5RkhGaTNXrqok6h .bhQdI1w7RrN9HL4kqLkdLNwYoGU4EY3zfH83qhTRcFojlFRjxvRjjQJQBRm dZnqPhckRfx9AxaTERvw7B5MnBIxYhAJU.HdJDCpOvaDk+m0VTUd56fPjuCg +V7ARe4zsidjJYKcbuXSCU5tdw5ZPeyp6xKjH2.AkN1Fz0clqtBAZGYvsfIi lN8cjQwxJxvjvnirAIDSzAwAzAnBIfkAMcftkYhPvSOgPVphOPgQ7gHAp3gX v1omSKK1zyNIQM9lj3fnm8AxlvOVeH5mgad+F3CW89M3q.jwg6PcfThlgdpx tkW3ZWFJ2x1CYEkRXXfWHiLuhtyVLUFXDitvIVFx1ap47bS1ML17ojS2VPIA pcO3rcIic1t5YXPTt5fc1tCr+mvbPtScubJFgnJYOcZqRmp1lQhwNpJ8WSAH 3DGHhhPmnib4mPt4zL4YqM01BL1MS8SBW0bxjl4XJ2LUUyKEtiqi1UUUGYJj .Rm9Ph9V1jg7Kom01JmEQzrodW1mLFTDeN8xZSoYZBRIMvvSXvS+pMY+SOt9 oeuCSOYtBemLh.vnkwcpQpUV7aBDOk02BLGWeqdfqgR8sCSDD+TnutftjKdg 9CcFkfaOixdZPkM+LiGFHaNIATuChEYymvtjZOjUy+bUQ9ih2GlItjXpe5DG e3FTLRIrOt7cjKyTdcMoPotaHu55FoJF2eC403e3FlqXRcG38Eh+V5.EotlS z8ODnbR88YMUGLQLDGusS22AKILOvo1rZwCVHWGYpaV7YVgo8GROQcvAISIM gmTZpn7QAvL20+3pXP7PWWUVJoh+eFR+edKMdBqa5z.I4iawthxW9OAUBot0 eNs0T8vg08lR+Q2F8MTkyaZKJkIJN8Gge1O59h7bt798ndeQdcknVJMHFnXe qwD1FLg5Z0veXhYClR7KlhsASL+56r.RcCFwmzjsPxerTh0Q3uBLgSHc4wYo pitW0Fwy+FnGEOIQNIsXofz4QtoVXIRy0iN7DawjG831ny5YHgrgl.uhIrsp rgkh1K1EDFB+o9cSG0FLE6WdhXCl7aDNXiui42zQVUDHyyYssQcxuttW3UBA HYSlN+tmylsb9U.mYixD0urDiDfXBGdXhZiuCH9ES1nf+Bf67rJLawj+TvI1 fIvy0WZifI32VlAaZgBhCu3I+tsCrRxzqQ3fU0M4UH87NsGtf.+gHlkM95OD QszqEVEM44DJNdbEhu704+GPFthsG -----------end_max5_patcher-----------
here’s my pathetic attempt so far:
----------begin_max5_patcher---------- 856.3ocyXksiaBCE8YxWAB0GSSwarz252Q0nJGvvPEXi.m1YQS91KXCsYlIP voDFdADlk68btm6h44MVN6EOvpcr+p82ssrddikkZo1Er5t1xof9PTNsV8XN Er5ZZJyYq9dR1CR05Q4LZU+p7CEY7blT8JvtEKoxn6y3o+nhEI0lDfA6b2ZC cCaOg7aOBB14ZeW26jEq93h8+7y.R+WOQvkbZAScquUkQyOwthCxdCC5VUuj 7wRl1pNN+8629opydRcC.bma6purYS6gsSjPjhzzb1YQNXXjigXExCHZBn+3 4PNz2P7kwarxcWAVFJ3lKDk1eBXZ3sCjHfBd3vwBuvfac3EriDR.A9WAuDIJ JXMj5Y4EA+KhjDiE.3NAfW6IexXB.rqobi6LS.b1uabj2g+XVN8QiS5CQZjq NgBGC4.uYSUrmxSm0D+jbQioMMtiPp.NFqPOY7DejonGND5abVZi9cTZX90G 0bZY88B4Qafqqo5jdlBnRTBFMCAhmMchloVJFprhUx3w1JSXnThnyivJMj+3 4Qn0YyyFatmUYLvw5NItWNEB.msTn1tpauA0QFpoasjVIa6vXdAV83TZlQqR FbpJ+UbaWs53XueTHhYmB8oxGv.0TlfPkrg3MpdALa5k5rTd6K8tRJM2P0id 2b2kl8TLM5niwzihWvH8TZj9imkdbGXdiYT2+YimyDQH54L0ST.2QFVvGtNK DNDY.MlK5HAcWyw4hfUZSgAFlHK8nocJ5R8QD8IzXo9yWkvtL+O9cY1C+VAv k1ko2RsIyABuoUBwuXGsyYIxyhSzX3DpvodHQe7X3jbCJvudB35x2.H9xAb7 Gb.uwqEUwWa.W2R2SO6KXLbhVy40CvM6OjjzL4yvbyk2VfuJkvKXzsMsn6u7 5XH1Sz3nqsvePvDlo4+Os+DXorfSdF+s+VUkS1t9qwZs3PUT+mt+WdX+OGMl UKy3TYlfe5C4+pG59r3XF+ze7SQVbonIisyIFHucx9DbJ9j2h5SM0wsAWvkZ +s.KnK8FyMfOgV1PGZJ9zJTMsvzj+D7IxhKvuHK49prfasKMEsT6NnWirzx4 RgSvkV152AqNOZ8kt4s53nozMYgqRt57H3TDRvfk0mBVcha.4FOEPyEur4O. ffZZeC -----------end_max5_patcher-----------
it sort of does what i want, at least it records into and plays back from the same buffer at the same time, and it sort of creates multiple generations of sped-up delayed recordings…
any subtle hints to link the recording and playback looping, so that the process keeps going, would be appreciated…
I was thinking about this exact effect last night driving home from school. I too am new to patching, so I can’t tell you exactly how to get from a to b, but my idea was to have a few networks of looping buffers, each one playing at a speed faster than the one before it. if you had a 30 second input that you wanted to apply this effect to, and you want it to repeat a few times going faster each time, then you’d have a 30 second buffer that would write to a 20 second buffer going at 3/2 the speed of the one before it giving it a total time of 20 seconds, and that buffer would write to a 10 second buffer going at 2 times the speed of the buffer before it, etc. I’m not sure how easy it would be to adjust, because you’d have to set up the buffers individually… but if you set up enough buffers beforehand you should be able to adjust the feedback and have it carry through, and the last buffer can either just stop or feed back into itself. I hope this makes sense, it seems logical to me…