Music as Program

Something is bugging me. Playing music isn’t always fun. So like, what gives? I’m learning a new skill. Learning can be fun, and Raph Koster practically equates the two.

I recall when I was learning to program – typing in BASIC programs (usually games) from magazine listings and then tweaking them.

I realized what the difference is. In the programs, I could make some sense of them. It wasn’t too hard to pick out a statement that read a key, and figure out that x = X + 10 moved a character to the right. I could understand the program so i could change it.

I don’t understand music. It is utterly opaque to me. Since I don’t understand it, I have nothing to direct change; I can’t play around with it. I can’t engage in the process of creation, which I’ve picked out in the past as a key factor in my general mental health. (This entry might do me some good.)

I’ve read a few things. There is tonic, dominant, leading tones, etc. But I don’t see them. I’m sure experienced musicians can see things things. But I’m not experienced. Sheet music is as enlightening to me as (get this) binary machine code.

Yep yep yep. Music is a program, and musical notation amounts to reading a program in hex bytes. All well and good for the machine executing it – which is exactly what a musician is doing with a piece of sheet music. Since sheet music is made for people trying to ‘execute’ it, this works out well enough. It’s also clear as mud. The ability of experienced musicians to see the deeper structures in sheet music equates to ability of hardcore programmers to see the structure in a binary executable. Sure, it can be done, but it doesn’t strike me as especially effective.

Now to be fair, I did set out to learn how to play music, not compose it. I was hoping to pick up some understanding along the way, but my focus thus far has been on execution not understanding. Still, wheres my ‘C’? C++? Perhaps some Lisp, Haskell, or ML and nice higher order programming? Something like BASIC wouldn’t be all bad to start out with. Even Assembly would be a step up at this point. I suspect that assembly, or putting mnemonic labels on the machine instructions, equates to identifying the roles (tonic, dominant) and intervals. You have a slightly better idea what is going on, but not really why.

There are still two problems. One, this amounts to dis-assembly – taking the raw machine code and reversing engineering the meaning. In programming this is always a lossy process* – even just going to assembly you lose labels, symbolic constants, comments, etc. Second, where are those higher level languages? We’re still at the register-transfer level here. Has my education, focusing on playing such as it has, merely been negligent, or is there really nothing out there?

*Edit – technically, it is assembly that is lossy. Dis-assembly loses no more information, and often adds to it by identifying slightly larger structures.

Posted Friday, September 1st, 2006 under Essay.

Comments are closed.