I took astrid out for a test run with the a name for tomorrow fellers this weekend while I was in Milwaukee. It all actually kinda worked out! I have lots of small (and some large) tweaks I’d like to make.
In the engine, I’d like to expose the shared memory sampler to python
instruments – probably via the ctx that gets passed to
every callback. Then, I need to make sure play command params are still
being passed in properly (I think I broke it a while back, but I should
be able to reuse the parser for update messages) so I can use them to
trigger the sampler… but I’ll need to play around with it in the
instrument script a bit to know what feels right.
I was also craving some way to store and recall snapshots of parameter states and that turned out to be pretty straightforward to implement. Params are just stored with integer keys that correspond to an enum of all the params the instrument knows about, so storing the snapshot just loops over every param from 0 to N and (if the param exists in the LMDB session) writes the bytes of its value into a shared memory blob. Recall loops over the blob and writes the values back into the LMDB session.
Being able to store & recall the param state of the instrument(s) is pretty exciting. J and I were talking about the freedom that would come from being able to dial in to a nice place, snapshot it, and feel no anxiety about taking it somewhere totally far away since the previous (or any) state is always just a recall command away.
I don’t think it’s worth trying to finish before the session in Texas, but it would be nice also to eventually implement a sampler / recording feature for param changes over time – and internal commands, too. Being able to store and replay some gesture coming in from the external controller, or a sequence of commands on the console could be very useful.
I also fixed the last memory leaks! Feels great to watch memory get
reclaimed while I play, I was a bit worried that would turn into a giant
project but the problem ended up being exactly what I suspected: I just
wasn’t munmapping some mmaped shared memory when sending buffers off to
the mixer, so the calls to shm_unlink weren’t doing
anything since the kernel thought they were still being actively used.
I’ve got another week here in Madison (I’m cat-sitting) to practice and tune the instrument scripts, then just under a week at home again to make any modifications to the hardware side of things before heading off to Texas…
I’m hoping Andrew has an acoustic guitar I can use as a resonator – that ended up working out well. I also kind of like the idea of not really fixing on one resonator, but trying out whatever’s around. Might grab some backup transducers and even see if I can fit a second amp in my bag when I’m home again…