« October 2007 | Main | December 2007 »

November 26, 2007

NIME Progress Report #6

Here's an excerpt of a Frotzophone session with some of the adjustments I've been working on during the week (~2min 192kbps MP3). I incorporated some of the droning noises that I was experimenting with last week, and added some code to eliminate old/boring threads.

I spent a lot of time this week just playing with the ChucK patch and making noise. I'm still not satisfied with the sound—in fact, I think it's getting TOO complex—but at least the patchmore stable than it used to be. I also worked a bit on the visualization applet, which is now almost usable (but still not pretty), and on some general documentation (hopefully we'll see Frotzophone in the Winter show).

November 19, 2007

NIME Progress Report #5

This week has so far been devoted to experimentation and rehearsal. For "rehearsal" read finding bugs: one problem I identified a few days ago is that my ChucK patch gives out after about 47 concurrent threads (or shreds or whatever). This limitation turned a rather stirring headphone performance of Spider and Web into a stuttering fiasco. There's not much I can do to optimize the code at this point—each thread contains just a single sine oscillator going into an envelope generator—so I'm trying to think of ways to cut down on the number of threads I create, or some way to cull uninteresting threads. One idea is to look for and drop objects past a certain age that have only ever been attached to one parent.

Or I could just make sure that the story file I write and/or perform never plays more objects than my patch can handle.

One major change to the patch this week was that an object's note sequence gradually gets quieter unless some activity occurs that involves that object. This has the benefit of decluttering the sound a little bit, but has the side effect of making the piece time-sensitive: if I don't keep playing at a certain speed, the piece will fade to silence. I like this. I'm enjoying the added sense of dynamics and urgency. A little bit of analog control goes a long way.

I've also been experimenting with a few new audio textures. One idea that seems promising (though I haven't implemented it yet) is to introduce sustained droning sounds for parent objects. As an object has more children attached to it, its drone will increase in volume. (There will probably be some kind of lower limit to the number of attachments necessary.) This fits in pretty well with the mapping I'm already working with, and adds a number of musical possibilities.

November 12, 2007

NIME Progress Report #4

visualization screenshot

The above is a screenshot from a very early version of the Frotzophone visualizer. The circles represent Z-Machine objects, and the white lines indicate parent/child relationships between those objects. Gray lines are drawn between any two objects that have been in a parent/child relationship. It's rough, and not very readable, but the basic components are there. (This applet, developed with Processing, receives information from ChucK over OSC.)

Eventually the dots will change color when the object in question is being played. The "root node" will also be hidden, as this is merely a convenience object present only in the Processing code.

Giving the prototype presentation last week was helpful, and I learned a lot about what I'm doing in the process of preparing it. Here's a quicktime file of the presentation, and here is the Z-Machine file of the quickie text adventure that I prepared for the presentation. Play it with Zoom or another interpreter of your choice; you can also download the source code.

Other work this week included a few experiments with volume and timbre. I'm still not 100% happy with the sound of the piece, but I'm wary of anything that will complicate the mapping between data and sound.

November 05, 2007

NIME Progress Report #3: Frotzophone Comes Alive!

The above screenshot (click for a larger version) shows the primary components of my piece as they currently stand. The ChucK patch is open on the left; my hacked version of Frotz is in the center; and on the right you can see the ChucK status window, which is showing some of the data being passed from the interpreter to the ChucK patch.

Here is what the Frotzophone currently sounds like (3'31" 192kbps MP3). The game (and gameplay) that generated this sound comes from the very beginning section of Zork I. Appreciate this noise, for it is dearly won: I had to learn how to handle strings in C. Not fun.

How it works

Last week I explained a method of tracking objects in the Z-Machine—specifically, keeping track of when one object is "attached" to another. This happens whenever the player object is attached to a room (i.e., when the player moves to a room) or when an object corresponding to an in-game item is attached to the player (i.e., when the player picks up an item) or when a non-player character does either of these things.

The Z-Machine interpreter sends an OSC message whenever such an attachment takes place, reporting both the parent object and the child object. The ChucK patch checks to see if the parent object has been seen before; if not, it associates that parent object with a note from a pre-determined scale. That note is then (and on subsequent appearances of that parent object) added to a list of notes for that child object. The ChucK patch plays the list of notes for each child object simultaneously and in a loop; the effect is sort of an aural history of how objects have been related to one another.

Challenges

I feel confident that I'm closing in on both the technical and aesthetic aspects of the piece. The mapping of notes to relationships between in-game objects feels right, and I like the way it sounds. I still have a long way to go, though. Here are some pretty significant challenges and issues (just off the top of my head):

(1) I need a more effective way of explaining the piece and how it works. I feel like the underlying mapping is actually kind of intuitive (in a strange way), so I should be able to explain it without resorting to a full-blown exposition of the history of interactive fiction. I like talking about the technical details, but I need to be better prepared to explain it succinctly to less technical audiences.

(2) I think I also need some kind of visual representation of what's going on inside the ChucK patch—for the audience's benefit and my own. Fortunately, the data I'm getting out of the interpreter lends itself to this kind of display. I might be able to work up something real quick in Processing.

(3) The current mapping doesn't leave much room for the piece to grow and breathe. The sound gets almost overwhelmingly intricate after only a dozen or so moves; the different threads are hard to pick apart. I have a few ideas for getting around this—stereo separation (or multichannel audio!) is a good start. I'm also considering having the loops for objects gradually grow quieter and louder in response to how often the object is seen. Ideally, though, I'd like to map the timbre of the sound to the data in some way.

(4) The piece isn't as expressive as I'd like it to be. When I imagine my performance, I feel a little bit hemmed in. I'm considering maybe adding some extra-diagetic commands to the interpreter that would allow me to make changes to the sound of the piece—something to change the tempo, maybe, or to solo/mute loops for particular objects.

Hopefully I'll have made some headway on one or more of these issues by Wednesday.