flight of the cattri

for those who need to be refreshed, the Cattri = my linux cluster.  currently, it's four old-ish computers i got for free, connected with a router, which communicate with each other (and anyone on the wireless network) over OpenSoundControl (UDP) and SSH.  the name comes from the Pali word for the Four Noble Truths in Buddhism, literally "the four".  each computer is named after one of the Noble Truths.  i use these computers to make music.

last semester, i composed a piece for the cattri called "Sanction of the Victim", and implemented a few proofs-of-concept.  eventually i performed it at  Diapason art  space  for a crowd consisting mostly of my classmates.  if you'd like more in-depth documentation, feel free to dig around in my blog archives.  there have been lots of versions of this composition.  the basic idea is that there are two systems, like species of organisms, let's say, living on a single network, sharing its resources.  one organism likes to band together into herds, and those herds tend to band together into meta-herds, and so fourth.  these are represented in sound as a pitch constellation, played by a virtual instrument that resembles the Gamelan, but in only the most extended sense.  it also sounds a bit like a drippy shower head.  the other organism spreads virally, using up network resources and eventually disabling the router.  it exploits minute differences in the timing across the network.  this beast sounds a bit like a furious tremolo on a rubber band orchestra.  when i performed the piece, after i infected the network with the virus, i got up and theatrically unplugged each computer from the router, performing a kind of quarantine.  if you caught the reference from the title, it is a case of "Belkin Shrugged".

in addition to relating to my thesis, this composition is significant because i will be performing a revised version of this piece at the SuperCollider symposium on April 10.  until recently, i had been focusing a lot of my efforts on the flocking algorithm that directs the pitch constellation.  there was also an issue with representing the positional data of the flocks with the pitch constellation, which i solved using a hyperbolic wave terrain (see terrains-- they're pretty!).  each of these tests i ran on my blazingly fast macbook pro.  when i first tried to implement the flocks on Dukkha ("the reality of suffering"), often the first "remote" location i test things on, it pretty much started emitting smoke.  ...ok that's an exaggeration, but it was bad!

i spent the next few days trying to make the algorithm more zippy.  i overhauled the synthesis functions and got them under control.  initially i had wanted each note to ring out for a period inversely proportional to its frequency, so lower notes would last longer.  when this was implemented, the fact that each note brought with it more cpu overhead became a serious problem.  to solve this, i ended up using a physical modeling approach where each 'note' is triggered by a similar excitation signal-- basically enveloped pink noise-- and the different notes are really the result of a ringing filter, simulating a resonant body, like a bell or drum.  this way, i raised the overhead for the whole system, but decreased the cpu spikes that would occur if many notes overlapped, since the excitation signals are very short.

once the synthesis functions were more efficient, i tried to tighten up the logic that triggered them.  the problem was the flocking algorithm itself.  no matter how i sliced it, or which scheduler i used, nothing was happy.  the fact of the matter is that using my implementation and hardware, a flock of 40 automatons is simply too much to handle per cpu.  i realize that i could use a kd-tree structure or something similar to divide up the space into smaller quadrants, but that is for a later revision.  for now, the problem has been solved by distributing the pitch constellation across the cluster with a good deal of redundancy.  i let each cpu handle a constellation of 13 flocking pitch-creatures, giving me 12 pitches that are doubled.  i mapped these out to make sure they are not in reinforcing sections of the octave.  since each cpu will have representations of the other cpu's average positions and headings to flock with, i am not concerned with the computational tradeoff.

then came the problem of distributing the flocks across the network.  i had gone through a lot of testing to ensure that a model of the process would work between my macbook and Dukkha.  because much of SuperCollider is an interpreted environment, working on many computers at once can be somewhat troublesome.  it's hard to remember exactly what you have going on in each environment on the network.  it's like trying to keep track of four different conversations at once.  a lot of networked music solutions i've seen in SuperCollider, Chuck, and PD do not address this problem, since the common assumption is that each computer is manned by a different performer.  i have developed a tool to extend the supercollider environment so that it is readily distributed on my hardware.  i made no real efforts to generalize it, since my needs are my own, but in reality it would not take very much to use it on other distributed SuperCollider setups.  even with this tool, i was running into problems with addressing multiple computers simultaneously and transcribing the event into a reasonably easy to interpret notation.  i resolved this problem-- and thus arrived at code that lets my Cattri flock together-- by further extending this tool.  now, i can make transcriptions of code that gets sent to each computer, with notes on which computers received the code.  i realize now that as a performer of "SoV", my instrument is not only the Cattri itself but the tool i created to interface into it, so a static representation of the code that runs the piece in the abstract is not enough to allow for simple realizations.  for a notation to work properly, it must be something that takes into account instructions for me as well as my cybernetic extensions.  in other words, i am now a firm believer in documentation.  of course, eventually it is conceivable that i could condense this notation into instructions for my laptop to conduct the piece, without my direction at all.

so i have some documentation videos and sound recordings, but i'm afraid i'll have to wait to release them until after the 10th.

Leave a Reply

Your email address will not be published. Required fields are marked *