In my previous post, I described a composition that I made based on a computer simulation of stochastic fluid dynamics. I like the idea of putting patterns in particle interaction (or patterns in data-structure manipulation, depending on your perspective) to work as musical tools. By transliterating from the language of particles/data-structures to the language of sound, a piece of music emerges.
I am curating The Racer Sessions on October 3rd. I plan to use an updated version of the fluid dynamics piece as the composition I present. With it, however, I plan to make another composition, if I have time during the next two months. I will compose by writing a program. I know how the program’s operations are translated to sounds, so I can use the programming language as a compositional medium. Then, rather than using patterns the chance interactions of a randomized simulation to make sound, I can use explicitly and intentionally constructed patterns to generate a more coherent and intentional piece of music.
The aspect of this style of composition that will be particularly challenging is that programs of the sort I plan to write are inherently non-deterministic [a paper I co-authored on this subject]. The root of the non-determinism is that there are many concurrently acting ”threads”. Each thread can do as much or as little as it wants before the next is allowed to do what it wants. Conceptually, each thread has a list of program actions to perform (each of which may or may not generate a sound). The computer system adds the threads to a queue, much like they’re standing in line at the grocery store. Each gets to the front of the line and does whatever it has to do (the program actions I specify) for as long as it likes. When the front thread finishes, or its program actions indicate it should wait or yield, or the system decides the front thread has had enough, the next in line gets to go, and the front thread goes to the back of the line. Now, because of computer systems issues too subtle to be interesting in this context (resource contention, variable memory access latency, hardware error correction, memory consistency, etc) there is also a phenomenon something like ”cutting in line”. That means that the order of the queue can’t even be relied on in a program (composition). The upshot of the non-determinism is that each thread’s actions can, to a degree be proscribed in a composition program, but ultimately, the sequence in which each thread, and all threads’ actions are performed is up to the system. Viewed as a black box, it is as thought the composition undergoes a randomizing transformation as it is executed.
I am interested to investigate what and how much the effects of the randomizing transformation will be. My hope is to have a few test compositions up here before October 3rd.