Thursday, November 17, 2005

Tuesday I was admiring Octal Khan's house with some friends. Octal's house has been carefully textured to create the illusion of diffused summer light, and the effect is quite nice. It's also laid out very realistically, like an actual house would be; as a consequence, it's preferable to negotiate the tight (for SL) spaces in mouselook.

Each room has a specific purpose, including a kitchen, livingroom, bedroom, etc. One room which immediately grabbed my attention was the music room. It was lovingly crafted to mimic a modern home studio, with electronic keyboards and a centralized desktop computer to run everything. Of course none of it was functional, but it looked very tactile to me.

Octal in his music room.

I said aloud "I wish Linden Lab would integrate a General MIDI module into the Second Life client." Marcos Fonzarelli countered with something along the lines of (and I paraphrase) "No way. I've heard enough crappy MIDI files on the Web to last me a hundred lifetimes, thankyouverymuch." And he has an excellent point there...nobody likes MIDI on the Web. At the same time, I've heard enough bad techno streaming from parcels all across the Second Life grid to kill my higher functioning brain cells many times over. Audio can be abused in so many ways.

What made me think about MIDI in this circumstance had nothing to do with playing prerecorded music. It was about giving musicians a way to collaborate in Second Life.

A MIDI file is different from a sound file in that it actually contains no audio information. Rather, it is a set of instructions sent to an electronic instrument, telling it what sounds to use, what notes to play, how loudly to play, etc. Because MIDI files contain no actual audio information, they are much smaller than WAV or MP3 files (which is why they're popular on the Web). The downside is that it is up to the instrument receiving the MIDI information as to how to interperet it. An instrument built by Yamaha may play the same MIDI file very differently from an instrument built by Roland.

In the early 90s instrument makers collaborated on the General MIDI specification. Among other things, the General MIDI spec defines a predictable list of electronic instrument sounds for MIDI use. So if I make a MIDI file that sends the information "play sound number 22," both the Yamaha and Roland instruments know I want an accordian sound. The Yamaha accordian may sound different from the Roland accordian, but at least we know we can expect to get an accordian sound of some kind.

When you listen to MIDI files on the Web, generally you are hearing them played by a software synthesizer...a computer program that acts as a musical instrument. Often the software synthesizer is embedded into your sound card. On Macs it is integrated into QuickTime. And there are any number of standalone software synthesizer programs available for purchase or download.

What if Linden Lab licensed a decent-quality, General MIDI-compatible software synthesizer to integrate into the Second Life desktop client? It would be controllable via Linden Scripting Language, allowing people to create bandwidth-efficient musical instruments. Because the sounds would all be produced locally on your computer, rather than streamed from the Internet, performance would be lightyears better than the streaming audio we're familiar with in SL; The amount of data necessary to trigger the sounds is tiny.

Imagine buying a drum kit in SL. It comes with drumming animations for your avatar, and when you activate the drums a HUD appears on your screen with visual representations of all the drum heads in the set. Click on the snare, and a signal is sent to the software synth embedded in every SL client within listening distance to play General MIDI percussion sound number 40. Click the bass drum and percussion sound number 36 plays.

Your friend buys a guitar, which works similarly to the drum kit, except it plays General MIDI sound 30 (overdriven guitar). The cool part is you can both play at the same time, in real time. Add a couple more friends with instruments, and you have a Second Life band that can actually perform live in-world.

I admit that I have painted a simplistic picture here. Even the fastest data transfer in SL can be affected by lag, and mouse clicking on HUD objects is not the best interface for playing anything other than the simplest music. I have no idea of the technical hurdles that would be involved in adding the necessary MIDI tools. Nonetheless, I think it's an interesting idea, and would be a huge step in allowing musicians to participate more fully in their Second Life.

1 comment:

A slightly different approach but one that's in the here-and-now... A few of us musically oriented avatars have been building various in world instruments that use tone banks of midi-like wav files for instruments like piano and violin. We have also recently shown how tools from the libsecondlife project can be used to communicate with midi devices, i.e. to use a midi keyboard and a midi-to-text converter such as the java project MidiInDump to send msgs to play in world musical instruments. Let me know if this is of interest to you :-)Amber H