« Meditation #4 | Main | Minim DriveBy »

Algorithmic Composition: Final Project Idea

One of my interests is how we structure text in order to make it computer-legible. Probably the most pervasive way of structuring text on the Internet today is HTML, which has several interesting properties that make it relevant to music-making.

First, it's recursive: most elements can themselves contain other elements. In this sense, an HTML document resembles an L-System, and it's possible to draw a tree from the flattened data structure that looks very much like a classical L-System visualization. (See, for example, Websites as Graphs.)

In addition to being recursive, HTML also repetitive: think of menu items in an unordered list, or table cells in a table. Most HTML documents contain small, repeating (though not necessarily identical) structures like this.

So here's my idea for a final project: a piece of software that sonifies HTML structure.

Specifically, I'd like to build a web browser plug-in/extension that generates sound from the web page that the user is currently looking at. This structure might be very simple or highly complex; it might change in the course of viewing the page (given the possibility of modifying the page in real-time with JavaScript). The idea is to provide another layer to the experience of browsing the web—an experience that HTML suggests, but is not (generally) planned for in the design of a web page. In this way, the piece will serve to expose and make more transparent the structure of the underlying data.

Challenges and extra credit after the jump.

The main technical challenge is simply to get some kind of sound-generating code inside of a browser extension. JavaScript doesn't natively support any kind of sound output, of course, and (from what I've read) getting any native code into a Firefox/Mozilla extension is pulling-teeth difficult. One possibility is using rtcmix within a Safari browser extension; Safari has a very clean interface for that kind of thing, but I'll have to learn Objective-C in order to use it.

Another challenge is figuring out how to map the data to sound. I'm pretty sure I'll follow a strategy like the one I used for Meditation #4, in which note values are stored in a stack and multiple layers of hierarchy are played against one another (I think a lot of methods used for sonifying L-Systems will be applicable to this project). As far as the aesthetics of the piece: I'm predisposed to droney, meditative stuff, but it might be fun to make something rhythmic and noisy. Maybe the piece can do both, or something in between, and this will be controlled by some aspect of the page being sonified.

Extra credit for myself: I'd like to make it a performable piece, in some sense. No one will want to watch me loading up web pages up on stage (although I do think that would be kind of an awesome performance!), but maybe it could be made more interesting by (as suggested above) making changes to the structure of a page in real-time using JavaScript or a DOM browser.

Post a comment

(If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.)