For this project, I didn’t really know where to begin, so I went back to the tutorial on the pfft~ object to see if I’d be inspired. Thankfully, I was! They made a patch on that tutorial that dealt with capturing a recording and processing that with some fancy math, so I tweaked it to create recordings with a vocoder-like effect, and used it as my subpatch for the pfft~. For reference, I included a link to the tutorial at the end of the post.
Here is both the subpatch (framerecord) and the main patch (frame-player).
Where the fun really began though, was figuring out what I could do with that recording. Because I used both inlets of my pfft~ separately, I dedicated one to recording and the other to doing different playback effects that would be done in the main patch. The reason I was able to do this is because my fft treated each frame of audio separately and stored them in a buffer~ to be used whenever I desired. So, if I wanted to just listen to one frame for a while, I could stop the recording on that frame and hear that particular frame for as long as I wanted. I added this capability into the playback effects used in the main patch.
As for the other playback effects, which were all facilitated through a counter, I added the ability to speed up playback, slow it down, play forwards, play in reverse, and play the whole recording forwards then all backwards. Lastly, for convenience, I added the ability to change the maximum value of the counter so short recordings could loop back through without having a long gap of silence while waiting out the space in the buffer~ from the subpatch that wasn’t used in the recording.
I did a demo of all of these effects, which can be found here:
And of course, here is the code for my main patch:
<pre><code> | |
----------begin_max5_patcher---------- | |
1345.3oc0Ys0iahCF84To9evhm1UJMK9FD1m2e.q19X0pJmfSF2BXDXlKsZ6 | |
u80W.FRFfPnjH0QZBwfi847cyGa996e2Jucxm4kdf+D7IvpUeWemU16Ytypl | |
arxKk879DVosidIhG4aNxDY+vac8yejUjwR4C8XYkJgqTujycyjWo3XFKwac | |
2uY9+PhjoLeIQTp7.+ay.jyJzCuhW7YdFaWhcXfsOrfWxyTLkPl84B9dkaR7 | |
23utyGjnM9uNfYUohLMlrLB0hyBQy.cxLHhsLSt6KeHD60YLbDyNHzWwpZ+C | |
hricfxVnEAAaMWf3f2hmR1i73OyTpBwtJE+0uUV6IZbEFacREWdn49sOnqUJ | |
QlcbDGxI8s7AYgZpctwG522CS01TyC+Pnwh2aGX1Hqf9erHSnD5fgF2Wq44j | |
dUo6Uo5EWP.otC+26em6aMeo9p9x5IGXqcn63ECG0ZBL2wxNdg.S+dCx5KXJ | |
HZffIzHASXHxD+f7sWn1faD5jfoFqim2rsE6koo5bgV7o3Oameu+Ng8BPlk7 | |
BP8.GbvPe.SAd5Aw9G.Jgtk4945dsis+q.QInTIyy4wsCUhHiuWVkYGufoar | |
BGvX4OhwBAI1bNXzF5ZPnMObazcyX8O7xpTm0va5DkNehhskX1hcQH2Md9QE | |
qP8GFGMPCIYQrFbWAgwyfvz.qyDQLNVHb6clw+kv.E8BE.4g1n8qfxvYPYLM | |
zxR2BHPD81v4TdYI6H+sbNV9T1HUGuzpqcnOcnBevwnuIwUS3.agObzsov2f | |
ruJeg3d3b3NA0g6Ha0r6XQ+OxU.cOMw5lp61p27Bvuoj.MaEohuwAwbVLnLm | |
smC1wUOw4YfDoLu726uvOZx4Jz4TOjFYWXDFE3RRrEKvj6mEKmyiarWWe8A5 | |
bJIhI1bBnO0VSDeiVEnLQDOpLokRdDENiLEJxlh.oN16zbaJU1qQn8V5HX6H | |
6q+ai+uNRHIyQBYiMxkbbqjPp29hRNxBFmYGtLUmSgSXna0hfZwB0edmVyvn | |
HZYV0ffmO4qyEpqGf9ksd.ZVqbVucIqNQW..L.MwxAA+L0BFQIwxojBglgMg | |
PfcTSPuQwEY7mzH7szWG.THmWYgds.9yOyn1BTaNtaVfZ8SCaCDYpliDy7uo | |
4.VDZOVD3PBlHisARWIRraWEA2HKhRd7XBebhuTkKf9yW9P2xEK+5ECEWXNq | |
D8FomtLQxbTF6XXXnggjaUt+8VGDdFxfZB4CtomjF+ar38WyYgeERhli3O2g | |
Qir6QfXS1IzkmywrNb9h0v2Ni3XGOnAtS2e6FDs9x8IWM+vA0Obm+o6Hu1n+ | |
Y4L0EczWwRayY+O0uqA2oCCcN3oFT65ice5m+Ngryj4AmYqJkUE6aXXcHIny | |
jEyKUhr1WoxmZIloSC6Tl7zYdeLWd91tryGbJyGbQlufIYOMZf5hpTQbtTuV | |
ZsWDif1kyp2EjOts0hfQ5z74zwwXzVCpv9NLRckl8WLLFtDXjBcXjdBFoKEF | |
gSAijnEKXlLcGGYPiBEehQYaXaqkAigSNAvePLB2Bcul.p6MvF5doPcag7cG | |
dlqm1VKC9wWC9WfIDO0BvCGmiHV0A3HmVXXPaqEAgnI4RCVt3bylj+oS9IZA | |
h2vj+yifGAiWLNuAi0twECimO68iQ7h42fSxlPF0jTWdJPu5xxfoo.oyUknk | |
Gp2MjQ41cEACGLGYikI0xC8Caa0Cl86WkHKO+QdQY8z5fqV57Wj1eT3ZWaQl | |
qM10tf+nn4m3N5BOVgVBqRqespvoJ84f5s05kJ0PHqRzX4rXP+w+CgV3GgB | |
-----------end_max5_patcher----------- | |
</code></pre> |
And my subpatch:
<pre><code> | |
----------begin_max5_patcher---------- | |
904.3ocwX1sbiBBFF93zY58fiGta1N.9+dqryNcHFr0NJ3fXa5zYy09hfll1 | |
FUhgZ5AkJB86iGfWdw2t8lUtaX6H0tN+14ONqV8lrlUp5ZqYUeEqbKw6RKv0 | |
pF5RIuv17j65t2IH6Dp5yxDrFwdG3gWQaJyoEDgpen9Zy2pZt7+wuPfiaqr2 | |
8MFzWcEVj9XN8g64jTgNOQw92AV63640V.gwsEHzc.m+12qZwqEDUTbU07ua | |
uosTVr9hGlUrBAKEy2e3U57V7ZEQmft04OPwEtqO7WumYShDXx.HAMMR7BCu | |
JHIiiKI3zzlxogx.n.dJTDO.JfifBuX0xBOjpPykkiD4zsjc6cpj6EbPykEm | |
bYQz7YAJLosHJ75wBnUYQ3LXQ2VjqDKRYMTozHvI.hbfVFGAy.G9vHkTguVw | |
..9l3QS4FBe3QaqF4FL8giFuU3V0DAgeOgh2ny.f4ZF9yP9rGF.XaQ.XgUOy | |
D4zL1HRm4TQKn9Zw4HlhF.L9iAFP3cAxiZi63RvRxket2p6RfWfnQ21ijkE. | |
+XeqbgUg.X9PnSpvegUNkCRqZpH4BHfVeP66bIOGcLqDmyXOd9icsDf2BKMt | |
oIKiv68P.T+LFLxJXXwINSYRxDMiSMB0qFBPp0FnE1yM2oVf4hyegA3DC+4X | |
nBpLRg7UTP+6EbzSRY7sWpQa+Sfh4XlRuR.kzoShV3Kj9Htl7BGWYUcR+4rj | |
.fN53xk1is5VnaIEBrUAg27AQ2QlQK7kPSk5BrJVw2zWn.MasxtCPCuFFr2a | |
vktVaNXNoE6A.i2jfQe55YdKLcabKxoe4K3oBT6K9DtpYM7z9AcmaHmiB1VR | |
sDUXQNidTiZcM11pgmXLNdwlDuDqEtPSBWvGaTY91Jl7xU089eTl9iT2PLBb | |
3Aqje9llePqDNOSBmu0nO5LnukBGbpv4YsvAMZuCBX2.BMJf1Y4Bzncq8okM | |
BXjQAL1dHMz3QnkBXfQAD9wY5OII4iTeUFX2W5Fnsc19jcxQiTkfAFkid95O | |
cTzgmduKRG7Dt5JIKWVCNir1CAFKqg1HqMRzBZOMY0RqowTz3mIl3oNGTe0W | |
uDzgm9tlbMKq+ztY6NSALdmqkloL53EqFNnIg6qR8cFQwUUOS30c8PGIoA8m | |
Xp4fn05myo5m0lhkWj+479tDnqBykljERGxMbsw2cgcWF0sjImQoM48SppbP | |
9q+CD2nt9B | |
-----------end_max5_patcher----------- | |
</code></pre> |
Pfft~ tutorial: https://docs.cycling74.com/max7/tutorials/14_analysischapter04