<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Hi, Max.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">You could have a looper feeding into a variable delay line whose delay is modulated appropriately.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">A looper would be an N-sample feedback loop with some input feeding into it, where the input gain and the feedback gain are mutually exclusive. That would prevent new elements from being added and you'd have the same recirculating material when you freeze it:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">y[n] = Rx[n] + (1-R)y[n-N]</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">with R being 1 to write into it, or 0 to freeze it.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">The output of the looper could then feed an N-sample delay line whose delay is offset consistently to always point to the same buffer position:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">delay[n] = (lineN[n] + element[n]) % N</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">where</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">lineN[n] = (1[n-1] + lineN[n-1]) % N</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">and element[n] is an int between 0 and N - 1 determining the array element that is being output.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">I don't have this in PD but here's the Faust implementation: </div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><a href="https://faustide.grame.fr/?autorun=1&voices=0&name=lotkavolterra_A&inline=aW1wb3J0KCJzdGRmYXVzdC5saWIiKTsKc2l6ZSA9IG1hLlNSOyAvLyBhc3N1bWluZyBhIDk2IGtIeiBzYW1wbGUtcmF0ZQpyZWMgPSBjaGVja2JveCgiRnJlZXplIik7IC8vIGNoZWNrIHRvIGZyZWV6ZSwgdW5jaGVjayB0byBhZGQgbmV3IGVsZW1lbnRzCnBvc2l0aW9uID0gKGJhLnBlcmlvZChzaXplKSArIGhzbGlkZXIoImFycmF5IGVsZW1lbnQiLCAwLCAwLCA5NjAwMCwgMSkpICUgKHNpemUpOwpsb29wZXIoeCkgPSArKHggKiAoMSAtIHJlYykpCiAgICAgICAgICAgIH4gZGUuZGVsYXkoc2l6ZSAtIDEsIHNpemUgLSAxKSAqIHJlYzsgLy8gbGVuZ3RoIGlzIHNpemUgLSAxIGJlY2F1c2Ugb2YgdGhlIGltcGxpY2l0IG9uZS1zYW1wbGUgZGVsYXkgaW4gZmVlZGJhY2sgbG9vcHMKYXJyYXkocG9zKSA9IGRlLmRlbGF5KHNpemUsIHBvc2l0aW9uKTsKcHJvY2Vzcyh4KSA9IGFycmF5KHBvc2l0aW9uLCBsb29wZXIoeCkpOwo%3D">https://faustide.grame.fr/?autorun=1&voices=0&name=lotkavolterra_A&inline=aW1wb3J0KCJzdGRmYXVzdC5saWIiKTsKc2l6ZSA9IG1hLlNSOyAvLyBhc3N1bWluZyBhIDk2IGtIeiBzYW1wbGUtcmF0ZQpyZWMgPSBjaGVja2JveCgiRnJlZXplIik7IC8vIGNoZWNrIHRvIGZyZWV6ZSwgdW5jaGVjayB0byBhZGQgbmV3IGVsZW1lbnRzCnBvc2l0aW9uID0gKGJhLnBlcmlvZChzaXplKSArIGhzbGlkZXIoImFycmF5IGVsZW1lbnQiLCAwLCAwLCA5NjAwMCwgMSkpICUgKHNpemUpOwpsb29wZXIoeCkgPSArKHggKiAoMSAtIHJlYykpCiAgICAgICAgICAgIH4gZGUuZGVsYXkoc2l6ZSAtIDEsIHNpemUgLSAxKSAqIHJlYzsgLy8gbGVuZ3RoIGlzIHNpemUgLSAxIGJlY2F1c2Ugb2YgdGhlIGltcGxpY2l0IG9uZS1zYW1wbGUgZGVsYXkgaW4gZmVlZGJhY2sgbG9vcHMKYXJyYXkocG9zKSA9IGRlLmRlbGF5KHNpemUsIHBvc2l0aW9uKTsKcHJvY2Vzcyh4KSA9IGFycmF5KHBvc2l0aW9uLCBsb29wZXIoeCkpOwo%3D</a><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Ciao,</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Dario</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, 26 Feb 2021 at 14:03, Max <<a href="mailto:abonnements@revolwear.com">abonnements@revolwear.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi list,<br>
<br>
I'm looking for concepts like a queue or arrayDeque in Pd.<br>
Like a delay line which I can pause adding new elements into and it will <br>
act like an array until I decide to add more. At audio rate.<br>
Is there something simple that I have overlooked? What's the best <br>
strategy to implement this?<br>
<br>
M.<br>
<br>
<br>
<br>
_______________________________________________<br>
<a href="mailto:Pd-list@lists.iem.at" target="_blank">Pd-list@lists.iem.at</a> mailing list<br>
UNSUBSCRIBE and account-management -> <a href="https://lists.puredata.info/listinfo/pd-list" rel="noreferrer" target="_blank">https://lists.puredata.info/listinfo/pd-list</a><br>
</blockquote></div>